Primeros pasos con Azure Bot service y Teams



Objetivo
Esta prueba de concepto trata de comprobar la viabilidad de usar Microsoft Teams como interfaz de entrada a un sistema inteligente, empleando un bot básico desarrollado con Azure Bot Framework. Este bot consume la API de Gemini para traducir mensajes de manera automática, validando así la integración con un servicio externo a Azure y confirmando la viabilidad de utilizar Teams como canal de interacción.
Se trata de comprobar la facilidad de implementación, las opciones de escalabilidad y la adecuación de Teams como plataforma de comunicación conectada a servicios inteligentes externos (propios o de terceros) generando un primer bot del que partir en futuras ideas o necesidades.
Qué hemos desarrollado
Hemos desarrollado un bot básico, implementado como un servicio de Azure Bot Framework, que recibe el mensaje del usuario a través de Teams y lo reenvía a la API de Gemini para su traducción. Para gestionar la comunicación con la API de Google Gemini, se utiliza LangChain como framework de desarrollo. Como tecnologías hemos empleado Azure Bot Framework (para desarrollar el bot), Python (como lenguaje principal de desarrollo), LangChain (como framework de desarrollo e integración con la API) y la API de Gemini (en nuestro caso de uso para realizar la traducción). Microsoft Teams actúa como la interfaz de usuario, posibilitando la interacción con el bot de forma ágil y sencilla.
De esta forma, trataremos de validar la operatividad de Teams como interfaz de entrada y la flexibilidad para conectarse a servicios inteligentes.
Cómo probar el bot
El bot desarrollado se encuentra versionado y documentado en Gihub: https://github.com/gyrusds/teams-basic-translator
Hay dos opciones para probar el bot, de manera local con un emulador o ya alojado en Azure. El primer paso en cualquiera de los dos casos es clonar el repositorio a nuestro ordenador.
Entorno local
Requisitos previos
- Python 3.9 o superior
- Poetry
- Disponer de una Gemini API Key
- Tener instalado Bot Framework Emulator
Configuración
El bot cuenta con unas variables de entorno que permiten configurarlo. Están todas definidas en el fichero README.md
del repositorio:
MicrosoftAppId: "The Microsoft App ID for the bot."
MicrosoftAppPassword: "The Microsoft App Password for the bot."
GOOGLE_API_KEY: "The API key for Google services."
TENANT: "The tenant name (use "common" for multi-tenant configuration)."
HOST: "The host address for the bot (use localhost for local environments and 0.0.0.0 for cloud environments)."
Para configurar el bot, creamos en la raíz del proyecto un fichero .env
con el siguiente contenido:
GOOGLE_API_KEY = "YOURGOOGLEAPIKEY"
TENANT = "common"
HOST = "localhost"
Instalación y ejecución
Para instalar y probar el bot, ejecuta los siguientes comandos:
poetry install
poetry run python bot/app.py
Después de unos momentos el bot habrá arrancado indicando donde está escuchando
Pruebas con Bot Framework Emulator
Arrancamos el Bot Framework Emulator y creamos una nueva configuración de bot:
Introducimos el nombre y el endpoint [http://0.0.0.0:8181/api/messages] y pulsamos en Save and Connect y guardamos la configuración.
Ya está el bot listo para su testeo en local.
Preparación en Azure
Prerrequisitos de Azure
- Resource-group ya creado. Para nuestro ejemplo usaremos demo-poc-bot
- Permisos suficientes para desplegar la infraestructura en el resource-group
- Azure CLI
- Para gestionar la autenticación de todos los elementos de Azure, se necesita previamente registrar la aplicación en Azure Entra ID y obtener un APP_ID y un APP_SECRET.
Importante: Para que la comunicación con el bot pueda realizarse en ambas direcciones, el bot necesita autenticarse vía OAuth con Azure. Hay que configurar una URL de callback a la que redireccionar a través de la autenticación, por ello hay que introducir la Redirect URI de la captura anterior [https://europe.token.botframework.com/.auth/web/redirect]. Para saber más consulta aquí.
Una vez registrada la aplicación, se pueden crear las credenciales a través del link de la captura:
CUIDADO: el valor del secreto es el APP_SECRET que necesitaremos más adelante, junto con el Application (client) ID de la anterior captura. El secreto se mostrará en la pantalla una sola vez, por lo que es muy importante guardarlo en un lugar seguro para no perderlo, por ejemplo, en Azure Key Vault.
Creación y despliegue de la infraestructura
Para probar el bot se necesita crear la siguiente infraestructura en Azure:
- Un App Service Plan que aloje la aplicación web.
- Un servicio Web App en el app service plan anterior para servir la API del bot (BotApp).
- Un servicio de Azure Bot para crear las integraciones.
Todos estos elementos se despliegan haciendo uso de plantillas ARM (Azure Resource Manager) que ya se encuentran preconfiguradas en el repositorio de código. Una de ellas crea el App Service Plan y la Web App (template-BotApp-with-rg.json
) y la otra plantilla crea el bot (template-AzureBot-with-rg.json
).
El orden de creación de la infraestructura es importante y ha de ser el siguiente:
-
Crear el App Service Plan y la Web APP
Para crear estos elementos el primer paso es terminar de configurar los parámetros de la plantilla. Para ello, hay que abrir el fichero infra/parameters-for-template-BotApp-with-rg.json. Se deben configurar, al menos, los valores indicados como:<YOUR_APP_SERVICE_NAME>
<YOUR_NEW_APP_SERVICE_PLAN_NAME>
<YOUR_APP_ID>
<YOUR_APP_SECRET>
Para más información del resto de parámetros, se debe consultar el fichero
README.md
, están todos documentados. Esta sería nuestra configuración de ejemplo:{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "appServiceName": { "value": "demo-poc-bot" }, "existingAppServicePlanName": { "value": "" }, "existingAppServicePlanLocation": { "value": "" }, "newAppServicePlanName": { "value": "demo-poc-bot-plan" }, "newAppServicePlanLocation": { "value": "Spain Central" }, "newAppServicePlanSku": { "value": { "name": "B1", "tier": "Basic", "size": "F1", "family": "F", "capacity": 1 } }, "appType": { "value": "MultiTenant" }, "appId": { "value": "--NUESTRO APP ID--" }, "appSecret": { "value": "--NUESTRO SECRET--" }, "tenantId": { "value": "common" }, "UMSIName": { "value": "" }, "UMSIResourceGroupName": { "value": "" } } }
Después, ejecutar en el terminal, directamente en la raíz del repositorio de código:
az login az deployment group create --resource-group demo-poc-bot --template-file infra/template-BotApp-with-rg.json --parameters infra/parameters-for-template-BotApp-with-rg.json
Si todo ha ido correctamente, el comando devuelve un json con el resumen del despliegue.
-
Crear el Azure Bot
Como en el paso anterior, comenzamos por configurar los parámetros del template. En este caso el fichero a modificar esinfra/parameters-for-template-BotApp-with-rg.json
y los valores mínimos a configurar son los marcados como:<YOUR_NEW_AZURE_BOT_NAME>
<BOT_ENDPOINT>
- Este valor corresponde al endpoint de la API que vamos a desplegar en el servicio creado en el paso anterior. Por tanto, siempre corresponderá a “https://<YOUR_APP_SERVICE_NAME>
.azurewebsites.net/api/messages”.<YOUR_APP_ID>
Esta sería nuestra configuración de ejemplo:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "azureBotId": { "value": "demo-poc-bot" }, "azureBotSku": { "value": "S1" }, "azureBotRegion": { "value": "westeurope" }, "botEndpoint": { "value": "https://demo-poc-bot.azurewebsites.net/api/messages" }, "appType": { "value": "MultiTenant" }, "appId": { "value": "--NUESTRO APP ID--" }, "UMSIName": { "value": "" }, "UMSIResourceGroupName": { "value": "" }, "tenantId": { "value": "common" } } }
Después, ejecutar en el terminal, directamente en la raíz del repositorio de código:
az login az deployment group create --resource-group demo-poc-bot --template-file infra/template-AzureBot-with-rg.json --parameters infra/parameters-for-template-AzureBot-with-rg.json
Si todo ha ido correctamente, al igual que en el paso anterior, el comando devuelve un json con el resumen de la operación.
Una vez lanzados los dos despliegues de infraestructura, podemos comprobar en la propia consola de Azure, qué tal ha ido la creación de todos los elementos. Debemos tener algo como la siguiente captura en nuestro resource-group:
-
Despliegue del bot
Para desplegar el bot, lo haremos también a través de la CLI. Debemos empaquetar el bot en un zip, sin rutas intermedias y que contenga el ficherorequirements.txt
en su raíz para que el entorno sepa dónde encontrarlo durante el despliegue. Para ello ejecutamos:cd bot/ zip -r deploy.zip . az webapp deploy --src-path deploy.zip --resource-group <your-resource-group> --name <your-webapp-name> --type zip
En nuestro ejemplo, el comando de despliegue quedaría así:
az webapp deploy --src-path deploy.zip --resource-group demo-poc-bot --name demo-poc-bot
Por último, sólo quedaría dar de alta la variable de entorno con la clave de conexión a Google Gemini en el servicio WebApp para que la API de nuestro bot pueda conectar:
En el apartado Settings/Environment Variables podemos pulsar en Add y añadirla:
Es importante no olvidar aplicar los cambios después de añadir la nueva clave:
Una vez se reinicie la aplicación, la nueva variable de entorno estará ya disponible y podremos probar el bot.
-
Probar el bot
Para comprobar el funcionamiento del bot, sólo nos quedará ir a nuestro servicio Azure Bot y probar con el chat embebido:
Cómo validar en Teams
Prerrequisitos de Teams
- Disponer de un tenant de desarrollo en Teams con la opción de desplegar bots habilitada. Para más información, consultar el siguiente enlace: Prepare your Microsoft 365 tenant
Configuración del Canal y pruebas
Para probar directamente con Teams hay que habilitar el canal a través de Settings/Channels y seleccionando Microsoft Teams:
Aparecerá una pantalla de aceptación de términos y condiciones del servicio, hay que aceptarlas para poder continuar:
Seleccionamos en la pestaña Messaging la opción Microsoft Teams Commercial y pulsamos Apply:
Una vez hecho esto, volviendo a la pestaña Channels nos habrá aparecido el nuevo canal ya registrado y disponible para probar directamente en Teams:
Pulsar en la opción “Open in Teams” nos permite abrir una nueva conversación con el bot en Teams directamente, versión Web o escritorio:
Próximos pasos
La prueba realizada ha sido muy básica, pero a futuro se podrían tener en cuenta las siguientes evoluciones y mejoras:
- Conexión a más canales Además de Teams, el bot podría desplegarse en otros canales como Slack, Facebook Messenger, sitios web corporativos o aplicaciones móviles. La lógica principal del bot se puede mantener sin apenas cambios, gracias a la arquitectura modular y a la compatibilidad nativa de Azure Bot Service con múltiples canales.
- Ampliar la lógica del bot
La traducción es un caso de uso inicial. Podríamos enriquecer el bot con funcionalidades más avanzadas:
- Análisis de sentimiento (para determinar la carga emocional del mensaje).
- Extracción de entidades (por ejemplo, nombres de productos, ubicaciones, fechas).
- Automatización de flujos (redirección a un equipo de soporte, apertura de tickets, envío de correos, etc.).
- Optimización de la experiencia de usuario Se pueden introducir mensajes de bienvenida personalizados, menús interactivos y reconocimiento automático del idioma. Esto haría que la interacción con el bot sea más natural. No era el objetivo de este artículo indagar más en las posibilidades de personalización del bot, pero Azure bot Framework permite usar más elementos que mejoran la interacción con el usuario según el propósito del bot. Existen, por ejemplo, tarjetas personalizables para mostrar información al usuario con un mínimo de diseño.
- Orquestación de servicios adicionales Dado que LangChain facilita la integración con múltiples modelos y APIs, se pueden orquestar servicios de procesamiento de lenguaje natural más complejos, motores de preguntas y respuestas, etc.
- Seguridad y autenticación adicionales Si el bot escala a escenarios más críticos (soporte, consultas de datos sensibles, etc.), conviene reforzar la seguridad mediante el uso de Azure AD, tokens de corta duración y control de acceso detallado, de modo que solo usuarios con privilegios adecuados puedan acceder a determinadas funciones.
- Integración con Language Understanding (LUIS) Language Understanding using LUIS permite crear modelos de comprensión de lenguaje natural para clasificar la intención del usuario y extraer entidades clave. Al integrar LUIS, el bot podría inferir con mayor precisión la intención de cada mensaje, habilitando diálogos más contextuales y reduciendo la necesidad de comandos explícitos.
Conclusiones
Usar Teams como interfaz de entrada a sistemas inteligentes, según el caso de uso, abre las puertas a un modelo de comunicación directo y natural. Usando las mismas herramientas de comunicación que ya se usan a diario permite que la comunicación, la consulta y el análisis puedan ser fluidos e integrados en los procesos de trabajo.
Además, la arquitectura desarrollada gracias a Azure Bot Framework y LangChain, posibilita la conexión con múltiples servicios de terceros y garantiza la escalabilidad. Aunque la traducción ha servido como ejemplo inicial, este enfoque sienta las bases para implementar funcionalidades más complejas (desde análisis de sentimiento hasta automatización de flujos corporativos) sin reescribir el proyecto desde cero. Este tipo de desarrollo modular y flexible se ajusta a entornos corporativos y proyectos en evolución, ya que facilita la incorporación de nuevas características con un mantenimiento razonable en entornos altamente innovadores y cambiantes.
Recursos de referencia
- Publicación del bot en Teams
- Azure Resource Manager
- OAuth en el Bot
- Language Understanding using LUIS
- Prepare your Microsoft 365 tenant
- Azure Bot pricing
- Web service pricing
- Add authentication to a bot
- Use Azure CLI to create an App Service resource
- Use Azure CLI to create or update an Azure Bot resource