Handoff copilot
Observação
- A entrega do Copilot só está disponível na pré-visualização do programador público.
- A entrega do Copilot só é suportada numa conversa individual com o bot.
As handoffs do Copilot são ligações avançadas fornecidas por plug-in que transportam o contexto de chat, permitindo que os utilizadores transitem facilmente o seu chat com Microsoft 365 Copilot para o seu serviço de bot. Pode melhorar o plug-in da extensão de mensagens copilot para entregar uma conversação ao agente do motor personalizado para lidar com cenários em que são necessários conhecimentos ou ações especializados, tais como consultas de suporte de TI complexas, consultas detalhadas sobre produtos ou gestão de encomendas interativa.
No gráfico seguinte, um utilizador procura ajuda sobre problemas tecnológicos ao utilizar Microsoft 365 Copilot e recebe resultados do conjunto de dados empresarial. O utilizador considera as informações disponíveis insuficientes e quer continuar a interação com um plug-in de bot da Contoso. Quando o utilizador seleciona o bot da Contoso, é iniciada uma nova conversação e a conversa continua no bot da Contoso. Esta mudança totalmente integrada de Microsoft 365 Copilot para o bot da Contoso sem perder o contexto de conversação chama-se handoff copilot.
Como funciona a entrega de copilot
Um agente do motor personalizado envia uma ligação avançada com um token de continuação para Microsoft 365 Copilot. O parâmetro de consulta de ligação avançada com um token de continuação garante que todas as informações dos parâmetros de invocação do plug-in são referenciadas. Quando o utilizador seleciona a ligação avançada, Microsoft 365 Copilot envia uma chamada de invocação para o bot com o token de continuação e, em seguida, o bot retoma a conversação com base no contexto. Este processo permite uma transição totalmente integrada de Microsoft 365 Copilot para o agente do motor personalizado, mantendo a continuidade e o contexto da conversação, o que otimiza a experiência do utilizador.
Tem de criar um URL de ligação avançada com um continuation
parâmetro de consulta para o botão de ação e atribuir um token de continuação ao parâmetro para facilitar o processo de entrega. Quando o utilizador seleciona o botão de ação, o Microsoft Teams lê o token de continuação a partir do URL e inicia uma chamada de invocação para o bot. O bot ou plug-in utiliza o token de continuação para criar uma resposta, que é depois apresentada ao utilizador na janela de chat do plug-in.
Ativar a entrega do copilot
Para ativar a entrega de copilot no Teams, siga estes passos:
Configurar um URL de ligação avançada: crie uma ligação avançada para um chat e adicione o
28:<botId>
econtinuationToken
ao formato de ligação avançada. O formato de ligação avançada tem de serhttps://teams.microsoft.com/l/chat/0/0?users=28:${botId}&continuation=${continuationToken}
.Exemplo:
{ "type": "Action.OpenUrl", "title": "Handoff to Bot", "url": "https://teams.microsoft.com/l/chat/0/0?users=28:${botId}&continuation=${continuationToken}" }
A
Action.OpenUrl
propriedade permite ao utilizador entregar a conversação a um bot. Quando um utilizador seleciona o botão de ação, a ligação avançada é ativada e abre uma nova janela de chat com o bot. O bot recebe uma chamada de invocação com um payload, que contém o token de continuação do URL e utiliza o token para manter o contexto da conversação.Payload de exemplo
{ "name": "handoff/action", "type": "invoke", "timestamp": "2024-04-15T19:50:32.945Z", "localTimestamp": "2024-04-15T19:50:32.945Z", "id": "f:00000000-0000-0000-0000-000000000000", "channelId": "msteams", "serviceUrl": "https://smba.trafficmanager.net/amer/", "from": { "id": "29:1jzORtjcfpYTLQDR9O4TyLz9LDwHskubQN1Ljc-aFO4L8dnZatjFpSw1PCGa-Mm-Jo4uLp67Lvekcjq2hkPoxdA", "aadObjectId": "00000000-0000-0000-0000-000000000000" }, "conversation": { "conversationType": "personal", "tenantId": "00000000-0000-0000-0000-000000000000", "id": "a:13tOiSzRqeub3zaqoTHKpvOkk8Y1zFxk-g8WKdAUM2tjhTBFMt4RSuL8YWi7uwFNBmbxsyzYYktJEyfimYXYiEoplQ34aJs1y8trDb7EIcG09xOjSUieHVzFZ2b8tkagZ" }, "recipient": { "id": "28:00000000-0000-0000-0000-000000000000", "name": "NorthwindProducts" }, "entities": [ { "locale": "en-US", "country": "US", "platform": "Android", "timezone": "America/Chicago", "type": "clientInfo" } ], "channelData": { "tenant": { "id": "00000000-0000-0000-0000-000000000000" }, "source": { "name": "message" }, "legacy": { "replyToId": "1:1_qLAAGcfze29QAWxzicc7gvR3vuNAlKvth08vavxYYs" } }, "replyToId": "1713210583687", "value": { "continuation": "test-continuation-token" }, "locale": "en-US", "localTimezone": "America/Chicago", "rawTimestamp": "2024-04-15T19:50:32.945Z", "rawLocalTimestamp": "2024-04-15T14:50:32.945-05:00", "callerId": "urn:botframework:azure" }
O
handoff/action
tipo de invocação permite ao bot transferir o controlo da conversação para outro serviço ou iniciar uma ação específica que requer processamento adicional. Quando o bot recebe ahandoff/action
atividade de invocação, utiliza o token de continuação para procurar as informações necessárias para continuar a conversa de forma totalmente integrada. Isto envolve obter o histórico de conversações, as preferências do utilizador ou qualquer outro contexto necessário para proporcionar uma experiência consistente.Processe o tipo de invocação: no código do bot, faça a gestão da
handoff/action
invocação com oonInvokeActivity
processador. Tem de substituir oonInvokeActivity
método para processar a chamada de invocação. Se a chamada de invocação for efetuada com êxito, o bot terá de devolver um código http status de 200. Se existir um erro, o bot tem de responder com um código http status adequado no intervalo de 400 ou 500-. Se o utilizador receber um erro, terá de aguardar e tentar novamente enquanto os erros são registados no serviço de back-end.Observação
Não envie qualquer payload com esta resposta, uma vez que não é composta na janela de chat. As respostas baseadas no token de continuação têm de ser enviadas ao utilizador separadamente.
Eis um exemplo de como processar a chamada de invocação no
searchApp.ts
ficheiro:case "handoff/action": { // TODO: Save the continuation token and use it to process final response to user later return {status: 200}; // return just the http status }
Quando o bot recebe a chamada de invocação,
context.activity.value.continuation
contém ocontinuationToken
que foi definido no URL da ligação avançada. Se a aplicação não estiver instalada durante a entrega, o utilizador será redirecionado para a Loja Teams para instalar a aplicação.
Práticas recomendadas
O bot tem de notificar os utilizadores quando forem direcionados para o chat do bot depois de selecionar o botão de ação, uma vez que não existe nenhuma indicação visual. Isto ajuda a gerir as expectativas, uma vez que pode haver um atraso antes de o bot devolver uma resposta devido à latência da rede e ao tempo de processamento. Por exemplo, o bot pode enviar uma série de atividades para manter o utilizador informado sobre o progresso:
await context.sendActivities([ { type: ActivityTypes.Message, text: "Continuing conversation from copilot...", }, { type: ActivityTypes.Typing }, { type: "delay", value: 1000 }, { type: ActivityTypes.Message, text: `Fetching more details using the continuation token passed: ${continuationToken}`, }, { type: ActivityTypes.Typing }, { type: "delay", value: 4000 }, { type: ActivityTypes.Message, text: `Handoff successful!`, } ]);
Recomendamos que faça a gestão do ciclo de vida do token de continuação para garantir que expira após um período razoável e processe cenários em que o utilizador reproduz o pedido de token de continuação. Por exemplo, se for apresentado o mesmo token, informe o utilizador de que precisa de iniciar uma nova conversa com o bot porque a entrega do copilot não pode continuar.
Exemplos de código
Nome do exemplo | Descrição | Node.js |
---|---|---|
Extensão de mensagem de inventário da Northwind | Este exemplo é uma extensão de mensagem do Teams que funciona como um plug-in para Microsoft 365 Copilot. Inclui o handoff do copilot e permite que os utilizadores transitem o seu chat de Microsoft 365 Copilot para a Base de Dados Northwind. | Exibir |