web-dev-qa-db-fra.com

Comment éviter «Désolé, mon code bot a un problème» dans Microsoft Bot Framework

J'ai un bot qui fonctionne sur Azure + Bot Framework + LUIS (via LuisDialog).

Si l'utilisateur envoie deux messages en une succession rapide (avant que le bot n'ait la chance de répondre), il voit ce message d'erreur sur son Facebook Messenger ou son intégration Web:

Désolé, mon code bot a un problème.

Lors du débogage via l'émulateur de canal bot, je vois que l'erreur est la suivante:

"text": "Erreur: le code d'état de réponse n'indique pas la réussite: 429 (Too Many Requests). à System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Task task) à System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Task) Microsoft.Bot.Builder.Luis.LuisService.d__4.MoveNext ()

La fin de la trace de pile montre que l'erreur provient de cette ligne dans mon MessageController.cs:

await Conversation.SendAsync(activity, () => new LuisRootDialogEnglish());

C'est bizarre car j'utilise une version payante de LUIS qui permet jusqu'à 10 appels par seconde.

Dans tous les cas, j'ai essayé d'encapsuler tout le code de MessageController.cs dans un try/catch block, et renvoyant cette valeur indépendamment d'une exception:

return Request.CreateResponse(HttpStatusCode.OK);

Pourtant, les utilisateurs voient le message d'erreur "Désolé, mon code bot a un problème", ce qui signifie qu'il existe une exception non gérée.

Comment empêcher l'affichage de ce message aux utilisateurs ou intercepter l'exception?

20
K48

Le message est envoyé à l'utilisateur dans PostUnhandledExceptionToUserTask uniquement parce que l'exception a échappé à la boîte de dialogue racine A. Vous pouvez éviter cette situation en empêchant les exceptions non gérées d'échapper à la boîte de dialogue racine A.

Une option consiste à ajouter une boîte de dialogue racine différente B qui appelle simplement votre boîte de dialogue A, puis ignore simplement le IAwaitable<R> résultat transmis au ResumeAfter<R> rappeler.

Chain.DefaultIfException fournit une implémentation de la boîte de dialogue B.

13
Will Portnoy

Vous pouvez utiliser la fonctionnalité DefaultIfException pour Bot Framework pour gérer en interne l'exception.

Cela ressemble à ceci:

await Conversation.SendAsync(
   activity, () => new Dialogs.RootDialog().DefaultIfException()
);
2
sakshi agrawal

Lorsque vous obtenez un 403 ou 429, il peut s'agir respectivement de "hors quota" ou de "trop ​​de demandes", dans le premier cas, vous devez recréer une clé et vous affecter à votre application LUIS, les premières 1000 requêtes de point de terminaison sont gratuites et il sera actualisé tous les mois, vous devez l'utiliser à bon escient ou vous devez utiliser un niveau Payant.

Pour le deuxième cas, vous avez également une limite pour la demande, voir Documentation des limites

Ici vous pouvez trouver Microsoft documentation à ce sujet.

0
renzo.barrios1407