Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A Direct Line API atua como uma interface de comunicação para aplicações cliente interagirem com agentes conversacionais criados com o Copilot Studio. A Direct Line API facilita a transmissão de mensagens entre a aplicação cliente e o agente por meio de fluxos WebSocket ou pedidos HTTP. Para testes de desempenho, o Direct Line permite às ferramentas de teste de carga replicar o comportamento real do utilizador, gerar carga e medir os tempos de resposta.
Comunicação com o Direct Line através de WebSockets
Pode implementar agentes conversacionais criados com o Copilot Studio em aplicações Web, seja como iframe incorporados ou ao utilizar uma tela personalizada. Ambas as opções de implementação utilizam comunicação WebSocket com o Direct Line. Se implementar o seu agente conversacional numa aplicação utilizando um destes métodos, o seu script de teste de desempenho deverá utilizar comunicação WebSocket para gerar carga que se assemelhe ao comportamento real dos utilizadores e medir o desempenho com um elevado grau de confiança.
As aplicações cliente que utilizam Direct Line e comunicação WebSocket devem seguir este fluxo:
- Para iniciar uma conversação, a aplicação cliente deve primeiro obter um token de conversação. Se o seu agente estiver configurado com um Segredo do Direct Line, obtenha um token chamando o ponto final regional Direct Line. Tokens para agentes que não usam segredos podem ser obtidos a partir do ponto final do token.
- A aplicação cliente inicia uma conversação ao utilizar o token e recebe um ID da Conversação e um URL de fluxo WebSocket.
- As mensagens do utilizador são enviadas através de um pedido HTTP POST com o ID da Conversação.
- As mensagens do agente conversacional são recebidas através do fluxo WebSocket.
Comunicar com Direct Line utilizando HTTP GET
Se a sua ferramenta de testes de carga não puder utilizar comunicação WebSocket, ou se a sua aplicação destinada a clientes não utilizar comunicação WebSocket, pode receber atividades ao enviar HTTP GET em alternativa. Conforme mostrado no diagrama seguinte, o fluxo de início da conversação não muda.
Medir tempos de resposta
Para avaliar como a carga afeta a experiência do utilizador, certifique-se de que os seus scripts de teste de desempenho monitorizam e reportam o tempo de resposta para os seguintes passos:
| Passo | Impacto na experiência de utilizador |
|---|---|
| Gerar Token | O tempo que demora a iniciar uma nova conversação |
| Iniciar Conversação | O tempo que demora a iniciar uma nova conversação |
| Enviar Atividade | O tempo que demora a enviar uma nova mensagem do utilizador (não inclui a resposta do agente) |
| Receber Atividades/Obter Atividades | O tempo que o agente demora a responder |
Monitorizar os tempos de resposta para Gerar Token, Iniciar Conversação e Enviar Atividade é simples para as ferramentas de teste de carga, pois estes passos utilizam pedidos HTTP padrão. No entanto, medir o tempo que um agente demora a responder às mensagens do utilizador é mais complexo, devido às seguintes razões:
O envio e a receção de atividades pelo Direct Line segue um padrão assíncrono. Quando uma mensagem do utilizador é enviada utilizando um pedido Enviar Atividade, a resposta não é uma mensagem do agente. Em vez disso, limita-se a confirmar que a mensagem do utilizador foi publicada com sucesso.
Com base na sua conceção, um agente conversacional pode enviar um número variável de mensagens em resposta a uma mensagem do utilizador. Portanto, na maioria dos casos, deve medir o tempo que um agente demora a responder como o tempo decorrido entre uma mensagem do utilizador e a última mensagem do agente. No exemplo seguinte, uma única mensagem do utilizador aciona três mensagens do agente, com chamadas à API a serem executadas entre as mesmas. Cada mensagem demora cerca de dois segundos a ser entregue; no entanto, na perspetiva do utilizador, o agente demora seis segundos a responder ao pedido do utilizador.
Identificar a última resposta do agente
Para medir o tempo que um agente demora a concluir as suas respostas, o seu script de teste de desempenho deve:
- Identificar a última mensagem do agente que sucede a uma mensagem do utilizador
- Calcular a diferença de tempo entre as duas
O protocolo subjacente utilizado pelo Copilot Studio não considera o conceito de "última resposta", uma vez que tanto agentes como utilizadores podem enviar mensagens em qualquer momento. Assim, o seu script de teste de desempenho deve pressupor que, se o agente não enviar uma mensagem dentro de um determinado intervalo de tempo, não serão enviadas mais mensagens até que a próxima mensagem do utilizador seja enviada. A implementação desta lógica varia dependendo de como o seu script comunica com o Direct Line.
Utilizar WebSockets
Ao comunicar com o Direct Line através de WebSockets, assuma que o agente não envia mais mensagens quando já não é possível ler mais frames do WebSocket. Isto pode ser indicado por um tempo limite ao tentar ler o frame seguinte, embora o comportamento exato dependa da sua implementação. Para uma implementação de referência que utilize WebSockets, considere utilizar HTTP GET.
Utilizar HTTP GET
Os scripts de teste de desempenho que utilizam HTTP GET em vez de WebSockets devem consultar o ponto final Atividades para obter o conjunto completo de mensagens do utilizador e do agente. Ao fazer uma consulta, certifique-se de que fornece tempo suficiente para o agente responder. Por exemplo, se o seu agente precisar de chamar uma API de back-end para responder a uma consulta do utilizador, e a API demorar até cinco segundos a responder, o seu script não deve consultar o ponto final Atividades até terem decorrido cinco segundos.
O seguinte payload simplificado representa a resposta que recebe do ponto final Atividades:
[
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000012",
"timestamp": "2025-01-07T09:12:22.0329242Z",
"from": {
"id": "a688eb7d-092a-42a8-8ef5-73123b9c2aaa",
"name": ""
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "I also want to set up a new account",
},
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000017",
"timestamp": "2025-01-07T09:12:24.5478686Z",
"from": {
"id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
"name": "Load Testing",
"role": "bot"
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "Sure, please bear with me as I set up your new account",
"replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012",
},
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000018",
"timestamp": "2025-01-07T09:12:33.1960413Z",
"from": {
"id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
"name": "Load Testing",
"role": "bot"
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "Almost done! Thank you for your patience",
"replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012",
},
{
"type": "message",
"id": "98SryQaHr2rGthOGpChPK2-us|0000019",
"timestamp": "2025-01-07T09:12:41.9166159Z",
"from": {
"id": "4b56bfa5-5574-5bb3-7aa3-99b8798b9d90",
"name": "Load Testing",
"role": "bot"
},
"conversation": {
"id": "98SryQaHr2rGthOGpChPK2-us"
},
"text": "All done! Your new account is now active.",
"inputHint": "acceptingInput",
"replyToId": "98SryQaHr2rGthOGpChPK2-us|0000012"
}
]
Ao analisar o payload e calcular os tempos de resposta, considere as seguintes orientações:
- As mensagens do agente têm a propriedade
role: bot, enquanto as mensagens do utilizador não têm a propriedaderole. - As mensagens do agente enviadas em resposta às mensagens do utilizador têm a propriedade
replyToId, cujo valor corresponde à propriedadeidda mensagem do utilizador. - Pode calcular os tempos de resposta do agente como a diferença de tempo entre a mensagem do utilizador e a última mensagem do agente que responde à mensagem do utilizador.