Directrices de depuración

SE APLICA A: SDK v4

Los bots son aplicaciones complejas con una gran cantidad de elementos diferentes que funcionan conjuntamente. Como cualquier otra aplicación compleja, esto puede provocar algunos errores interesantes o que el bot se comporte de forma diferente a la esperada.

A veces, depurar un bot puede ser una tarea difícil. Cada desarrollador tiene su propia manera preferida de realizar esa tarea. Las instrucciones siguientes son sugerencias que se aplican a una gran mayoría de bots.

Después de comprobar que el bot funciona, el siguiente paso es conectarlo a un canal. Para ello, puede implementar el bot en un servidor de ensayo y crear su propio cliente de línea directa para que el bot se conecte. Para más información, consulte Conexión de un bot a un Direct Line.

La creación de su propio cliente le permite definir el funcionamiento interno del canal, así como probar específicamente cómo responde el bot a determinados intercambios de actividad. Una vez conectado al cliente, ejecute las pruebas para configurar el estado del bot y comprobar sus características. Si el bot usa una característica como la voz, el uso de estos canales puede ofrecer una manera de comprobar esa funcionalidad.

Nota

Al implementar un bot en Azure, el canal Chat en web se aprovisiona de forma predeterminada.

El uso de la Bot Framework Emulator y la Chat en web a través de Azure Portal aquí puede proporcionar más información sobre cómo funciona el bot al interactuar con diferentes canales.

La depuración del bot funciona de forma similar a otras aplicaciones multiproceso, con la capacidad de establecer puntos de interrupción o de usar características como la ventana inmediata.

Los bots siguen un paradigma de programación controlado por eventos, que puede ser difícil de racionalizar si no está familiarizado con él. La idea de que el bot sea sin estado, multiproceso y que se encargue de las llamadas asincrónicas o de espera puede provocar errores inesperados. Aunque la depuración del bot funciona de forma similar a otras aplicaciones multiproceso, incluiremos algunas sugerencias, herramientas y recursos que le ayudarán.

Descripción de las actividades del bot con el emulador

El bot se ocupa de diferentes tipos de actividades, además de la actividad normal de mensajes. La información sobre esas actividades le ayudará a codificar el bot de forma eficaz y le permitirá comprobar si las actividades que el bot envía y recibe son las esperadas. El uso del emulador le mostrará cuáles son esas actividades, cuándo suceden y qué información contienen. Para obtener más información, vea Depurar con el emulador.

Guardado y recuperación de las interacciones del usuario con transcripciones

El almacenamiento de transcripciones de blobs de Azure proporciona un recurso especializado en el que puede almacenar y recuperar transcripciones que contengan interacciones entre los usuarios y el bot.

Además, cuando las interacciones de entrada del usuario se han almacenado, puede usar el "explorador de almacenamiento" de Azure para ver manualmente los datos contenidos en las transcripciones almacenadas dentro del almacén de transcripciones de blobs. En el ejemplo siguiente se abre "explorador de almacenamiento" desde la configuración de "mynewtestblobstorage". Para abrir una entrada de usuario guardada, seleccione: Blob Container > ChannelId > TranscriptId ConversationId >

Examine_stored_transcript_text

Abre la entrada de conversación de usuario almacenada en formato JSON. La entrada del usuario se conserva junto con la clave "text:". Para obtener más información sobre cómo crear y usar un archivo de transcripción del bot, consulte Depuración del bot mediante archivos de transcripción.

Funcionamiento del software intermedio

El software intermedio puede no ser intuitivo al intentar usarlo por primera vez, especialmente con respecto a la continuación o al cortocircuito de la ejecución. El software intermedio puede ejecutarse en el borde inicial o final de un turno, con una llamada al delegado next() que dicte cuándo se pasa la ejecución a la lógica del bot.

Si usa varios elementos de middleware, el delegado puede pasar la ejecución a otro elemento de middleware si es así como se orienta la canalización. La información sobre la canalización del software intermedio del bot puede ayudar a entender esta idea.

Si no se llama al next() delegado, se conoce como enrutamiento de cortocircuito. Esto sucede cuando el software intermedio satisface la actividad actual y determina que no es necesario pasar la ejecución.

Comprender cuándo y por qué se produce el cortocircuito del software intermedio ayuda a indicar qué fragmento del software intermedio debe aparecer en primer lugar en la canalización. Además, la comprensión de lo que se puede esperar es especialmente importante para el software intermedio integrado que proporciona el SDK u otros desarrolladores. A algunos usuarios les resulta útil intentar crear su propio software intermedio primero para experimentar un poco antes de profundizar en el software intermedio integrado.

Para más información sobre cómo depurar un bot mediante middleware de inspección, consulte Depuración de un bot con middleware de inspección.

Información sobre el estado

El seguimiento del estado es una parte importante del bot, especialmente para las tareas complejas. En general, el procedimiento recomendado consiste en procesar actividades tan rápidamente como sea posible y permitir que el procesamiento se complete para que se conserve el estado. Las actividades se pueden enviar al bot casi al mismo tiempo, lo que puede provocar errores muy confusos debido a la arquitectura asincrónica.

Lo más importante es asegurarse de conservar el estado de forma que coincida con sus expectativas. En función de dónde se encuentre el estado conservado, los emuladores de almacenamiento de Cosmos DB y Azure Table Storage pueden ayudarle a comprobar dicho estado antes de usar el almacenamiento de producción.

Importante

La clase almacenamiento de Cosmos DB está en desuso. Los contenedores creados originalmente con CosmosDbStorage no tenían ningún conjunto de claves de partición y se les dio la clave de partición predeterminada de _/partitionKey.

Los contenedores creados con el almacenamiento de Cosmos DB se pueden usar con el almacenamiento con particiones de Cosmos DB. Para más información, consulte Creación de particiones en Azure Cosmos DB.

Tenga en cuenta también que, a diferencia del almacenamiento heredado de Cosmos DB, el almacenamiento con particiones de Cosmos DB no crea automáticamente una base de datos en la cuenta de Cosmos DB. Debe crear manualmente una nueva base de datos, pero omitir manualmente la creación de un contenedor, ya que CosmosDbPartitionedStorage creará el contenedor automáticamente.

Uso de los controladores de actividad

Los controladores de actividad pueden introducir otro nivel de complejidad, específicamente que cada actividad se ejecute en un subproceso independiente (o roles de trabajo, dependiendo del lenguaje). En función de lo que hagan los controladores, esto puede causar problemas en los que el estado actual no es lo que espera.

El estado integrado se escribe al final de un turno, sin embargo, las actividades generadas por dicho turno se ejecutan independientemente de la canalización del turno. Con frecuencia esto no nos afecta, pero si un controlador de actividad cambia de estado, es necesario que el estado escrito contenga ese cambio. En ese caso, la canalización del turno puede esperar a que la actividad finalice el procesamiento antes de completarse para garantizar que registra el estado correcto del turno.

El método send activity y sus controladores plantean un problema único. Un simple llamada a send activity desde el controlador on send activities provoca una bifurcación infinita de subprocesos. Puede solucionar ese problema de diferentes formas, como anexando el mensaje adicional a la información saliente o escribiendo en otra ubicación, como la consola o un archivo, para evitar el bloqueo del bot.

Depuración de un bot de producción

Cuando el bot está en producción, puede depurar el bot desde cualquier canal mediante ngrok. La conexión directa del bot a varios canales es una característica clave disponible en Bot Framework. Para obtener más información, consulte Depuración de un bot desde cualquier canal mediante ngrok y Depuración de una aptitud o consumidor de aptitudes.

Pasos siguientes

Recursos adicionales