Compartilhar via


Permitir a edição inline de respostas de Cartões Ajustáveis (pré-visualização)

Pode melhorar as respostas do Cartão Ajustável em agentes declarativos para Microsoft 365 Copilot ao permitir a edição inline. Esta abordagem permite que os card recolham dados de entrada, enviem payloads estruturados para a sua aplicação e atualizem dinamicamente o card com base nas respostas devolvidas, criando uma interação totalmente integrada e com estado sem sair da superfície do agente.

Este artigo descreve como utilizar a Action.Execute função (disponível a partir da versão 1.5 do esquema de Cartão Ajustável) para adicionar caixas de diálogo modais às respostas do agente Copilot. Estas caixas de diálogo permitem que os utilizadores editem e submetam informações através do Cartão Ajustável.

Observação

A Action.Execute função está atualmente em pré-visualização.

Edição de Cartões Ajustáveis

Para utilizar a ação da caixa de diálogo modal:

O exemplo seguinte mostra o esquema de Action.Execute.

{
  "static_template": {
    "type": "AdaptiveCard",
    "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
    "version": "1.5",
    "body": [
      {
        "type": "Container",
        "$data": "${$root}",
        "items": [
          {
            "type": "TextBlock",
            "text": "ticketId: ${if(ticketId, ticketId, 'N/A')}",
            "wrap": true
          },
          {
            "type": "Input.Text",
            "value": "${if(title, title, 'N/A')}",
            "id": "title",
            "wrap": true,
            "maxLength": 500
          },
          {
            "type": "Input.Text",
            "value": "${if(description, description, 'N/A')}",
            "id": "description",
            "wrap": true,
            "maxLength": 500,
            "isMultiline": true
          },
          {
            "type": "Input.Number",
            "label": "Severity",
            "value": "${if(severity, severity, 'N/A')}",
            "id": "severity",
            "wrap": true
          },
          {
            "type": "Input.Date",
            "label": "Due Date - Overdue ⏰",
            "id": "dueDate",
            "value": "${if(dueDate, dueDate, 'N/A')}",
            "wrap": true
          },
          {
            "type": "Input.Number",
            "placeholder": "Placeholder text",
            "id": "completionPercentage",
            "label": "Completion Percentage",
            "max": 100,
            "min": 0,
            "value": "${if(completionPercentage, completionPercentage, 'N/A')}",
            "isVisible": true,
            "wrap": true
          }
        ]
      }
    ],
    "actions": [
      {
        "type": "Action.Execute",
        "verb": "updateTickets",
        "isVisible": true,
        "id": "ticketUpdate",
        "title": "Update Ticket",
        "data": {
          "ticketId": "${if(ticketId, ticketId, 'N/A')}"
        }
      }
    ]
  }
},
{
  "name": "updateTickets",
  "description": "Update a ticket field for a given ticketId",
  "capabilities": {
    "response_semantics": {
      "data_path": "$",
      "properties": {
        "title": "$.title",
        "subtitle": "$.description"
      },
      "static_template": {
        "type": "AdaptiveCard",
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "version": "1.5",
        "body": [
          {
            "type": "Container",
            "$data": "${$root}",
            "items": [
              {
                "type": "TextBlock",
                "text": "ticketId: ${if(updatedTicket.ticketId, updatedTicket.ticketId, 'N/A')}",
                "wrap": true
              },
              {
                "type": "Input.Text",
                "value": "${if(updatedTicket.title, updatedTicket.title, 'N/A')}",
                "id": "title",
                "wrap": true,
                "maxLength": 500
              },
              {
                "type": "Input.Text",
                "value": "${if(updatedTicket.description, updatedTicket.description, 'N/A')}",
                "id": "description",
                "wrap": true,
                "maxLength": 500,
                "isMultiline": true
              }
            ]
          }
        ],
        "actions": [
          {
            "type": "Action.Execute",
            "verb": "updateTickets",
            "isVisible": true,
            "id": "ticketUpdate",
            "title": "Update Ticket",
            "data": {
              "ticketId": "${if(updatedTicket.ticketId, updatedTicket.ticketId, 'N/A')}"
            }
          }
        ]
      }
    }
  }
}

Exemplos de pedidos e respostas

Os seguintes exemplos de pedido e resposta mostram o que acontece quando um utilizador executa uma ação que faz com que a Action.Execute função seja executada no cliente.

Solicitação

{
  "clientInfo": {
    "clientPlatform": "chat-web",
    "clientAppName": "Office",
    "clientEntrypoint": "chat-officeweb",
    "clientSessionId": "d8bc8369-277e-c48c-2faf-3c894945abe0"
  },
  "message": {
    "text": "Card action execute",
    "messageType": "ExecuteActionRequest",
    "actionId": "jiraclouddev_searchForIssuesUsingJql(jql=\"assignee=currentUser() AND type=Task AND created >= -30d\", startAt=0, maxResults=10)",
    "author": "user",
    "executeActionData": {
      "gptId": "gpt_ud",
      "gptActionId": "plugin_1",
      "titleId": "U_e80ce190-4f5a-ee50-ce95-dcbabd8cd2ec",
      "verb": "updateTickets",
      "data": {
        "ticketId": 1,
        "title": "Bug Fix",
        "description": "Fix login issues",
        "severity": "3",
        "dueDate": "2025-06-20",
        "completionPercentage": "97"
      }
    }
  }
}

Resposta

{
  "text": "Mohit custom text",
  "executeActionData": "{\"type\":\"AdaptiveCard\",\"$schema\":\"http://adaptivecards.io/schemas/adaptive-card.json\",\"version\":\"1.5\",\"body\":[{\"type\":\"Container\",\"style\":\"good\",\"items\":[{\"type\":\"TextBlock\",\"text\":\"✅ Ticket updated successfully\",\"color\":\"default\",\"weight\":\"bolder\",\"wrap\":true},{\"type\":\"TextBlock\",\"text\":\"1\",\"wrap\":true},{\"type\":\"TextBlock\",\"text\":\"Bug Fix\",\"wrap\":true},{\"type\":\"TextBlock\",\"text\":\"Fix login issues\",\"wrap\":true},{\"type\":\"TextBlock\",\"text\":\"3\",\"wrap\":true},{\"type\":\"TextBlock\",\"text\":\"2025-06-20\",\"wrap\":true},{\"type\":\"TextBlock\",\"text\":\"97\",\"wrap\":true}]}]}",
  "messageType": "ExecuteActionResponse",
  "author": "bot",
  "createdAt": "2025-04-30T11:07:44.9557335+00:00",
  "timestamp": "2025-04-30T11:07:44.9557335+00:00",
  "messageId": "649112bc-7fe2-40bd-990d-928364fb173c",
  "requestId": "3058aa09-c9b6-3425-b0ef-49ef2ad4b9a5",
  "offense": "Unknown",
  "spokenText": "Ticket updated successfully",
  "turnCount": 1
}