Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
L’API Direct Line agit comme une interface de communication permettant aux applications clientes d’interagir avec des assistants conversationnels créés avec Copilot Studio. L’API Direct Line facilite la transmission des messages entre l’application cliente et l’assistant via des flux WebSocket ou des requêtes HTTP. Pour les tests de performance, Direct Line permet aux outils de test de charge de reproduire le comportement réel de l’utilisateur, de générer de la charge et de mesurer les temps de réponse.
Communiquez avec Direct Line à l’aide de WebSockets
Vous pouvez déployer des assistants conversationnels créés avec Copilot Studio dans des applications Web soit sous forme d’iFrames intégrés, soit en utilisant un canevas personnalisé. Les deux options de déploiement utilisent la communication WebSocket avec Direct Line. Si vous déployez votre assistant conversationnel dans une application en utilisant l’une de ces méthodes, votre script de test de performance doit utiliser la communication WebSocket pour générer une charge similaire au comportement réel des utilisateurs et mesurer les performances avec un haut degré de confiance.
Les applications clientes qui utilisent Direct Line et la communication WebSocket doivent suivre ce processus :
- Pour initier une conversation, une application cliente doit d’abord obtenir un jeton de conversation. Si votre assistant est configuré avec un secret Direct Line, obtenez un jeton en appelant le point de terminaison Direct Line régional. Les jetons pour les assistants n’utilisant pas de clés secrètes peuvent être obtenus à partir du point de terminaison du jeton.
- L’application cliente lance une conversation en utilisant le jeton, et reçoit un identifiant de conversation ainsi qu’une URL de flux WebSocket.
- Les messages utilisateur sont envoyés en effectuant une requête HTTP POST avec l’identifiant de conversation.
- Les messages de l’assistant conversationnel sont reçus via le flux WebSocket.
Communiquer avec Direct Line en utilisant HTTP GET
Si votre outil de test de charge ne peut pas utiliser la communication WebSocket, ou si votre application côté client n’utilise pas la communication WebSocket, vous pouvez recevoir des activités en envoyant une requête HTTP GET à la place. Comme indiqué dans le schéma suivant, le flux d’initiation de conversation ne change pas.
Mesurer les temps de réponse
Pour évaluer l’impact de la charge sur l’expérience utilisateur, assurez-vous que vos scripts de test de performance suivent et rapportent le temps de réponse pour les étapes suivantes :
| Étape | Impact sur l’expérience utilisateur |
|---|---|
| Générer un jeton | Le temps nécessaire pour initier une nouvelle conversation |
| Démarrer une conversation | Le temps nécessaire pour initier une nouvelle conversation |
| Activité d’envoi | Le temps nécessaire pour envoyer un nouveau message utilisateur (n’inclut pas la réponse de l’assistant) |
| Recevoir des activités / récupérer des activités | Le temps nécessaire à un assistant pour répondre |
Le suivi des temps de réponse pour la génération de jeton, le démarrage de conversation et l’envoi d’activité est simple pour les outils de test de charge, car ces étapes utilisent des requêtes HTTP standard. Cependant, mesurer le temps nécessaire à un assistant pour répondre aux messages de l’utilisateur est plus complexe, pour les raisons suivantes :
L’envoi et la réception d’activités via Direct Line suivent un mode asynchrone. Lorsqu’un message utilisateur est envoyé via une requête Send Activity, la réponse n’est pas un message de l’assistant. En réalité, la réponse confirme simplement que le message utilisateur a été publié avec succès.
D’après sa conception, un assistant conversationnel peut renvoyer n’importe quel nombre de messages en réponse à un message utilisateur. Par conséquent, dans la plupart des cas, vous devriez mesurer le temps nécessaire à un assistant pour répondre comme le temps qui s’écoule entre un message utilisateur et le dernier message d’assistant. Dans l’exemple suivant, un seul message utilisateur déclenche trois messages de l’assistant, entrecoupés d’appels API. Chaque message met environ deux secondes à revenir ; cependant, du point de vue de l’utilisateur, il faut six secondes à l’assistant pour répondre à sa demande.
Identifier la dernière réponse de l’assistant
Pour mesurer le temps qu’un assistant met à compléter ses réponses, votre script de test de performance doit :
- Identifier le dernier message de l’assistant qui suit un message de l’utilisateur
- Calculer l’écart entre deux dates
Le protocole sous-jacent utilisé par Copilot Studio n’a pas de concept de « dernière réponse », car les assistants et les utilisateurs peuvent envoyer des messages à tout moment. Par conséquent, votre script de test de performance doit supposer que si l’assistant n’envoie pas de message dans un délai donné, aucun autre message n’est envoyé avant l’envoi du message utilisateur suivant. L’implémentation de cette logique varie selon la façon dont votre script communique avec Direct Line.
Utiliser WebSockets
Lors de la communication avec Direct Line via WebSockets, il faut supposer que l’assistant n’envoie plus aucun message lorsque plus aucune trame ne peut être lue depuis le WebSocket. Vous pouvez voir cela indiqué par un timeout lors d’une tentative de lecture de la trame suivante, bien que le comportement exact dépende de votre implémentation. Pour une implémentation de référence utilisant WebSockets, envisagez d’utiliser HTTP GET.
Utiliser HTTP GET
Les scripts de test de performance utilisant HTTP GET au lieu de WebSockets devraient interroger le point de terminaison Activités pour obtenir l’ensemble complet des messages utilisateur et agent. Lors du sondage, veillez à laisser suffisamment de temps à votre assistant pour répondre. Par exemple, si votre assistant doit appeler une API backend pour répondre à une requête utilisateur, et que l’API prend jusqu’à cinq secondes pour répondre, votre script ne devrait pas interroger le point de terminaison Activities avant que cinq secondes se soient écoulées.
La charge utile simplifiée suivante représente la réponse provenant du point de terminaison Activités :
[
{
"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"
}
]
Lorsque vous analysez le payload et calculez les temps de réponse, suivez les directives suivantes :
- Les messages de l’assistant ont la propriété
role: bot, tandis que les messages de l’utilisateur n’ont aucune propriétérole. - Les messages de l’assistant envoyés en réponse aux messages de l’utilisateur possèdent la propriété
replyToId, dont la valeur est celle de la propriétéiddu message utilisateur. - Vous pouvez calculer les temps de réponse de l’assistant en mesurant l’écart entre le message utilisateur et le dernier message de l’assistant qui répond à ce message.