Directrices de depuración
SE APLICA A: SDK v4
Los bots son aplicaciones complejas, con muchas partes que funcionan juntas. 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 la mayoría de los 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 almacenamiento provisional y crear su propio cliente de línea directa para que el bot se conecte. Para obtener más información, consulte Conexión de un bot a una línea directa.
La creación de su propio cliente le permite definir los trabajos internos del canal y probar 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 de Chat en web se aprovisiona de forma predeterminada.
El uso de Bot Framework Emulator y 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á qué son esas actividades, cuándo se producen y qué información contienen. Para obtener más información, vea Depuración 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 storage" desde la configuración de "mynewtestblobstorage". Para abrir una entrada de usuario guardada, seleccione: Blob Container > ChannelId TranscriptId > ConversationId >
Abre la entrada de conversación de usuario almacenada en formato JSON. La entrada del usuario se conserva junto con la clave "text:". Para más información sobre cómo crear y usar un archivo de transcripción de bots, 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 y es cómo se orienta la canalización, el delegado puede pasar la ejecución a otro elemento de middleware. 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é, los cortocircuitos de middleware pueden ayudar a indicar qué parte del middleware debe venir primero en la canalización. Además, comprender qué esperar es importante para el middleware integrado proporcionado por 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 y pueden introducir errores 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 pueden utilizarse con el almacenamiento particionado 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 dentro de 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). Dependiendo de lo que hacen 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 túneles de desarrollo. La conexión sin problemas 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 devtunnel y Depuración de una aptitud o consumidor de aptitudes.
Pasos siguientes
Recursos adicionales
- Depurar en Visual Studio
- Depurar, trazar y generar perfiles para Bot Framework
- Usar ConditionalAttribute para métodos que no quiere incluir en el código de producción
- Usar herramientas como Fiddler para ver el tráfico de red
- Solución de problemas generales y otros artículos de solución de problemas en esa sección.