Актуальные карточки

Теперь вы можете предоставить пользователям последнюю информацию по адаптивным картам с сочетанием обновлений и изменений сообщений в Teams. Благодаря этому вы можете динамически обновлять пользовательские представления до последнего состояния, как и когда в службе происходит изменение. Например, в случае управления проектами или карточек с билетами можно обновить комментарии и состояние задачи. В случае утверждений отражается последнее состояние, а также предоставляется дифференцированная информация и действия.

Например, пользователь может создать запрос на утверждение активов в Teams беседе. Алекс создает запрос на утверждение и назначает его Меган и Нестор. Ниже следующую часть для создания запроса на утверждение:

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

  • Чтобы состояние карты постоянно обновлялось, Teams можно использовать механизм редактирования сообщений. Например, при каждом утверждении бот может запускать правки сообщений для всех пользователей. Это изменение сообщения бота вызывает запрос на вызов для всех пользователей автоматического обновления, на которые бот может отвечать с помощью обновленной adaptiveCard/action пользовательской конкретной карты.

Дополнительные сведения см. в дополнительных сведениях о том, как изменить сообщение бота.

Базовая карта утверждения

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

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "acceptRejectView"
    },
    "userIds": ["<Megan's user MRI>", "<Nestor's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Asset Request B12"
    },
    {
      "type": "TextBlock",
      "text": "Submitted by **Alex**"
    },
    {
      "type": "TextBlock",
      "text": "Approval pending from **Megan and Nestor**"
    }
  ]
}

Карточка утверждения с кнопками Утверждение и Отклонение

В следующем коде приводится пример карточки утверждения с кнопками Утверждение и Отклонение:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "acceptRejectView"
    },
    "userIds": ["<Nestor's user MRI>", "<Megan's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Approval Request B12"
    },
    {
      "type": "TextBlock",
      "text": "Submitted by **Alex**"
    },
    {
      "type": "TextBlock",
      "text": "Approval pending from **Megan and Nestor**"
    }
  ],
  "actions": [
    {
      "type": "Action.Execute",
      "title": "Approve",
      "verb": "approve",
      "data": {
            "more info": "<more info>"
      }
    },
    {
      "type": "Action.Execute",
      "title": "Reject",
      "verb": "reject",
      "data": {
            "more info": "<more info>"
      }
    }
  ]
}

Ниже показаны две роли, показанные пользователям в зависимости от их участия в запросе на утверждение:

  • Базовая карточка утверждения. Показана пользователям, которые не являются частью списка утверждений и еще не одобрили или не отклонили запрос, и не являются частью списка в свойстве адаптивной userIds refresh карты JSON.
  • Карточка утверждения с кнопками Утверждение или Отклонение: Показана пользователям, которые являются частью списка утверждений, и списком в свойстве userIds refresh адаптивной карты JSON.

Отправка запроса на утверждение активов

  1. Алекс поднимает запрос на утверждение активов в беседе Teams и назначает его Меган и Нестор.

  2. Бот отправляет базовую карточку утверждения в беседе.

  3. Все остальные пользователи в беседе видят карточку, отправленную ботом. Автоматическое обновление запускается для Меган и Нестор, которые теперь видят определенную карточку пользователя с кнопками Утверждение или Отклонение при добавлении их пользовательских МРЦ в список в свойстве userIds refresh адаптивной карты.

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

  4. Нестор выбирает кнопку Утверждение, которая питание с Action.Execute . Бот получает запрос на вызов, на который он adaptiveCard/action может вернуть адаптивную карту в ответ.

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

  6. Редактирование сообщения бота запускает автоматическое обновление для Меган, и она видит обновленную карточку пользователя, которая говорит, что Нестор одобрил запрос, но также видит кнопки Утверждение или Отклонение. MRI пользователя Nestor удаляется из списка в свойстве этой адаптивной карты JSON в шагах userIds refresh 4 и 5. Теперь автоматическое обновление запускается только для Меган.

    В курсе конкретных представлений пользователей

  7. Теперь Меган выбирает кнопку Утверждение, которая питание с Action.Execute . Бот получает запрос на вызов, на который он adaptiveCard/action может вернуть адаптивную карту в ответ.

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

  9. Изменение сообщения бота не вызывает автоматического обновления. MRI пользователя Меган также удаляется из списка в свойстве этой адаптивной карты JSON в шагах userIds refresh 7 и 8.

    Просмотры на сегодняшний день

Адаптивная карта, отправленная в adaptiveCard/action ответ и message edit

В следующем коде приводится пример адаптивных карт, отправленных в ответ на действия adaptiveCard/action message edit 4 и 5.

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "acceptRejectView"
    },
    "userIds": ["<Megan's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Asset Request B12"
    },
    {
      "type": "TextBlock",
      "text": "Submitted by **Alex**"
    },
    {
      "type": "TextBlock",
      "text": "Approval pending from **Megan**"
    },
    {
      "type": "TextBlock",
      "text": "Approved by **Nestor**"
    }
  ]
}

В следующем коде приводится пример адаптивных карт, отправленных в ответ на вызов с помощью автоматического adaptiveCard/action обновления для шага 6:

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "acceptRejectView"
    },
    "userIds": ["<Megan's user MRI>"]
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Approval Request B12"
    },
    {
      "type": "TextBlock",
      "text": "Submitted by **Alex**"
    },
    {
      "type": "TextBlock",
      "text": "Approval pending from **Megan**"
    },
    {
      "type": "TextBlock",
      "text": "Approved by **Nestor**"
    }
  ],
  "actions": [
    {
      "type": "Action.Execute",
      "title": "Approve",
      "verb": "approve",
      "data": {
            "more info": "<more info>"
      }
    },
    {
      "type": "Action.Execute",
      "title": "Reject",
      "verb": "reject",
      "data": {
            "more info": "<more info>"
      }
    }
  ]
}

В следующем коде приводится пример адаптивных карт, отправленных в ответ на действия 7 и adaptiveCard/action message edit 8.

{
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
  "type": "AdaptiveCard",
  "version": "1.4",
  "refresh": {
    "action": {
      "type": "Action.Execute",
      "title": "Refresh",
      "verb": "acceptRejectView"
    },
    "userIds": []
  },
  "body": [
    {
      "type": "TextBlock",
      "text": "Asset Request B12"
    },
    {
      "type": "TextBlock",
      "text": "Submitted by **Alex**"
    },
    {
      "type": "TextBlock",
      "text": "Approved by **Nestor and Megan**"
    }
  ]
}

См. также