OpenClaw

Canal Microsoft Teams de OpenClaw

Empresarial
Medio

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.

Info rápida
DificultadMedio
CategoríaEmpresarial
Funciones compatibles5 / 6

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

1

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.

2

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.

3

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.

4

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.

5

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

config.json
{
  "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

OpenClaw se integra con Microsoft Teams a través del Azure Bot Framework — una arquitectura basada en webhooks donde Teams enruta los mensajes al endpoint /api/messages de tu Gateway, y OpenClaw responde a través de la API REST del Bot Framework. El flujo es: El usuario envía un mensaje en Teams → Bot Framework Service → webhook POST a tu Gateway (puerto 3978) → OpenClaw procesa con IA → respuesta vía API del Bot Framework → Teams entrega la respuesta. El plugin de Teams se instala por separado mediante 'openclaw plugins install @openclaw/msteams'. Este enfoque modular mantiene el Gateway principal ligero mientras permite que las funcionalidades específicas de Teams (Adaptive Cards, subidas de archivos a SharePoint, permisos RSC) se mantengan de forma independiente. La autenticación usa Azure AD: el Bot Framework valida tokens JWT en las solicitudes webhook entrantes, y OpenClaw autentica las llamadas API salientes usando tu App ID y App Password. Se recomienda la configuración single-tenant por seguridad, restringiendo el bot al directorio Azure AD de tu organización.
Tu Gateway debe ser accesible a través de una URL HTTPS pública. Para desarrollo local, usa ngrok o Tailscale Funnel para crear un túnel al puerto 3978.
Los bots single-tenant son recomendados sobre los multi-tenant para seguridad organizacional — solo aceptan tokens de tu directorio Azure AD.

Configuración de Azure Bot y registro de aplicación

Configurar el bot de Teams requiere crear recursos en el Portal de Azure: 1. Crea un recurso Azure Bot — Busca 'Azure Bot' en el marketplace. Selecciona Single Tenant como tipo de bot. Esto crea tanto el recurso Bot como un registro de aplicación. 2. Genera un secreto de cliente — En App Registrations → tu aplicación bot → Certificates & secrets, crea un nuevo secreto de cliente. Copia el valor inmediatamente (solo se muestra una vez). 3. Anota las credenciales — App (client) ID de la página Overview, el valor del secreto de cliente y Directory (tenant) ID. Estos tres valores son las credenciales de autenticación de tu bot. 4. Establece el endpoint de mensajería — En el recurso Bot → Configuration, establece el endpoint en 'https://<tu-dominio>/api/messages'. Aquí es donde Teams envía los eventos webhook. 5. Habilita el canal de Teams — Ve a Channels → Add channel → Microsoft Teams. Configura y guarda. Se pueden usar variables de entorno en lugar de valores en el archivo de configuración: MSTEAMS_APP_ID, MSTEAMS_APP_PASSWORD, MSTEAMS_TENANT_ID.
openclaw.json
{
  "channels": {
    "msteams": {
      "appId": "<APP_ID>",
      "appPassword": "<APP_PASSWORD>",
      "tenantId": "<TENANT_ID>"
    }
  }
}
Mantén tu App Password seguro. Nunca lo incluyas en el control de versiones. Usa variables de entorno (MSTEAMS_APP_PASSWORD) para despliegues en producción. Rota el secreto de cliente periódicamente en el Portal de Azure.

Manifiesto de la aplicación de Teams y permisos RSC

El manifiesto de la aplicación de Teams (manifest.json) define la identidad, los alcances y los permisos de tu bot. Se empaqueta con dos iconos en un archivo .zip para su instalación. Elementos esenciales del manifiesto: • botId — El App ID de tu Azure Bot • Scopes — personal (DMs), team (canales), groupChat (conversaciones grupales) • supportsFiles: true — Habilitar tarjetas de consentimiento de archivos en chat personal • Permisos de Resource-Specific Consent (RSC) — Permitir que el bot reciba mensajes sin @mención Permisos RSC para canales (alcance team): • ChannelMessage.Read.Group — Recibir mensajes del canal sin @mención • ChannelMessage.Send.Group — Enviar mensajes a canales • TeamMember.Read.Group, TeamSettings.Read.Group — Leer metadatos del equipo Permisos RSC para chats grupales: • ChatMessage.Read.Chat — Recibir mensajes de chat grupal sin @mención Iconos requeridos: • outline.png — 32x32 píxeles, fondo transparente • color.png — 192x192 píxeles, icono de aplicación a todo color Comprime manifest.json + ambos iconos juntos, luego súbelo a través del Portal de desarrolladores de Teams, el Centro de administración de Teams, o carga lateralmente para pruebas.
Al actualizar una aplicación instalada (p. ej., agregar permisos RSC), incrementa el campo version en manifest.json, vuelve a comprimir, vuelve a subir y reinstala en cada equipo.
Después de instalar o actualizar la aplicación, cierra completamente y reinicia el cliente de Teams para asegurar que los nuevos permisos surtan efecto.

Políticas de DM

Las políticas de DM (Mensaje Directo) controlan quién puede interactuar con tu bot en chat personal. OpenClaw soporta cuatro políticas: • pairing (por defecto) — Los nuevos usuarios que envían mensajes al bot reciben un código de emparejamiento aleatorio. Aprueba mediante 'openclaw pairing approve msteams <code>' en tu terminal. Una vez aprobados, pueden chatear libremente. • allowlist — Solo los usuarios listados en allowFrom pueden enviar mensajes al bot. Soporta IDs de objeto AAD, UPNs (usuario@org.com) o nombres para mostrar. • open — Cualquier usuario de Teams en tu tenant puede enviar mensajes al bot. Requiere agregar '*' a allowFrom como confirmación de seguridad. • disabled — La funcionalidad de DM se desactiva completamente. Teams identifica a los usuarios por IDs de objeto AAD (Azure AD), UPNs o nombres para mostrar. Puedes encontrar estos en los registros del Gateway cuando los usuarios envían mensajes, o buscarlos en el Portal de Azure en Azure Active Directory → Users.
openclaw.json
{
  "channels": {
    "msteams": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "user@org.com",
        "40a1a0ed-4ff2-4164-a219-55518990c197"
      ]
    }
  }
}
El formato UPN (usuario@org.com) suele ser el más conveniente para listas de permitidos. Los IDs de objeto AAD son más estables si los usuarios pueden cambiar sus direcciones de correo electrónico.
Usa 'openclaw pairing list msteams' para ver todas las solicitudes de emparejamiento pendientes y sus códigos.

Gestión de chats grupales y canales

OpenClaw soporta tanto canales de Teams (dentro de un equipo) como chats grupales, cada uno con control de acceso configurable: • disabled (por defecto para grupos) — Ignorar todos los mensajes de grupo/canal • allowlist — Solo los remitentes aprobados (a través de groupAllowFrom) pueden activar el bot • open — Responder a mensajes de todos los miembros del grupo o participantes del canal Por defecto, el bot requiere una @mención en canales y chats grupales (requireMention: true). Establece requireMention en false para que el bot responda a todos los mensajes, o configura permisos RSC para recibir mensajes sin ser mencionado. Los canales de Teams y los chats grupales mantienen contextos de conversación separados. Cada conversación tiene su propia sesión e historial, aislados de los DMs y otras conversaciones. Las anulaciones por equipo y por canal permiten un control detallado. Puedes establecer diferentes replyStyle, requireMention y configuraciones de herramientas para cada equipo o incluso canales individuales dentro de un equipo.
openclaw.json
{
  "channels": {
    "msteams": {
      "groupPolicy": "allowlist",
      "groupAllowFrom": ["user@org.com"],
      "teams": {
        "My Team": {
          "channels": {
            "General": {
              "requireMention": true
            }
          }
        }
      }
    }
  }
}
Usa nombres de equipo y canal o IDs de conversación (19:...@thread.tacv2) como claves en la configuración de teams.
Las anulaciones por canal heredan de la configuración del equipo padre, que a su vez hereda de la configuración global de msteams.

Estilos de respuesta e hilos

Teams ofrece dos diseños de interfaz distintos para canales, y el comportamiento de respuesta de OpenClaw debe coincidir: • Posts (diseño clásico) — Usa respuestas en hilo bajo los mensajes raíz. Establece replyStyle en 'thread' (por defecto). La respuesta del bot aparece como una respuesta a la tarjeta del mensaje original. • Threads (diseño tipo Slack) — Usa flujo de mensajes lineal. Establece replyStyle en 'top-level'. El bot envía un nuevo mensaje de nivel superior en lugar de responder en hilo. La API de Teams no expone qué diseño usa un canal, por lo que debes configurar replyStyle para que coincida. Configuraciones incorrectas no causarán errores pero pueden resultar en un flujo de conversación subóptimo. El estilo de respuesta se puede configurar globalmente, por equipo o por canal. Esto te permite adaptar diferentes diseños en diferentes canales de la misma organización de Teams.
openclaw.json
{
  "channels": {
    "msteams": {
      "replyStyle": "thread",
      "teams": {
        "19:abc...@thread.tacv2": {
          "channels": {
            "19:xyz...@thread.tacv2": {
              "replyStyle": "top-level"
            }
          }
        }
      }
    }
  }
}

Manejo de archivos y SharePoint

OpenClaw soporta compartir archivos en Teams con diferente comportamiento según el tipo de chat: Chats personales: • Flujo integrado de FileConsentCard — no se necesita configuración adicional. El bot envía una tarjeta de consentimiento de archivo, el usuario aprueba y el archivo se sube. Chats grupales y canales: • Requiere permiso de Microsoft Graph: Sites.ReadWrite.All • Opcional: Chat.Read.All para enlaces de compartición por usuario (restringe el acceso solo a los miembros del chat) • Configura sharePointSiteId para especificar el sitio de SharePoint para subida de archivos • Los archivos se almacenan en la carpeta /OpenClawShared/ en la biblioteca de documentos de SharePoint Sin Chat.Read.All, los enlaces de archivos compartidos son de toda la organización. Con él, la compartición se restringe a los miembros del chat actual. Los archivos adjuntos entrantes se descargan y procesan automáticamente por el Gateway. Las configuraciones mediaAllowHosts y mediaAuthAllowHosts controlan qué dominios son de confianza para descargar archivos adjuntos.
openclaw.json
{
  "channels": {
    "msteams": {
      "sharePointSiteId": "YOUR_SHAREPOINT_SITE_ID",
      "mediaAllowHosts": ["*.microsoft.com", "*.sharepoint.com"],
      "mediaAuthAllowHosts": ["graph.microsoft.com"]
    }
  }
}
Los permisos de Graph API (Sites.ReadWrite.All, Chat.Read.All) requieren consentimiento del administrador en tu tenant de Azure AD. Trabaja con tu administrador de TI para otorgar estos permisos.

Adaptive Cards y encuestas

Microsoft Teams soporta Adaptive Cards — diseños ricos e interactivos basados en tarjetas que van más allá del texto simple. OpenClaw los aprovecha para interacciones mejoradas del bot: Encuestas: • Crea encuestas mediante 'openclaw message poll --channel msteams --target conversation:<id>' • Los votos se recopilan a través de acciones de Adaptive Cards y se almacenan localmente en ~/.openclaw/msteams-polls.json • El Gateway debe permanecer en línea para recopilar votos Adaptive Cards personalizadas: • Envía Adaptive Cards arbitrarias vía CLI: openclaw message send --channel msteams --target "conversation:<id>" --card '{...}' • Las tarjetas soportan el esquema de Adaptive Cards versión 1.5 • Pueden incluir bloques de texto, imágenes, botones de acción, campos de entrada y más Notas de formato: • Se soporta markdown básico (negrita, cursiva, código, enlaces) en mensajes regulares • Las tablas complejas y listas profundamente anidadas pueden no renderizarse correctamente • Para diseños ricos, usa Adaptive Cards en lugar de formato markdown
Usa el Adaptive Cards Designer (adaptivecards.io/designer) para construir y previsualizar diseños de tarjetas personalizados antes de enviarlos.
Las acciones de Adaptive Cards pueden disparar eventos postback que OpenClaw procesa como entrada del usuario.

Extracción de IDs de Teams

Las URLs de Teams contienen múltiples IDs, pero no todos son los que necesitas para la configuración. Así es como extraer los IDs correctos: Team ID — Se encuentra en la ruta de la URL (no en el parámetro de consulta groupId): https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/... → Decodifica la URL '19%3ABk4j...%40thread.tacv2' para obtener el ID del equipo Channel ID — También en la ruta de la URL: https://teams.microsoft.com/l/channel/19%3A15bc...%40thread.tacv2/... → Decodifica la URL para obtener el ID de conversación del canal Objetivos de usuario para comandos CLI: • Por AAD ID: user:40a1a0ed-4ff2-4164-a219-55518990c197 • Por nombre para mostrar: user:John Smith • Conversación: conversation:19:abc...@thread.tacv2 • Directo (si contiene @thread): 19:abc...@thread.tacv2
NO uses el parámetro de consulta 'groupId' de las URLs de Teams — es el ID de grupo de Microsoft 365, no el ID de conversación de Teams. Siempre extrae los IDs de la ruta de la URL y decodifícalos.

Microsoft Teams Referencia de Configuración

enabled
Type: booleanDefault: true

Habilitar o deshabilitar el canal de Microsoft Teams

appId
Type: stringDefault: ""

ID de la aplicación Azure Bot (Microsoft App ID). También se puede usar la variable de entorno MSTEAMS_APP_ID

appPassword
Type: stringDefault: ""

Secreto de cliente de Azure Bot. También se puede usar la variable de entorno MSTEAMS_APP_PASSWORD

tenantId
Type: stringDefault: ""

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
Type: numberDefault: 3978

Puerto para el listener de webhook que recibe eventos del Bot Framework

webhook.path
Type: stringDefault: "/api/messages"

Ruta del endpoint de webhook para mensajes entrantes del Bot Framework

dmPolicy
Type: stringDefault: "pairing"

Controla quién puede enviar DMs al bot. Opciones: pairing, allowlist, open, disabled

allowFrom
Type: string[]Default: []

IDs de objeto AAD, UPNs o nombres para mostrar autorizados para enviar DMs al bot (cuando dmPolicy es allowlist)

groupPolicy
Type: stringDefault: "allowlist"

Control de acceso de grupos/canales. Opciones: allowlist, open, disabled

groupAllowFrom
Type: string[]Default: []

Remitentes permitidos en chats grupales. Recurre a allowFrom si no se establece

teams
Type: objectDefault: {}

Anulaciones de configuración por equipo y por canal (replyStyle, requireMention, tools)

requireMention
Type: booleanDefault: true

Requerir @mención en canales y chats grupales. Establecer en false con permisos RSC para responder a todos los mensajes

replyStyle
Type: stringDefault: "thread"

Estilo de diseño de respuesta. Opciones: thread (Posts clásico), top-level (Threads tipo Slack)

configWrites
Type: booleanDefault: true

Permitir que los comandos /config set|unset modifiquen la configuración del canal en tiempo de ejecución

textChunkLimit
Type: numberDefault:

Máximo de caracteres por mensaje saliente antes de fragmentar

chunkMode
Type: stringDefault: "length"

Estrategia de fragmentación de texto. Opciones: length (división estricta), newline (consciente de párrafos)

sharePointSiteId
Type: stringDefault: ""

ID del sitio de SharePoint para subidas de archivos en chats grupales/canales

mediaAllowHosts
Type: string[]Default: MS/Teams domains

Hosts permitidos para descargar archivos adjuntos multimedia

mediaAuthAllowHosts
Type: string[]Default: Graph + Bot Framework

Hosts que reciben encabezados de Authorization al descargar multimedia

dmHistoryLimit
Type: numberDefault: 50

Número de mensajes DM recientes incluidos como contexto de IA por conversación

historyLimit
Type: numberDefault: 50

Máximo de mensajes de canal/grupo incluidos como contexto de IA

Microsoft Teams Preguntas Frecuentes

Microsoft Teams Solución de Problemas

Las imágenes y archivos adjuntos faltan en los mensajes del canal

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.

Asegúrate de que el registro de tu aplicación tenga los permisos de Graph ChannelMessage.Read.All y Chat.Read.All con consentimiento del administrador. Reinstala la aplicación de Teams después de actualizar los permisos. Cierra completamente y vuelve a abrir el cliente de Teams para actualizar los permisos en caché.
El bot no responde en canales (solo funciona en DMs)

El bot requiere @mención por defecto en canales y chats grupales, o los permisos RSC no están configurados.

Menciona al bot con @ en los mensajes del canal, o establece requireMention: false en tu configuración y agrega el permiso RSC ChannelMessage.Read.Group al manifiesto de tu aplicación. Reinstala la aplicación en cada equipo después de actualizar el manifiesto.
El manifiesto de la aplicación de Teams no se actualiza después de los cambios

Teams almacena en caché los metadatos de la aplicación de forma agresiva. El manifiesto antiguo sigue en uso.

Incrementa el campo version en manifest.json (p. ej., 1.0.0 → 1.1.0), vuelve a comprimir el paquete, elimina la aplicación antigua de Teams, reinstala el paquete actualizado y cierra completamente y reinicia el cliente de Teams.
Errores 401 Unauthorized en el endpoint del webhook

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.

Verifica que las tres credenciales coincidan exactamente con los valores del Portal de Azure. Prueba tu bot usando el Web Chat integrado de Azure (en el recurso Bot → Test in Web Chat) para confirmar que el bot funciona antes de solucionar problemas específicos de Teams. Asegúrate de que tu tenantId coincida con el directorio donde se registró el bot.
El bot no funciona en canales privados

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.

Verifica si tu inquilino ha recibido la actualización de soporte de aplicaciones para canales privados. Si aún no está disponible, usa canales estándar (públicos), chats grupales o DMs. Las aplicaciones deben agregarse explícitamente a cada canal privado — la instalación a nivel de equipo no se aplica automáticamente a los canales privados.