tutorial microsoft louis framework chatbots bot c# botframework luis

c# - louis - microsoft bot framework tutorial



Cómo evitar "Lo siento, el código de mi bot tiene un problema" en Microsoft Bot Framework (3)

Cuando obtiene un 403 o un 429, podría estar "fuera de cuota" o "Demasiada solicitud" respectivamente, en el primer caso debe crear una clave nuevamente y asignarla a su aplicación LUIS, las primeras 1000 consultas de puntos finales son gratuitas y se actualizará cada mes, debe usarlo sabiamente o debe usar un nivel de pago.

Para el segundo caso, también tiene un límite para la solicitud, consulte la documentación de Límites.

Aquí puedes encontrar documentation Microsoft sobre esto.

Tengo un bot que se ejecuta en Azure + Bot Framework + LUIS (a través de LuisDialog).

Si sucede que el usuario envía dos mensajes en una sucesión rápida (antes de que el bot tenga la oportunidad de responder), verá este mensaje de error en su Facebook Messenger o en la inserción web:

Lo siento, mi código bot está teniendo un problema.

Al depurar a través del emulador de canal bot, veo que el error es el siguiente:

"texto": "Error: El código de estado de la respuesta no indica el éxito: 429 (Demasiadas solicitudes). En System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Tarea) en System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerotzol.com Microsoft.Bot.Builder.Luis.LuisService.d__4.MoveNext ()

El final del seguimiento de la pila muestra que el error se originó en esta línea en mi MessageController.cs:

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

Esto es raro porque estoy usando una versión de pago de LUIS que permite hasta 10 llamadas por segundo.

En cualquier caso, intenté envolver todo el código en MessageController.cs en un bloque try/catch y devolver este valor independientemente de una excepción:

return Request.CreateResponse(HttpStatusCode.OK);

Aún así, los usuarios ven el mensaje de error "Lo siento, el código de mi bot está teniendo un problema", lo que básicamente significa que hay una excepción no controlada.

¿Cómo puedo evitar que este mensaje se muestre a los usuarios o detectar la excepción?


El mensaje se envía al usuario en PostUnhandledExceptionToUserTask solo porque la excepción se ha escapado del cuadro de diálogo raíz A. Puede evitar esta situación evitando que las excepciones no controladas escapen del cuadro de diálogo raíz A.

Una opción es agregar un cuadro de diálogo raíz diferente B que simplemente llame a su cuadro de diálogo A y luego simplemente ignore el resultado de IAwaitable<R> que se pasa a la devolución de llamada ResumeAfter<R> .

Chain.DefaultIfException proporciona una implementación del cuadro de diálogo B.


Puede usar la funcionalidad DefaultIfException para Bot Framework para manejar internamente la excepción.

Se parece a esto:

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