Canal Microsoft Teams de OpenClaw
Conecta OpenClaw a Microsoft Teams utilizando el Bot Framework a través de un recurso Azure Bot. Esta integración basada en plugins permite que tu asistente de IA opere en Teams, gestionando mensajes directos personales, chats grupales y conversaciones de canales. OpenClaw recibe eventos webhook del Bot Framework en /api/messages y responde a través de la API de mensajería de Teams, soportando respuestas en hilos, Adaptive Cards, reacciones, compartición de archivos vía SharePoint y anulaciones de configuración por equipo/canal.
Microsoft Teams Funciones compatibles
Mensajes de texto
Compatible
Medios y archivos
Compatible
Reacciones
Compatible
Hilos
Compatible
Mensajes de voz
No compatible
Chat grupal
Compatible
Microsoft Teams Requisitos previos
- Una cuenta de Azure con permisos para crear un recurso Azure Bot
- Un Azure Bot registrado con App ID, App Password (secreto de cliente) y Tenant ID (se recomienda single-tenant)
- Un manifiesto de aplicación de Teams (manifest.json) con configuración del bot, alcances e iconos (outline.png 32x32, color.png 192x192)
- OpenClaw Gateway ejecutándose y accesible a través de una URL HTTPS pública o túnel (puerto de webhook por defecto 3978)
- El plugin de Teams instalado: openclaw plugins install @openclaw/msteams
Microsoft Teams Configuración rápida
Crear un recurso Azure Bot
Ve al Portal de Azure → Crear un recurso → Busca 'Azure Bot'. Crea con tipo Single Tenant. En el registro de la aplicación, genera un secreto de cliente. Copia el App ID, el secreto de cliente y el Tenant ID — necesitarás los tres para la configuración de OpenClaw.
Instalar el plugin de Teams y configurar
Ejecuta 'openclaw plugins install @openclaw/msteams' para instalar el plugin. Agrega la configuración del canal de Teams a tu openclaw.json con appId, appPassword y tenantId. También puedes usar las variables de entorno MSTEAMS_APP_ID, MSTEAMS_APP_PASSWORD y MSTEAMS_TENANT_ID.
Configurar el endpoint de mensajería y habilitar el canal de Teams
En el Portal de Azure, navega a tu recurso Bot → Configuration. Establece el endpoint de mensajería en 'https://<tu-dominio>/api/messages'. Luego ve a Channels → Add Microsoft Teams → Configure. Para desarrollo local, usa un túnel (ngrok o Tailscale Funnel) para exponer el puerto 3978.
Crear e instalar la aplicación de Teams
Crea un manifest.json con el App ID de tu bot como botId, alcances (personal, team, groupChat) y permisos RSC. Comprímelo junto con outline.png y color.png. Súbelo a través del Portal de desarrolladores de Teams o el Centro de administración de Teams. Para pruebas, carga lateralmente el paquete de la aplicación.
Probar el bot
Encuentra tu bot en Teams y envíale un mensaje directo. Si usas la política de emparejamiento por defecto, aprueba al remitente con 'openclaw pairing approve msteams <code>' en tu terminal. El bot debería responder con respuestas generadas por IA.
Microsoft Teams Ejemplo de configuración
{
"channels": {
"msteams": {
"enabled": true,
"appId": "YOUR_APP_ID",
"appPassword": "YOUR_APP_PASSWORD",
"tenantId": "YOUR_TENANT_ID",
"webhook": {
"port": 3978,
"path": "/api/messages"
}
}
}
}Microsoft Teams Documentación Detallada
Descripción general de la arquitectura
Configuración de Azure Bot y registro de aplicación
{
"channels": {
"msteams": {
"appId": "<APP_ID>",
"appPassword": "<APP_PASSWORD>",
"tenantId": "<TENANT_ID>"
}
}
}Manifiesto de la aplicación de Teams y permisos RSC
Políticas de DM
{
"channels": {
"msteams": {
"dmPolicy": "allowlist",
"allowFrom": [
"user@org.com",
"40a1a0ed-4ff2-4164-a219-55518990c197"
]
}
}
}Gestión de chats grupales y canales
{
"channels": {
"msteams": {
"groupPolicy": "allowlist",
"groupAllowFrom": ["user@org.com"],
"teams": {
"My Team": {
"channels": {
"General": {
"requireMention": true
}
}
}
}
}
}
}Estilos de respuesta e hilos
{
"channels": {
"msteams": {
"replyStyle": "thread",
"teams": {
"19:abc...@thread.tacv2": {
"channels": {
"19:xyz...@thread.tacv2": {
"replyStyle": "top-level"
}
}
}
}
}
}
}Manejo de archivos y SharePoint
{
"channels": {
"msteams": {
"sharePointSiteId": "YOUR_SHAREPOINT_SITE_ID",
"mediaAllowHosts": ["*.microsoft.com", "*.sharepoint.com"],
"mediaAuthAllowHosts": ["graph.microsoft.com"]
}
}
}Adaptive Cards y encuestas
Extracción de IDs de Teams
Microsoft Teams Referencia de Configuración
| Key | Type | Default | Description |
|---|---|---|---|
| enabled | boolean | true | Habilitar o deshabilitar el canal de Microsoft Teams |
| appId | string | "" | ID de la aplicación Azure Bot (Microsoft App ID). También se puede usar la variable de entorno MSTEAMS_APP_ID |
| appPassword | string | "" | Secreto de cliente de Azure Bot. También se puede usar la variable de entorno MSTEAMS_APP_PASSWORD |
| tenantId | string | "" | ID del tenant de Azure AD para autenticación single-tenant. También se puede usar la variable de entorno MSTEAMS_TENANT_ID |
| webhook.port | number | 3978 | Puerto para el listener de webhook que recibe eventos del Bot Framework |
| webhook.path | string | "/api/messages" | Ruta del endpoint de webhook para mensajes entrantes del Bot Framework |
| dmPolicy | string | "pairing" | Controla quién puede enviar DMs al bot. Opciones: pairing, allowlist, open, disabled |
| allowFrom | string[] | [] | IDs de objeto AAD, UPNs o nombres para mostrar autorizados para enviar DMs al bot (cuando dmPolicy es allowlist) |
| groupPolicy | string | "allowlist" | Control de acceso de grupos/canales. Opciones: allowlist, open, disabled |
| groupAllowFrom | string[] | [] | Remitentes permitidos en chats grupales. Recurre a allowFrom si no se establece |
| teams | object | {} | Anulaciones de configuración por equipo y por canal (replyStyle, requireMention, tools) |
| requireMention | boolean | true | Requerir @mención en canales y chats grupales. Establecer en false con permisos RSC para responder a todos los mensajes |
| replyStyle | string | "thread" | Estilo de diseño de respuesta. Opciones: thread (Posts clásico), top-level (Threads tipo Slack) |
| configWrites | boolean | true | Permitir que los comandos /config set|unset modifiquen la configuración del canal en tiempo de ejecución |
| textChunkLimit | number | — | Máximo de caracteres por mensaje saliente antes de fragmentar |
| chunkMode | string | "length" | Estrategia de fragmentación de texto. Opciones: length (división estricta), newline (consciente de párrafos) |
| sharePointSiteId | string | "" | ID del sitio de SharePoint para subidas de archivos en chats grupales/canales |
| mediaAllowHosts | string[] | MS/Teams domains | Hosts permitidos para descargar archivos adjuntos multimedia |
| mediaAuthAllowHosts | string[] | Graph + Bot Framework | Hosts que reciben encabezados de Authorization al descargar multimedia |
| dmHistoryLimit | number | 50 | Número de mensajes DM recientes incluidos como contexto de IA por conversación |
| historyLimit | number | 50 | Máximo de mensajes de canal/grupo incluidos como contexto de IA |
Habilitar o deshabilitar el canal de Microsoft Teams
ID de la aplicación Azure Bot (Microsoft App ID). También se puede usar la variable de entorno MSTEAMS_APP_ID
Secreto de cliente de Azure Bot. También se puede usar la variable de entorno MSTEAMS_APP_PASSWORD
ID del tenant de Azure AD para autenticación single-tenant. También se puede usar la variable de entorno MSTEAMS_TENANT_ID
Puerto para el listener de webhook que recibe eventos del Bot Framework
Ruta del endpoint de webhook para mensajes entrantes del Bot Framework
Controla quién puede enviar DMs al bot. Opciones: pairing, allowlist, open, disabled
IDs de objeto AAD, UPNs o nombres para mostrar autorizados para enviar DMs al bot (cuando dmPolicy es allowlist)
Control de acceso de grupos/canales. Opciones: allowlist, open, disabled
Remitentes permitidos en chats grupales. Recurre a allowFrom si no se establece
Anulaciones de configuración por equipo y por canal (replyStyle, requireMention, tools)
Requerir @mención en canales y chats grupales. Establecer en false con permisos RSC para responder a todos los mensajes
Estilo de diseño de respuesta. Opciones: thread (Posts clásico), top-level (Threads tipo Slack)
Permitir que los comandos /config set|unset modifiquen la configuración del canal en tiempo de ejecución
Máximo de caracteres por mensaje saliente antes de fragmentar
Estrategia de fragmentación de texto. Opciones: length (división estricta), newline (consciente de párrafos)
ID del sitio de SharePoint para subidas de archivos en chats grupales/canales
Hosts permitidos para descargar archivos adjuntos multimedia
Hosts que reciben encabezados de Authorization al descargar multimedia
Número de mensajes DM recientes incluidos como contexto de IA por conversación
Máximo de mensajes de canal/grupo incluidos como contexto de IA
Microsoft Teams Preguntas Frecuentes
Microsoft Teams Solución de Problemas
Los permisos de Graph API no se han otorgado o falta el consentimiento del administrador. El bot recibe un stub de contenido en lugar del archivo real.
El bot requiere @mención por defecto en canales y chats grupales, o los permisos RSC no están configurados.
Teams almacena en caché los metadatos de la aplicación de forma agresiva. El manifiesto antiguo sigue en uso.
El appId, appPassword o tenantId en la configuración de OpenClaw no coincide con el registro de Azure Bot, o se está probando manualmente sin tokens JWT de Azure adecuados.
Microsoft Teams históricamente tenía soporte limitado para bots en canales privados. Desde principios de 2026, Microsoft está implementando soporte completo de aplicaciones para canales privados, pero puede que aún no esté disponible en todos los inquilinos.