OpenClaw

Canal Microsoft Teams OpenClaw

Entreprise
Moyen

Connectez OpenClaw à Microsoft Teams en utilisant le Bot Framework via une ressource Azure Bot. Cette intégration basée sur un plugin permet à votre assistant IA de fonctionner dans Teams — en gérant les messages privés, les discussions de groupe et les conversations de canal. OpenClaw reçoit les événements webhook du Bot Framework sur /api/messages et répond via l'API de messagerie Teams, avec prise en charge des réponses en fil de discussion, des Adaptive Cards, des réactions, du partage de fichiers via SharePoint et des configurations personnalisées par équipe/canal.

Info rapide
DifficultéMoyen
CatégorieEntreprise
Fonctionnalités prises en charge5 / 6

Microsoft Teams Fonctionnalités prises en charge

Messages texte

Pris en charge

Médias et fichiers

Pris en charge

Réactions

Pris en charge

Fils de discussion

Pris en charge

Messages vocaux

Non pris en charge

Discussion de groupe

Pris en charge

Microsoft Teams Prérequis

  • Un compte Azure avec les permissions nécessaires pour créer une ressource Azure Bot
  • Un Azure Bot enregistré avec un App ID, un App Password (secret client) et un Tenant ID (single-tenant recommandé)
  • Un manifeste d'application Teams (manifest.json) avec la configuration du bot, les portées et les icônes (outline.png 32×32, color.png 192×192)
  • La passerelle OpenClaw en cours d'exécution et accessible via une URL HTTPS publique ou un tunnel (port webhook par défaut 3978)
  • Le plugin Teams installé : openclaw plugins install @openclaw/msteams

Microsoft Teams Configuration rapide

1

Créer une ressource Azure Bot

Accédez au portail Azure → Créer une ressource → Recherchez 'Azure Bot'. Créez avec le type Single Tenant. Dans l'enregistrement d'application, générez un secret client. Copiez l'App ID, le secret client et le Tenant ID — vous aurez besoin des trois pour la configuration d'OpenClaw.

2

Installer le plugin Teams et configurer

Exécutez 'openclaw plugins install @openclaw/msteams' pour installer le plugin. Ajoutez la configuration du canal Teams à votre openclaw.json avec appId, appPassword et tenantId. Vous pouvez également utiliser les variables d'environnement MSTEAMS_APP_ID, MSTEAMS_APP_PASSWORD et MSTEAMS_TENANT_ID.

3

Configurer le point de terminaison de messagerie et activer le canal Teams

Dans le portail Azure, accédez à votre ressource Bot → Configuration. Définissez le point de terminaison de messagerie sur 'https://<votre-domaine>/api/messages'. Ensuite, allez dans Canaux → Ajouter Microsoft Teams → Configurer. Pour le développement local, utilisez un tunnel (ngrok ou Tailscale Funnel) pour exposer le port 3978.

4

Créer et installer l'application Teams

Créez un manifest.json avec l'App ID de votre bot comme botId, les portées (personal, team, groupChat) et les permissions RSC. Compressez-le avec outline.png et color.png. Téléversez via le portail développeur Teams ou le centre d'administration Teams. Pour les tests, chargez le package d'application en mode sideload.

5

Tester le bot

Trouvez votre bot dans Teams et envoyez-lui un message direct. Si vous utilisez la politique d'appariement par défaut, approuvez l'expéditeur via 'openclaw pairing approve msteams <code>' dans votre terminal. Le bot devrait répondre avec des réponses générées par l'IA.

Microsoft Teams Exemple de configuration

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 Documentation Détaillée

Vue d'ensemble de l'architecture

OpenClaw s'intègre à Microsoft Teams via l'Azure Bot Framework — une architecture basée sur les webhooks où Teams achemine les messages vers le point de terminaison /api/messages de votre passerelle, et OpenClaw répond via l'API REST du Bot Framework. Le flux est le suivant : L'utilisateur envoie un message dans Teams → Service Bot Framework → POST webhook vers votre passerelle (port 3978) → OpenClaw traite avec l'IA → réponse via l'API Bot Framework → Teams délivre la réponse. Le plugin Teams est installé séparément via 'openclaw plugins install @openclaw/msteams'. Cette approche modulaire maintient la passerelle principale légère tout en permettant aux fonctionnalités spécifiques à Teams (Adaptive Cards, téléversements de fichiers SharePoint, permissions RSC) d'être maintenues indépendamment. L'authentification utilise Azure AD : le Bot Framework valide les tokens JWT sur les requêtes webhook entrantes, et OpenClaw authentifie les appels API sortants en utilisant votre App ID et App Password. La configuration single-tenant est recommandée pour la sécurité, restreignant le bot au répertoire Azure AD de votre organisation.
Votre passerelle doit être accessible via une URL HTTPS publique. Pour le développement local, utilisez ngrok ou Tailscale Funnel pour créer un tunnel vers le port 3978.
Les bots single-tenant sont recommandés par rapport aux multi-tenant pour la sécurité organisationnelle — ils n'acceptent que les tokens de votre répertoire Azure AD.

Configuration Azure Bot et enregistrement d'application

La mise en place du bot Teams nécessite la création de ressources dans le portail Azure : 1. Créer une ressource Azure Bot — Recherchez 'Azure Bot' dans la marketplace. Sélectionnez Single Tenant comme type de bot. Cela crée à la fois la ressource Bot et un enregistrement d'application. 2. Générer un secret client — Dans App Registrations → votre application bot → Certificates & secrets, créez un nouveau secret client. Copiez la valeur immédiatement (elle n'est affichée qu'une seule fois). 3. Noter les identifiants — App (client) ID depuis la page Overview, la valeur du secret client et Directory (tenant) ID. Ces trois valeurs sont les identifiants d'authentification de votre bot. 4. Définir le point de terminaison de messagerie — Dans la ressource Bot → Configuration, définissez le point de terminaison sur 'https://<votre-domaine>/api/messages'. C'est là que Teams envoie les événements webhook. 5. Activer le canal Teams — Allez dans Channels → Add channel → Microsoft Teams. Configurez et enregistrez. Les variables d'environnement peuvent être utilisées à la place des valeurs du fichier de configuration : MSTEAMS_APP_ID, MSTEAMS_APP_PASSWORD, MSTEAMS_TENANT_ID.
openclaw.json
{
  "channels": {
    "msteams": {
      "appId": "<APP_ID>",
      "appPassword": "<APP_PASSWORD>",
      "tenantId": "<TENANT_ID>"
    }
  }
}
Protégez votre App Password. Ne le commitez jamais dans le contrôle de version. Utilisez les variables d'environnement (MSTEAMS_APP_PASSWORD) pour les déploiements en production. Renouvelez périodiquement le secret client dans le portail Azure.

Manifeste d'application Teams et permissions RSC

Le manifeste d'application Teams (manifest.json) définit l'identité de votre bot, ses portées et ses permissions. Il est empaqueté avec deux icônes dans un fichier .zip pour l'installation. Éléments essentiels du manifeste : • botId — L'App ID de votre Azure Bot • Portées — personal (messages privés), team (canaux), groupChat (conversations de groupe) • supportsFiles: true — Activer les cartes de consentement de fichier en chat personnel • Permissions Resource-Specific Consent (RSC) — Permettre au bot de recevoir des messages sans @mention Permissions RSC pour les canaux (portée team) : • ChannelMessage.Read.Group — Recevoir les messages de canal sans @mention • ChannelMessage.Send.Group — Envoyer des messages dans les canaux • TeamMember.Read.Group, TeamSettings.Read.Group — Lire les métadonnées de l'équipe Permissions RSC pour les discussions de groupe : • ChatMessage.Read.Chat — Recevoir les messages de discussion de groupe sans @mention Icônes requises : • outline.png — 32×32 pixels, fond transparent • color.png — 192×192 pixels, icône d'application en couleur Compressez manifest.json + les deux icônes ensemble, puis téléversez via le portail développeur Teams, le centre d'administration Teams, ou chargez en mode sideload pour les tests.
Lors de la mise à jour d'une application installée (par exemple, ajout de permissions RSC), incrémentez le champ version dans manifest.json, recompressez, retéléversez et réinstallez dans chaque équipe.
Après l'installation ou la mise à jour de l'application, quittez complètement et relancez le client Teams pour vous assurer que les nouvelles permissions prennent effet.

Politiques de messages privés

Les politiques de messages privés (DM) contrôlent qui peut interagir avec votre bot en chat personnel. OpenClaw prend en charge quatre politiques : • pairing (par défaut) — Les nouveaux utilisateurs qui envoient un message au bot reçoivent un code d'appariement aléatoire. Approuvez via 'openclaw pairing approve msteams <code>' dans votre terminal. Une fois approuvés, ils peuvent discuter librement. • allowlist — Seuls les utilisateurs listés dans allowFrom peuvent envoyer des messages au bot. Prend en charge les identifiants d'objet AAD, les UPN (utilisateur@org.com) ou les noms d'affichage. • open — Tout utilisateur Teams de votre locataire peut envoyer des messages au bot. Nécessite l'ajout de '*' à allowFrom comme confirmation de sécurité. • disabled — La fonctionnalité de messages privés est complètement désactivée. Teams identifie les utilisateurs par les identifiants d'objet AAD (Azure AD), les UPN ou les noms d'affichage. Vous pouvez les trouver dans les journaux de la passerelle lorsque les utilisateurs envoient des messages, ou les consulter dans le portail Azure sous Azure Active Directory → Users.
openclaw.json
{
  "channels": {
    "msteams": {
      "dmPolicy": "allowlist",
      "allowFrom": [
        "user@org.com",
        "40a1a0ed-4ff2-4164-a219-55518990c197"
      ]
    }
  }
}
Le format UPN (utilisateur@org.com) est généralement le plus pratique pour les listes d'autorisation. Les identifiants d'objet AAD sont plus stables si les utilisateurs sont susceptibles de changer d'adresse e-mail.
Utilisez 'openclaw pairing list msteams' pour voir toutes les demandes d'appariement en attente et leurs codes.

Gestion des discussions de groupe et des canaux

OpenClaw prend en charge à la fois les canaux Teams (au sein d'une équipe) et les discussions de groupe, chacun avec un contrôle d'accès configurable : • disabled (par défaut pour les groupes) — Ignorer tous les messages de groupe/canal • allowlist — Seuls les expéditeurs approuvés (via groupAllowFrom) peuvent déclencher le bot • open — Répondre aux messages de tous les membres du groupe ou participants du canal Par défaut, le bot nécessite une @mention dans les canaux et les discussions de groupe (requireMention: true). Définissez requireMention sur false pour que le bot réponde à tous les messages, ou configurez les permissions RSC pour recevoir les messages sans être mentionné. Les canaux Teams et les discussions de groupe maintiennent des contextes de conversation séparés. Chaque conversation a sa propre session et son propre historique, isolés des messages privés et des autres conversations. Les configurations personnalisées par équipe et par canal permettent un contrôle précis. Vous pouvez définir différents replyStyle, requireMention et configurations d'outils pour chaque équipe ou même des canaux individuels au sein d'une équipe.
openclaw.json
{
  "channels": {
    "msteams": {
      "groupPolicy": "allowlist",
      "groupAllowFrom": ["user@org.com"],
      "teams": {
        "My Team": {
          "channels": {
            "General": {
              "requireMention": true
            }
          }
        }
      }
    }
  }
}
Utilisez les noms d'affichage des équipes et canaux ou les identifiants de conversation (19:...@thread.tacv2) comme clés dans la configuration teams.
Les configurations par canal héritent de la configuration de l'équipe parente, qui hérite elle-même de la configuration globale msteams.

Styles de réponse et fils de discussion

Teams propose deux dispositions d'interface distinctes pour les canaux, et le comportement de réponse d'OpenClaw doit correspondre : • Posts (disposition classique) — Utilise des réponses en fil de discussion sous les messages racines. Définissez replyStyle sur 'thread' (par défaut). La réponse du bot apparaît comme une réponse à la carte du message original. • Threads (disposition de type Slack) — Utilise un flux de messages linéaire. Définissez replyStyle sur 'top-level'. Le bot envoie un nouveau message de premier niveau au lieu de créer un fil. L'API Teams n'expose pas la disposition utilisée par un canal, vous devez donc configurer replyStyle en conséquence. Des paramètres incompatibles ne causeront pas d'erreurs mais peuvent entraîner un flux de conversation sous-optimal. Le style de réponse peut être configuré globalement, par équipe ou par canal. Cela vous permet de vous adapter aux différentes dispositions à travers les différents canaux d'une même organisation Teams.
openclaw.json
{
  "channels": {
    "msteams": {
      "replyStyle": "thread",
      "teams": {
        "19:abc...@thread.tacv2": {
          "channels": {
            "19:xyz...@thread.tacv2": {
              "replyStyle": "top-level"
            }
          }
        }
      }
    }
  }
}

Gestion des fichiers et SharePoint

OpenClaw prend en charge le partage de fichiers dans Teams avec un comportement différent selon le type de chat : Chats personnels : • Flux FileConsentCard intégré — aucune configuration supplémentaire nécessaire. Le bot envoie une carte de consentement de fichier, l'utilisateur approuve et le fichier est téléversé. Discussions de groupe et canaux : • Nécessite la permission Microsoft Graph : Sites.ReadWrite.All • Optionnel : Chat.Read.All pour les liens de partage par utilisateur (restreint l'accès aux membres du chat uniquement) • Configurez sharePointSiteId pour spécifier le site SharePoint pour les téléversements de fichiers • Les fichiers sont stockés dans le dossier /OpenClawShared/ dans la bibliothèque de documents SharePoint Sans Chat.Read.All, les liens de fichiers partagés sont accessibles à toute l'organisation. Avec cette permission, le partage est restreint aux membres du chat actuel. Les pièces jointes entrantes sont automatiquement téléchargées et traitées par la passerelle. Les configurations mediaAllowHosts et mediaAuthAllowHosts contrôlent quels domaines sont autorisés pour le téléchargement des pièces jointes.
openclaw.json
{
  "channels": {
    "msteams": {
      "sharePointSiteId": "YOUR_SHAREPOINT_SITE_ID",
      "mediaAllowHosts": ["*.microsoft.com", "*.sharepoint.com"],
      "mediaAuthAllowHosts": ["graph.microsoft.com"]
    }
  }
}
Les permissions de l'API Graph (Sites.ReadWrite.All, Chat.Read.All) nécessitent le consentement de l'administrateur dans votre locataire Azure AD. Travaillez avec votre administrateur IT pour accorder ces permissions.

Adaptive Cards et sondages

Microsoft Teams prend en charge les Adaptive Cards — des dispositions riches et interactives basées sur des cartes qui vont au-delà du texte brut. OpenClaw les utilise pour des interactions améliorées avec le bot : Sondages : • Créez des sondages via 'openclaw message poll --channel msteams --target conversation:<id>' • Les votes sont collectés via les actions des Adaptive Cards et stockés localement dans ~/.openclaw/msteams-polls.json • La passerelle doit rester en ligne pour collecter les votes Adaptive Cards personnalisées : • Envoyez des Adaptive Cards arbitraires via le CLI : openclaw message send --channel msteams --target "conversation:<id>" --card '{...}' • Les cartes prennent en charge la version 1.5 du schéma Adaptive Card • Peuvent inclure des blocs de texte, des images, des boutons d'action, des champs de saisie et plus encore Notes de formatage : • Le markdown basique (gras, italique, code, liens) est pris en charge dans les messages réguliers • Les tableaux complexes et les listes profondément imbriquées peuvent ne pas s'afficher correctement • Pour des mises en page riches, utilisez les Adaptive Cards au lieu du formatage markdown
Utilisez l'Adaptive Cards Designer (adaptivecards.io/designer) pour concevoir et prévisualiser des dispositions de cartes personnalisées avant de les envoyer.
Les actions des Adaptive Cards peuvent déclencher des événements postback qu'OpenClaw traite comme des entrées utilisateur.

Extraction des identifiants Teams

Les URL Teams contiennent plusieurs identifiants, mais tous ne sont pas ceux dont vous avez besoin pour la configuration. Voici comment extraire les identifiants corrects : Team ID — Se trouve dans le chemin de l'URL (pas le paramètre de requête groupId) : https://teams.microsoft.com/l/team/19%3ABk4j...%40thread.tacv2/... → Décodez l'URL '19%3ABk4j...%40thread.tacv2' pour obtenir l'identifiant de l'équipe Channel ID — Également dans le chemin de l'URL : https://teams.microsoft.com/l/channel/19%3A15bc...%40thread.tacv2/... → Décodez l'URL pour obtenir l'identifiant de conversation du canal Cibles utilisateur pour les commandes CLI : • Par AAD ID : user:40a1a0ed-4ff2-4164-a219-55518990c197 • Par nom d'affichage : user:John Smith • Conversation : conversation:19:abc...@thread.tacv2 • Brut (si contient @thread) : 19:abc...@thread.tacv2
N'utilisez PAS le paramètre de requête 'groupId' des URL Teams — c'est l'identifiant du groupe Microsoft 365, pas l'identifiant de conversation Teams. Extrayez toujours les identifiants depuis le chemin de l'URL et décodez-les.

Microsoft Teams Référence de Configuration

enabled
Type: booleanDefault: true

Activer ou désactiver le canal Microsoft Teams

appId
Type: stringDefault: ""

App ID de l'Azure Bot (Microsoft App ID). Peut aussi utiliser la variable d'environnement MSTEAMS_APP_ID

appPassword
Type: stringDefault: ""

Secret client de l'Azure Bot. Peut aussi utiliser la variable d'environnement MSTEAMS_APP_PASSWORD

tenantId
Type: stringDefault: ""

Azure AD Tenant ID pour l'authentification single-tenant. Peut aussi utiliser la variable d'environnement MSTEAMS_TENANT_ID

webhook.port
Type: numberDefault: 3978

Port du listener webhook qui reçoit les événements du Bot Framework

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

Chemin du point de terminaison webhook pour les messages entrants du Bot Framework

dmPolicy
Type: stringDefault: "pairing"

Contrôle qui peut envoyer des messages privés au bot. Options : pairing, allowlist, open, disabled

allowFrom
Type: string[]Default: []

Identifiants d'objet AAD, UPN ou noms d'affichage autorisés à envoyer des messages privés au bot (quand dmPolicy est allowlist)

groupPolicy
Type: stringDefault: "allowlist"

Contrôle d'accès pour les groupes/canaux. Options : allowlist, open, disabled

groupAllowFrom
Type: string[]Default: []

Expéditeurs autorisés dans les discussions de groupe. Se rabat sur allowFrom si non défini

teams
Type: objectDefault: {}

Configurations personnalisées par équipe et par canal (replyStyle, requireMention, tools)

requireMention
Type: booleanDefault: true

Exiger une @mention dans les canaux et discussions de groupe. Définir sur false avec les permissions RSC pour répondre à tous les messages

replyStyle
Type: stringDefault: "thread"

Style de disposition des réponses. Options : thread (Posts classiques), top-level (Threads de type Slack)

configWrites
Type: booleanDefault: true

Autoriser les commandes /config set|unset à modifier les paramètres du canal en temps réel

textChunkLimit
Type: numberDefault:

Nombre maximum de caractères par message sortant avant découpage

chunkMode
Type: stringDefault: "length"

Stratégie de découpage du texte. Options : length (découpage strict), newline (respecte les paragraphes)

sharePointSiteId
Type: stringDefault: ""

Identifiant du site SharePoint pour les téléversements de fichiers dans les discussions de groupe/canaux

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

Hôtes autorisés pour le téléchargement des pièces jointes multimédias

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

Hôtes qui reçoivent les en-têtes Authorization lors du téléchargement de médias

dmHistoryLimit
Type: numberDefault: 50

Nombre de messages privés récents inclus comme contexte IA par conversation

historyLimit
Type: numberDefault: 50

Nombre maximum de messages de canal/groupe inclus comme contexte IA

Microsoft Teams Questions Fréquentes

Microsoft Teams Dépannage

Les images et pièces jointes sont manquantes dans les messages de canal

Les permissions de l'API Graph n'ont pas été accordées ou le consentement de l'administrateur est manquant. Le bot reçoit un contenu partiel au lieu du fichier réel.

Assurez-vous que votre enregistrement d'application dispose des permissions Graph ChannelMessage.Read.All et Chat.Read.All avec le consentement de l'administrateur. Réinstallez l'application Teams après la mise à jour des permissions. Quittez complètement et rouvrez le client Teams pour actualiser les permissions mises en cache.
Le bot ne répond pas dans les canaux (ne fonctionne qu'en messages privés)

Le bot nécessite une @mention par défaut dans les canaux et les discussions de groupe, ou les permissions RSC ne sont pas configurées.

Soit @mentionnez le bot dans les messages de canal, soit définissez requireMention: false dans votre configuration et ajoutez la permission RSC ChannelMessage.Read.Group à votre manifeste d'application. Réinstallez l'application dans chaque équipe après la mise à jour du manifeste.
Le manifeste de l'application Teams ne se met pas à jour après des modifications

Teams met agressivement en cache les métadonnées de l'application. L'ancien manifeste est toujours utilisé.

Incrémentez le champ version dans manifest.json (par exemple, 1.0.0 → 1.1.0), recompressez le package, supprimez l'ancienne application de Teams, réinstallez le package mis à jour, et quittez puis relancez le client Teams.
Erreurs 401 Unauthorized sur le point de terminaison webhook

Les valeurs appId, appPassword ou tenantId dans la configuration OpenClaw ne correspondent pas à l'enregistrement Azure Bot, ou test manuel sans tokens JWT Azure appropriés.

Vérifiez que les trois identifiants correspondent exactement aux valeurs du portail Azure. Testez votre bot en utilisant le Web Chat intégré d'Azure (dans la ressource Bot → Test in Web Chat) pour confirmer que le bot fonctionne avant de résoudre les problèmes spécifiques à Teams. Assurez-vous que votre tenantId correspond au répertoire où le bot a été enregistré.
Le bot ne fonctionne pas dans les canaux privés

Microsoft Teams avait historiquement une prise en charge limitée des bots dans les canaux privés. Depuis début 2026, Microsoft déploie une prise en charge étendue des applications dans les canaux privés, mais cela peut ne pas encore être disponible dans tous les tenants.

Vérifiez si votre tenant a reçu la mise à jour de prise en charge des applications dans les canaux privés. Si elle n'est pas encore disponible, utilisez des canaux standard (publics), des discussions de groupe ou des messages privés. Les applications doivent être ajoutées explicitement à chaque canal privé — l'installation au niveau de l'équipe ne s'applique pas automatiquement aux canaux privés.