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

Ранее, если адаптивные карточки отправлялись в беседе 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

В следующем коде приведен пример карточки ответа 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 для Алекса

В следующем коде приведен пример карточки ответа 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 активирует обновление двумя способами: с помощью обновления или путем нажатия кнопки Выполнить. Обновление активируется только в том случае, если карточка последнего вызова старше минуты. Поведение обновления можно контролировать, добавив метку времени в контейнер данных и проверив ее перед отправкой обновленной карточки.

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

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

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

Примечание.

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

Пример кода

Название примера Описание .NETCore Node.js
Адаптивные карточки последовательных рабочих процессов Демонстрация реализации последовательных рабочих процессов, пользовательских представлений и актуальных адаптивных карточек в ботах. View Просмотр

См. также