Cartões atualizadosUp to date cards

Agora você pode fornecer informações mais recentes aos usuários sobre Cartões Adaptáveis com uma combinação de edições de atualização e mensagens Teams.You can now provide latest information to your users on Adaptive Cards with a combination of refresh and message edits in Teams. Com isso, você pode atualizar dinamicamente as Exibições Específicas do Usuário para seu estado mais recente, como e quando há uma alteração em seu serviço.With this you are able to update the User Specific Views dynamically to its latest state as and when there is a change on your service. Por exemplo, no caso de cartões de gerenciamento de projeto ou de tíquetes, você pode atualizar comentários e o status da tarefa.For example, in the case of project management or ticketing cards, you can update comments and the status of the task. Em caso de aprovações, o estado mais recente é refletido, além de fornecer informações e ações diferenciadas.In case of approvals the latest state is reflected while also providing differentiated information and actions.

Por exemplo, um usuário pode criar uma solicitação de aprovação de ativo em uma Teams conversa.For example, a user can create an asset approval request in a Teams conversation. Alex cria uma solicitação de aprovação e a atribui a Megan e Nestor.Alex creates an approval request and assigns it to Megan and Nestor. Veja a seguir as duas partes para criar a solicitação de aprovação:The following are the two parts to create the approval request:

  • Os Exibições Específicas do Usuário podem ser aproveitados usando refresh a propriedade dos Cartões Adaptáveis.User Specific Views can be leveraged using the refresh property of the Adaptive Cards. Usar Exibições Específicas do Usuário pode mostrar um cartão com botões Aprovar ou Rejeitar para um conjunto de usuários e mostrar um cartão sem esses botões para outros usuários.Using User Specific Views one can show a card with Approve or Reject buttons to a set of users, and show a card without these buttons to other users.

  • Para manter o estado do cartão atualizado sempre, Teams mecanismo de edição de mensagens pode ser aproveitado.To keep the card state updated at all times, Teams message edit mechanism can be leveraged. Por exemplo, sempre que houver uma aprovação, o bot pode disparar uma edição de mensagem para todos os usuários.For example, each time there is an approval, bot can trigger a message edit to all users. Essa edição de mensagem bot dispara uma solicitação de invocação para todos os usuários de atualização automática, para os quais o bot pode responder com o cartão adaptiveCard/action específico do usuário atualizado.This bot message edit triggers an adaptiveCard/action invoke request for all automatic refresh users, to which the bot can respond with the updated user specific card.

Para obter mais informações, consulte como fazer uma edição de mensagem de bot.For more information, see how to do a bot message edit.

Cartão base de aprovaçãoApproval base card

O código a seguir fornece um exemplo de um cartão base de aprovação:The following code provides an example of an approval base card:

{
  "$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**"
    }
  ]
}

Cartão de aprovação com botões Aprovar e RejeitarApproval card with Approve and Reject buttons

O código a seguir fornece um exemplo de cartão de aprovação com botões Aprovar e Rejeitar:The following code provides an example of an approval card with Approve and Reject buttons:

{
  "$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>"
      }
    }
  ]
}

A seguir estão as duas funções mostradas aos usuários, dependendo do envolvimento na solicitação de aprovação:Following are the two roles that are shown to users depending on their involvement in the approval request:

  • Cartão base de aprovação: mostrado para usuários que não fazem parte da lista de aprovadores e ainda não aprovaram ou rejeitaram a solicitação e não fazem parte da lista na propriedade do JSON do Cartão userIds refresh Adaptável.Approval base card: Shown to users who are not part of approvers list and have not yet approved or rejected the request, and are not part of userIds list in refresh property of the Adaptive Card JSON.
  • Cartão de aprovação com botões Aprovar ou Rejeitar: mostrado para os usuários que fazem parte da lista de aprovadores e a lista na propriedade do JSON do Cartão userIds refresh Adaptável.Approval card with Approve or Reject buttons: Shown to the users who are part of the approvers list and the userIds list in the refresh property of the Adaptive Card JSON.

Para enviar a solicitação de aprovação de ativosTo send the asset approval request

  1. Alex levanta uma solicitação de aprovação de ativos em uma Teams e a atribui a Megan e Nestor.Alex raises an asset approval request in a Teams conversation and assigns it to Megan and Nestor.

  2. Bot envia o cartão base de aprovação na conversa.Bot sends the approval base card in the conversation.

  3. Todos os outros usuários na conversa veem o cartão enviado pelo bot.All other users in the conversation see the card sent by the bot. A atualização automática é disparada para Megan e Nestor, que agora veem o cartão específico do usuário com os botões Aprovar ou Rejeitar como seus MRIs de usuário são adicionados à lista na propriedade do userIds Cartão refresh Adaptável.Automatic refresh is triggered for Megan and Nestor, who now see the user specific card with Approve or Reject buttons as their user MRIs are added to the userIds list in the refresh property of the Adaptive Card.

    Exibições específicas do usuário

  4. Nestor seleciona o botão Aprovar que é alimentado com Action.Execute .Nestor selects the Approve button which is powered with Action.Execute. O bot recebe uma adaptiveCard/action solicitação de invocação à qual ele pode retornar um Cartão Adaptável em resposta.The bot gets an adaptiveCard/action invoke request to which it can return an Adaptive Card in response.

  5. O bot dispara uma edição de mensagem com um cartão atualizado que diz que Nestor aprovou a solicitação enquanto a aprovação de Megan está pendente.The bot triggers a message edit with an updated card which says Nestor has approved the request while Megan's approval is pending.

  6. A edição de mensagem bot dispara uma atualização automática para Megan e ela vê o cartão específico do usuário atualizado, que diz que Nestor aprovou a solicitação, mas também vê os botões Aprovar ou Rejeitar.Bot message edit triggers an automatic refresh for Megan and she sees the updated user specific card, which says Nestor has approved the request, but also sees the Approve or Reject buttons. A MRI do usuário de Nestor é removida da lista na propriedade deste JSON de Cartão Adaptável nas etapas userIds refresh 4 e 5.Nestor's user MRI is removed from the userIds list in refresh property of this Adaptive Card JSON in steps 4 and 5. Agora, a atualização automática só é disparada para Megan.Now, automatic refresh is only triggered for Megan.

    Exibições específicas do usuário atualizadas

  7. Agora, Megan seleciona o botão Aprovar, que é alimentado com Action.Execute .Now, Megan selects the Approve button, which is powered with Action.Execute. O bot recebe uma adaptiveCard/action solicitação de invocação à qual ele pode retornar um Cartão Adaptável em resposta.The bot gets an adaptiveCard/action invoke request to which it can return an Adaptive Card in response.

  8. O bot dispara uma edição de mensagem com um cartão atualizado, que diz que Nestor e Megan aprovaram a solicitação.The bot triggers a message edit with an updated card, which says Nestor and Megan have approved the request.

  9. A edição da mensagem bot não dispara nenhuma atualização automática.Bot message edit does not trigger any automatic refresh. A MRI do usuário de Megan também é removida da lista na propriedade deste JSON de Cartão Adaptável nas etapas userIds refresh 7 e 8.Megan's user MRI is also removed from the userIds list in refresh property of this Adaptive Card JSON in steps 7 and 8.

    Exibições atualizadas

Cartão Adaptável enviado como resposta adaptiveCard/action de e message editAdaptive Card sent as response of adaptiveCard/action and message edit

O código a seguir fornece um exemplo de Cartões Adaptáveis enviados como resposta e para as adaptiveCard/action message edit etapas 4 e 5:The following code provides an example of Adaptive Cards sent as response of adaptiveCard/action and message edit for steps 4 and 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**"
    }
  ]
}

O código a seguir fornece um exemplo de Cartões Adaptáveis enviados como resposta de invocar por meio da atualização automática para a adaptiveCard/action etapa 6:The following code provides an example of Adaptive Cards sent as response of adaptiveCard/action invoke through automatic refresh for step 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>"
      }
    }
  ]
}

O código a seguir fornece um exemplo de Cartões Adaptáveis enviados como resposta e para as adaptiveCard/action message edit etapas 7 e 8:The following code provides an example of Adaptive Cards sent as response of adaptiveCard/action and message edit for steps 7 and 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**"
    }
  ]
}

Confira tambémSee also