Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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:
- Adicione o modelo Cartão Ajustável ao manifesto do plug-in da API.
- Inclua o
Action.Executeesquema na definição cartão ajustável.
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
}