Пользовательские просмотры

Ранее, если адаптивные карточки отправлялись в беседе Teams, все пользователи будут видеть одно и то же карта содержимое. С появлением модели универсальных действий и refresh адаптивных карточек разработчики ботов теперь могут предоставлять пользователям специальные представления адаптивных карточек. Теперь та же адаптивная карточка может обновиться до адаптивной карточки для конкретного пользователя. Адаптивная карточка предоставляет эффективные сценарии, такие как утверждения, элементы управления создателями опросов, запросы, управление инцидентами и карточки управления проектами.

Примечание.

  • Пользовательское представление поддерживается для адаптивных карточек, отправляемых ботом, и зависит от универсальных действий.
  • Не более 60 разных пользователей могут видеть другую версию карта с дополнительными сведениями или действиями.

Например, Меган, инспектор по безопасности компании Contoso, хочет создать инцидент и назначить его Алексу. Меган также хочет, чтобы все в команде были в курсе инцидента. Megan использует расширение сообщений об инцидентах Contoso на основе универсальных действий для адаптивных карточек.

Пользовательские представления для адаптивных карточек

В следующем коде приведен пример адаптивных карточек:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "editOrResolveView",
      "data": {
            "refresh info": "<refresh info>"
      }
    },
    "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Incident 1234"
    },
    {
      "type": "TextBlock",
      "text": "Incident details: <incident details>"
    }
  ]
}

Чтобы отправить адаптивные карточки, обновить пользовательские представления и вызвать запросы к боту:

  1. Когда Меган создает новый инцидент, бот отправляет адаптивную карточку или общую карта с подробными сведениями об инциденте в беседе Teams.
  2. Теперь этот карта автоматически обновляется до представления Для Конкретного пользователя для Меган и Алекса. Пользовательские МРТ Алекса и Меган добавляются в userIds свойство refresh свойства JSON адаптивной карточки. Карта остается прежним для других пользователей в беседе.
  3. Для Megan автоматическое обновление активирует adaptiveCard/action запрос на вызов к боту. Бот может вернуть создателя инцидента карта с Edit кнопкой в ответ на этот запрос вызова.
  4. Аналогично Для Алекса автоматическое обновление активирует другой adaptiveCard/action запрос на вызов к боту. Бот может вернуть владельца инцидента карта Resolve кнопку в ответ на этот запрос вызова.

Вызов запроса, отправленного из клиента Teams боту

В следующем коде приведен пример запроса на вызов, отправленного боту из клиента Teams Алекса и Мегана:

{ 
  "type": "invoke",
  "name": "adaptiveCard/action",

  // ... other properties omitted for brevity

  "value": { 
    "action": { 
      "type": "Action.Execute", 
      "id": "", 
      "verb": "editOrResolveView",
      "data": { 
            "refresh info": "<refresh info>"
      } 
    },
    "trigger": "automatic" 
  }
}

adaptiveCard/action invoke response карта

В следующем коде приведен пример карта ответа adaptiveCard/action invoke для Megan:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "editOrResolveView"
    },
    "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Incident 1234"
    },
    {
      "type": "TextBlock",
      "text": "Incident details: <incident details>"
    }
  ],
  "actions": [
    {
      "type": "Action.Execute",
      "title": "Edit",
      "verb": "edit",
      "data": {
            "additional info": "<additional info>",
            ...
      }
    }
  ]
}

adaptiveCard/action invoke response карта для Алекса

В следующем коде приведен пример карта ответа adaptiveCard/action invoke для Alex:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "editOrResolveView"
    },
    "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Incident 1234"
    },
    {
      "type": "TextBlock",
      "text": "Incident details: <incident details>"
    }
  ],
  "actions": [
    {
      "type": "Action.Execute",
      "title": "Resolve",
      "verb": "resolve",
      "data": {
            "additional info": "<additional info>",
            ...
      }
    }
  ]
}

Вызов ответа для возврата адаптивных карточек

В следующем коде приведен пример ответа вызова для возврата адаптивных карточек:

string cardJson = "<adaptive card json>";
var card = JsonConvert.DeserializeObject(cardJson);

var adaptiveCardResponse = JObject.FromObject(new
 {
    statusCode = 200,
    type = "application/vnd.microsoft.adaptive.card",
    value = card
 });

В следующем списке приведены карта рекомендации по проектированию для пользовательских представлений.

  • Поведение обновления. Вы можете создать не более 60 пользовательских представлений для определенного карта, отправленных в беседу, указав их userIds в свойстве Refresh .

    • userIds Если поле не указано в свойствеRefresh, клиент Teams может автоматически активировать обновление для всех пользователей, если в беседе меньше или равно 60 участников.

    • Чтобы пользователи вручную запускали карта обновление, они могут выбрать Обновить в меню параметров сообщения. Это происходит со всеми пользователями, когда в беседе менее 60 участников, или с набором пользователей, не указанных в userIds списке, когда в беседе всего или менее 60 пользователей.

  • Базовый карта. Бот отправляет сообщение, которое внедряется вместе с базовой версией карта. Все участники беседы могут просматривать одно и то же. Позже бот получает карточку конкретного пользователя путем обновления для пользователей, указанных userIds в разделе .

  • Время ожидания обновления. Клиент Teams активирует обновление двумя способами: с помощью обновления или путем нажатия кнопки Выполнить. Обновление активируется только в том случае, если карта последнего вызова старше минуты. Вы можете управлять поведением обновления, добавив метку времени в контейнер данных и проверив ее перед отправкой обновленного карта.

  • Для пользовательских представлений клиент Teams хранит 50 последних кэшированных карточек на каждого пользователя. Когда новому карта требуется кэширование, хранилище удаляет самую старую карта в зависимости от времени последнего чтения и заменяет ее последней карта. Процесс восстановления удаленных карточек по истечении определенного периода не выполняется. Пользователь также может очистить кэш Teams, чтобы удалить карточки из хранилища.

  • Обновление сообщения можно использовать для обновления базовой карта и одновременного обновления карточки пользователя. При открытии чата или канала также обновляется карта для пользователей с включенным обновлением.

  • В сценариях с большими группами, в которых пользователи переключаются на представление действия, для которого требуются динамические обновления для респондентов, можно добавлять в список до 60 пользователей userIds . Вы можете удалить первый респондент из списка, когда ответит 61-й пользователь. Для пользователей, которые удаляются из userIds списка, можно предоставить обновление вручную , чтобы получить последний результат.

  • Предоставьте пользователям запрос на получение представления для конкретного пользователя, где они видят только определенное представление карта или некоторые действия.

Примечание.

Карточка пользователя, возвращенная ботом, отправляется только конкретному клиенту, запросив его. Например, если пользователь переключается на другой клиент, например с настольного компьютера на мобильный, активируется другое событие вызова для получения обновленного карта.

Пример кода

Название примера Описание .NET Node.js Манифест
Адаптивные карточки последовательных рабочих процессов В этом примере демонстрируется реализация последовательных рабочих процессов, пользовательских представлений и текущих адаптивных карточек в ботах. Просмотр Просмотр Просмотр

См. также