Microsoft Teams
„Lasst alle Hoffnung fahren, die ihr hier eintretet.“Aktualisiert: 2026-01-21 Status: Text und DM-Anhänge werden unterstützt; das Senden von Dateien in Kanälen/Gruppen erfordert
sharePointSiteId + Graph-Berechtigungen (siehe Dateien in Gruppenchats senden). Umfragen werden über Adaptive Cards gesendet. Nachrichtenaktionen stellen ein explizites upload-file für Datei-zuerst-Sendungen bereit.
Bundled plugin
Microsoft Teams wird in aktuellen OpenClaw-Releases als gebündeltes Plugin ausgeliefert, daher ist in der normalen paketierten Build kein separates Installieren erforderlich. Wenn Sie eine ältere Build oder eine benutzerdefinierte Installation verwenden, die das gebündelte Teams ausschließt, installieren Sie es manuell:Schnelleinrichtung (Anfänger)
- Stellen Sie sicher, dass das Microsoft Teams-Plugin verfügbar ist.
- Aktuelle paketierte OpenClaw-Releases enthalten es bereits gebündelt.
- Ältere/benutzerdefinierte Installationen können es mit den obigen Befehlen manuell hinzufügen.
- Erstellen Sie einen Azure Bot (App-ID + Client Secret + Tenant-ID).
- Konfigurieren Sie OpenClaw mit diesen Anmeldedaten.
- Stellen Sie
/api/messages(standardmäßig Port 3978) über eine öffentliche URL oder einen Tunnel bereit. - Installieren Sie das Teams-App-Paket und starten Sie das Gateway.
channels.msteams.groupPolicy: "allowlist"). Um Gruppenantworten zuzulassen, setzen Sie channels.msteams.groupAllowFrom (oder verwenden Sie groupPolicy: "open", um jedes Mitglied zuzulassen, standardmäßig mit Erwähnungs-Gating).
Ziele
- Mit OpenClaw über Teams-DMs, Gruppenchats oder Kanäle sprechen.
- Deterministisches Routing beibehalten: Antworten gehen immer an den Kanal zurück, aus dem sie eingegangen sind.
- Standardmäßig sicheres Kanalverhalten verwenden (Erwähnungen erforderlich, sofern nicht anders konfiguriert).
Konfigurationsschreibvorgänge
Standardmäßig darf Microsoft Teams Konfigurationsaktualisierungen schreiben, die durch/config set|unset ausgelöst werden (erfordert commands.config: true).
Deaktivieren mit:
Zugriffskontrolle (DMs + Gruppen)
DM-Zugriff- Standard:
channels.msteams.dmPolicy = "pairing". Unbekannte Absender werden ignoriert, bis sie genehmigt wurden. channels.msteams.allowFromsollte stabile AAD-Objekt-IDs verwenden.- UPNs/Anzeigenamen sind veränderlich; direkter Abgleich ist standardmäßig deaktiviert und wird nur mit
channels.msteams.dangerouslyAllowNameMatching: trueaktiviert. - Der Assistent kann Namen über Microsoft Graph zu IDs auflösen, wenn die Anmeldedaten dies erlauben.
- Standard:
channels.msteams.groupPolicy = "allowlist"(blockiert, außer Sie fügengroupAllowFromhinzu). Verwenden Siechannels.defaults.groupPolicy, um den Standard zu überschreiben, wenn er nicht gesetzt ist. channels.msteams.groupAllowFromsteuert, welche Absender in Gruppenchats/Kanälen auslösen können (Fallback aufchannels.msteams.allowFrom).- Setzen Sie
groupPolicy: "open", um jedes Mitglied zuzulassen (standardmäßig weiterhin mit Erwähnungs-Gating). - Um keine Kanäle zuzulassen, setzen Sie
channels.msteams.groupPolicy: "disabled".
- Begrenzen Sie Gruppen-/Kanalantworten, indem Sie Teams und Kanäle unter
channels.msteams.teamsauflisten. - Schlüssel sollten stabile Team-IDs und Kanal-Konversations-IDs verwenden.
- Wenn
groupPolicy="allowlist"gesetzt ist und eine Teams-Allowlist vorhanden ist, werden nur aufgelistete Teams/Kanäle akzeptiert (mit Erwähnungs-Gating). - Der Konfigurationsassistent akzeptiert
Team/Kanal-Einträge und speichert sie für Sie. - Beim Start löst OpenClaw Team-/Kanal- und Benutzer-Allowlist-Namen zu IDs auf (wenn Graph-Berechtigungen dies erlauben)
und protokolliert die Zuordnung; nicht aufgelöste Team-/Kanalnamen werden wie eingegeben beibehalten, aber standardmäßig für das Routing ignoriert, sofern
channels.msteams.dangerouslyAllowNameMatching: truenicht aktiviert ist.
So funktioniert es
- Stellen Sie sicher, dass das Microsoft Teams-Plugin verfügbar ist.
- Aktuelle paketierte OpenClaw-Releases enthalten es bereits gebündelt.
- Ältere/benutzerdefinierte Installationen können es mit den obigen Befehlen manuell hinzufügen.
- Erstellen Sie einen Azure Bot (App-ID + Secret + Tenant-ID).
- Erstellen Sie ein Teams-App-Paket, das auf den Bot verweist und die unten stehenden RSC-Berechtigungen enthält.
- Laden Sie die Teams-App in ein Team hoch/installieren Sie sie dort (oder im persönlichen Bereich für DMs).
- Konfigurieren Sie
msteamsin~/.openclaw/openclaw.json(oder über Umgebungsvariablen) und starten Sie das Gateway. - Das Gateway lauscht standardmäßig auf Bot-Framework-Webhook-Datenverkehr unter
/api/messages.
Azure Bot-Einrichtung (Voraussetzungen)
Bevor Sie OpenClaw konfigurieren, müssen Sie eine Azure-Bot-Ressource erstellen.Schritt 1: Azure Bot erstellen
- Gehen Sie zu Create Azure Bot
-
Füllen Sie die Registerkarte Basics aus:
Feld Wert Bot handle Ihr Bot-Name, z. B. openclaw-msteams(muss eindeutig sein)Subscription Wählen Sie Ihr Azure-Abonnement aus Resource group Neu erstellen oder vorhandene verwenden Pricing tier Free für Entwicklung/Tests Type of App Single Tenant (empfohlen – siehe Hinweis unten) Creation type Create new Microsoft App ID
Abkündigungshinweis: Das Erstellen neuer Multi-Tenant-Bots wurde nach dem 2025-07-31 eingestellt. Verwenden Sie für neue Bots Single Tenant.
- Klicken Sie auf Review + create → Create (warten Sie etwa 1–2 Minuten)
Schritt 2: Anmeldedaten abrufen
- Gehen Sie zu Ihrer Azure-Bot-Ressource → Configuration
- Kopieren Sie die Microsoft App ID → das ist Ihre
appId - Klicken Sie auf Manage Password → gehen Sie zur App-Registrierung
- Unter Certificates & secrets → New client secret → kopieren Sie den Value → das ist Ihr
appPassword - Gehen Sie zu Overview → kopieren Sie Directory (tenant) ID → das ist Ihre
tenantId
Schritt 3: Nachrichtenendpunkt konfigurieren
- In Azure Bot → Configuration
- Setzen Sie den Messaging endpoint auf Ihre Webhook-URL:
- Produktion:
https://your-domain.com/api/messages - Lokale Entwicklung: Verwenden Sie einen Tunnel (siehe unten Lokale Entwicklung (Tunneling))
- Produktion:
Schritt 4: Teams-Kanal aktivieren
- In Azure Bot → Channels
- Klicken Sie auf Microsoft Teams → Configure → Save
- Akzeptieren Sie die Nutzungsbedingungen
Lokale Entwicklung (Tunneling)
Teams kannlocalhost nicht erreichen. Verwenden Sie für die lokale Entwicklung einen Tunnel:
Option A: ngrok
Teams Developer Portal (Alternative)
Anstatt manuell eine Manifest-ZIP-Datei zu erstellen, können Sie das Teams Developer Portal verwenden:- Klicken Sie auf + New app
- Füllen Sie die grundlegenden Informationen aus (Name, Beschreibung, Entwicklerinformationen)
- Gehen Sie zu App features → Bot
- Wählen Sie Enter a bot ID manually und fügen Sie Ihre Azure-Bot-App-ID ein
- Aktivieren Sie die Bereiche: Personal, Team, Group Chat
- Klicken Sie auf Distribute → Download app package
- In Teams: Apps → Manage your apps → Upload a custom app → wählen Sie die ZIP-Datei aus
Den Bot testen
Option A: Azure Web Chat (Webhook zuerst verifizieren)- Im Azure-Portal → Ihre Azure-Bot-Ressource → Test in Web Chat
- Senden Sie eine Nachricht – Sie sollten eine Antwort sehen
- Das bestätigt, dass Ihr Webhook-Endpunkt funktioniert, bevor Sie Teams einrichten
- Installieren Sie die Teams-App (Sideload oder Organisationskatalog)
- Suchen Sie den Bot in Teams und senden Sie eine DM
- Prüfen Sie die Gateway-Logs auf eingehende Aktivität
Einrichtung (minimal, nur Text)
-
Stellen Sie sicher, dass das Microsoft Teams-Plugin verfügbar ist
- Aktuelle paketierte OpenClaw-Releases enthalten es bereits gebündelt.
- Ältere/benutzerdefinierte Installationen können es manuell hinzufügen:
- Von npm:
openclaw plugins install @openclaw/msteams - Aus einem lokalen Checkout:
openclaw plugins install ./path/to/local/msteams-plugin
- Von npm:
-
Bot-Registrierung
- Erstellen Sie einen Azure Bot (siehe oben) und notieren Sie:
- App-ID
- Client Secret (App-Passwort)
- Tenant-ID (Single Tenant)
- Erstellen Sie einen Azure Bot (siehe oben) und notieren Sie:
-
Teams-App-Manifest
- Fügen Sie einen
bot-Eintrag mitbotId = <App ID>hinzu. - Bereiche:
personal,team,groupChat. supportsFiles: true(erforderlich für Dateiverarbeitung im persönlichen Bereich).- Fügen Sie RSC-Berechtigungen hinzu (unten).
- Erstellen Sie Icons:
outline.png(32x32) undcolor.png(192x192). - Zippen Sie alle drei Dateien zusammen:
manifest.json,outline.png,color.png.
- Fügen Sie einen
-
OpenClaw konfigurieren
Sie können auch Umgebungsvariablen anstelle von Konfigurationsschlüsseln verwenden:
MSTEAMS_APP_IDMSTEAMS_APP_PASSWORDMSTEAMS_TENANT_ID
-
Bot-Endpunkt
- Setzen Sie den Azure-Bot-Messaging-Endpunkt auf:
https://<host>:3978/api/messages(oder Ihren gewählten Pfad/Port).
- Setzen Sie den Azure-Bot-Messaging-Endpunkt auf:
-
Gateway ausführen
- Der Teams-Kanal startet automatisch, wenn das gebündelte oder manuell installierte Plugin verfügbar ist und die
msteams-Konfiguration mit Anmeldedaten vorhanden ist.
- Der Teams-Kanal startet automatisch, wenn das gebündelte oder manuell installierte Plugin verfügbar ist und die
Aktion für Mitgliederinformationen
OpenClaw stellt für Microsoft Teams eine Graph-gestütztemember-info-Aktion bereit, damit Agenten und Automatisierungen Details zu Kanalmitgliedern (Anzeigename, E-Mail, Rolle) direkt über Microsoft Graph auflösen können.
Anforderungen:
Member.Read.GroupRSC-Berechtigung (bereits im empfohlenen Manifest enthalten)- Für teamübergreifende Abfragen:
User.Read.AllGraph-Application-Berechtigung mit Admin-Zustimmung
channels.msteams.actions.memberInfo gesteuert (Standard: aktiviert, wenn Graph-Anmeldedaten verfügbar sind).
Verlaufskontext
channels.msteams.historyLimitsteuert, wie viele aktuelle Kanal-/Gruppennachrichten in den Prompt eingebettet werden.- Fällt auf
messages.groupChat.historyLimitzurück. Setzen Sie0, um dies zu deaktivieren (Standard 50). - Abgerufener Thread-Verlauf wird durch Absender-Allowlists gefiltert (
allowFrom/groupAllowFrom), sodass die Kontextinitialisierung aus Threads derzeit nur Nachrichten von zugelassenen Absendern enthält. - Zitierter Anhangskontext (
ReplyTo*, aus Teams-Antwort-HTML abgeleitet) wird derzeit unverändert weitergegeben. - Anders ausgedrückt: Allowlists steuern, wer den Agenten auslösen kann; nur bestimmte ergänzende Kontextpfade werden heute gefiltert.
- DM-Verlauf kann mit
channels.msteams.dmHistoryLimitbegrenzt werden (Benutzer-Turns). Überschreibungen pro Benutzer:channels.msteams.dms["<user_id>"].historyLimit.
Aktuelle Teams-RSC-Berechtigungen (Manifest)
Dies sind die bestehenden resourceSpecific-Berechtigungen in unserem Teams-App-Manifest. Sie gelten nur innerhalb des Teams/Chats, in dem die App installiert ist. Für Kanäle (Team-Bereich):ChannelMessage.Read.Group(Application) - alle Kanalnachrichten ohne @-Erwähnung empfangenChannelMessage.Send.Group(Application)Member.Read.Group(Application)Owner.Read.Group(Application)ChannelSettings.Read.Group(Application)TeamMember.Read.Group(Application)TeamSettings.Read.Group(Application)
ChatMessage.Read.Chat(Application) - alle Gruppenchats-Nachrichten ohne @-Erwähnung empfangen
Beispiel für ein Teams-Manifest (geschwärzt)
Minimales, gültiges Beispiel mit den erforderlichen Feldern. Ersetzen Sie IDs und URLs.Hinweise zum Manifest (Pflichtfelder)
bots[].botIdmuss exakt mit der Azure-Bot-App-ID übereinstimmen.webApplicationInfo.idmuss exakt mit der Azure-Bot-App-ID übereinstimmen.bots[].scopesmuss die Oberflächen enthalten, die Sie verwenden möchten (personal,team,groupChat).bots[].supportsFiles: trueist für Dateiverarbeitung im persönlichen Bereich erforderlich.authorization.permissions.resourceSpecificmuss Lese-/Sende-Berechtigungen für Kanäle enthalten, wenn Sie Kanalverkehr möchten.
Aktualisieren einer bestehenden App
So aktualisieren Sie eine bereits installierte Teams-App (z. B. zum Hinzufügen von RSC-Berechtigungen):- Aktualisieren Sie Ihre
manifest.jsonmit den neuen Einstellungen - Erhöhen Sie das Feld
version(z. B.1.0.0→1.1.0) - Zippen Sie das Manifest mit den Icons erneut (
manifest.json,outline.png,color.png) - Laden Sie die neue ZIP-Datei hoch:
- Option A (Teams Admin Center): Teams Admin Center → Teams apps → Manage apps → finden Sie Ihre App → Upload new version
- Option B (Sideload): In Teams → Apps → Manage your apps → Upload a custom app
- Für Team-Kanäle: Installieren Sie die App in jedem Team erneut, damit neue Berechtigungen wirksam werden
- Beenden Sie Teams vollständig und starten Sie es neu (nicht nur das Fenster schließen), um zwischengespeicherte App-Metadaten zu löschen
Fähigkeiten: nur RSC vs. Graph
Mit nur Teams RSC (App installiert, keine Graph-API-Berechtigungen)
Funktioniert:- Textinhalt von Kanalnachrichten lesen.
- Textinhalt von Kanalnachrichten senden.
- Datei-Anhänge in persönlichen Chats (DMs) empfangen.
- Bild- oder Dateiinhalte in Kanälen/Gruppen (Payload enthält nur einen HTML-Stub).
- Herunterladen von Anhängen, die in SharePoint/OneDrive gespeichert sind.
- Lesen des Nachrichtenverlaufs (über das Live-Webhook-Ereignis hinaus).
Mit Teams RSC + Microsoft Graph Application-Berechtigungen
Zusätzlich möglich:- Herunterladen gehosteter Inhalte (in Nachrichten eingefügte Bilder).
- Herunterladen von Datei-Anhängen, die in SharePoint/OneDrive gespeichert sind.
- Lesen des Nachrichtenverlaufs von Kanälen/Chats über Graph.
RSC vs. Graph API
| Fähigkeit | RSC-Berechtigungen | Graph API |
|---|---|---|
| Echtzeitnachrichten | Ja (über Webhook) | Nein (nur Polling) |
| Historische Nachrichten | Nein | Ja (Verlauf kann abgefragt werden) |
| Einrichtungskomplexität | Nur App-Manifest | Erfordert Admin-Zustimmung + Token-Flow |
| Funktioniert offline | Nein (muss laufen) | Ja (jederzeit abfragbar) |
ChannelMessage.Read.All (erfordert Admin-Zustimmung).
Graph-aktivierte Medien + Verlauf (erforderlich für Kanäle)
Wenn Sie Bilder/Dateien in Kanälen benötigen oder Nachrichtenverlauf abrufen möchten, müssen Sie Microsoft-Graph-Berechtigungen aktivieren und Admin-Zustimmung erteilen.- Fügen Sie in Entra ID (Azure AD) App Registration Microsoft Graph Application permissions hinzu:
ChannelMessage.Read.All(Kanalanhänge + Verlauf)Chat.Read.AlloderChatMessage.Read.All(Gruppenchats)
- Erteilen Sie Admin-Zustimmung für den Tenant.
- Erhöhen Sie die Teams-App-Manifestversion, laden Sie sie erneut hoch und installieren Sie die App in Teams erneut.
- Beenden Sie Teams vollständig und starten Sie es neu, um zwischengespeicherte App-Metadaten zu löschen.
User.Read.All hinzu und erteilen Sie Admin-Zustimmung.
Bekannte Einschränkungen
Webhook-Timeouts
Teams liefert Nachrichten über HTTP-Webhooks. Wenn die Verarbeitung zu lange dauert (z. B. langsame LLM-Antworten), können Sie Folgendes sehen:- Gateway-Timeouts
- Teams versucht die Nachricht erneut zuzustellen (verursacht Duplikate)
- Verlorene Antworten
Formatierung
Teams-Markdown ist stärker eingeschränkt als Slack oder Discord:- Grundlegende Formatierung funktioniert: fett, kursiv,
code, Links - Komplexes Markdown (Tabellen, verschachtelte Listen) wird möglicherweise nicht korrekt gerendert
- Adaptive Cards werden für Umfragen und beliebige Card-Sendungen unterstützt (siehe unten)
Konfiguration
Wichtige Einstellungen (gemeinsame Kanalmuster siehe/gateway/configuration):
channels.msteams.enabled: Kanal aktivieren/deaktivieren.channels.msteams.appId,channels.msteams.appPassword,channels.msteams.tenantId: Bot-Anmeldedaten.channels.msteams.webhook.port(Standard3978)channels.msteams.webhook.path(Standard/api/messages)channels.msteams.dmPolicy:pairing | allowlist | open | disabled(Standard: pairing)channels.msteams.allowFrom: DM-Allowlist (AAD-Objekt-IDs empfohlen). Der Assistent löst bei der Einrichtung Namen zu IDs auf, wenn Graph-Zugriff verfügbar ist.channels.msteams.dangerouslyAllowNameMatching: Break-Glass-Schalter, um veränderlichen UPN-/Anzeigenamen-Abgleich und direktes Team-/Kanalnamen-Routing wieder zu aktivieren.channels.msteams.textChunkLimit: Chunk-Größe für ausgehenden Text.channels.msteams.chunkMode:length(Standard) odernewline, um vor dem Chunking nach Länge an Leerzeilen (Absatzgrenzen) zu teilen.channels.msteams.mediaAllowHosts: Allowlist für Hosts eingehender Anhänge (standardmäßig Microsoft-/Teams-Domains).channels.msteams.mediaAuthAllowHosts: Allowlist für das Anhängen von Authorization-Headern bei Medien-Wiederholungsversuchen (standardmäßig Graph- + Bot-Framework-Hosts).channels.msteams.requireMention: @-Erwähnung in Kanälen/Gruppen erforderlich (Standard true).channels.msteams.replyStyle:thread | top-level(siehe Antwortstil).channels.msteams.teams.<teamId>.replyStyle: Überschreibung pro Team.channels.msteams.teams.<teamId>.requireMention: Überschreibung pro Team.channels.msteams.teams.<teamId>.tools: Standardüberschreibungen der Tool-Richtlinie pro Team (allow/deny/alsoAllow), wenn eine Kanalüberschreibung fehlt.channels.msteams.teams.<teamId>.toolsBySender: Standardüberschreibungen der Tool-Richtlinie pro Team und Absender ("*"-Wildcard unterstützt).channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle: Überschreibung pro Kanal.channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention: Überschreibung pro Kanal.channels.msteams.teams.<teamId>.channels.<conversationId>.tools: Überschreibungen der Tool-Richtlinie pro Kanal (allow/deny/alsoAllow).channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender: Überschreibungen der Tool-Richtlinie pro Kanal und Absender ("*"-Wildcard unterstützt).toolsBySender-Schlüssel sollten explizite Präfixe verwenden:id:,e164:,username:,name:(veraltete Schlüssel ohne Präfix werden weiterhin nur aufid:abgebildet).channels.msteams.actions.memberInfo: Graph-gestützte Mitgliederinfo-Aktion aktivieren oder deaktivieren (Standard: aktiviert, wenn Graph-Anmeldedaten verfügbar sind).channels.msteams.sharePointSiteId: SharePoint-Site-ID für Dateiuploads in Gruppenchats/Kanälen (siehe Dateien in Gruppenchats senden).
Routing und Sitzungen
- SessionKeys folgen dem Standard-Agent-Format (siehe /concepts/session):
- Direktnachrichten teilen die Hauptsitzung (
agent:<agentId>:<mainKey>). - Kanal-/Gruppennachrichten verwenden die Konversations-ID:
agent:<agentId>:msteams:channel:<conversationId>agent:<agentId>:msteams:group:<conversationId>
- Direktnachrichten teilen die Hauptsitzung (
Antwortstil: Threads vs. Beiträge
Teams hat kürzlich zwei Kanal-UI-Stile über dasselbe zugrunde liegende Datenmodell eingeführt:| Stil | Beschreibung | Empfohlener replyStyle |
|---|---|---|
| Posts (klassisch) | Nachrichten erscheinen als Karten mit Thread-Antworten darunter | thread (Standard) |
| Threads (Slack-ähnlich) | Nachrichten fließen linearer, eher wie in Slack | top-level |
replyStyle verwenden:
threadin einem Threads-Stil-Kanal → Antworten erscheinen unpassend verschachtelttop-levelin einem Posts-Stil-Kanal → Antworten erscheinen als separate Top-Level-Beiträge statt im Thread
replyStyle pro Kanal basierend darauf, wie der Kanal eingerichtet ist:
Anhänge und Bilder
Aktuelle Einschränkungen:- DMs: Bilder und Datei-Anhänge funktionieren über die Teams-Bot-Datei-APIs.
- Kanäle/Gruppen: Anhänge liegen im M365-Speicher (SharePoint/OneDrive). Die Webhook-Payload enthält nur einen HTML-Stub, nicht die eigentlichen Dateibytes. Graph-API-Berechtigungen sind erforderlich, um Kanalanhänge herunterzuladen.
- Für explizite Datei-zuerst-Sendungen verwenden Sie
action=upload-filemitmedia/filePath/path; optionalesmessagewird zum begleitenden Text/Kommentar, undfilenameüberschreibt den hochgeladenen Namen.
channels.msteams.mediaAllowHosts (verwenden Sie ["*"], um jeden Host zuzulassen).
Authorization-Header werden nur für Hosts in channels.msteams.mediaAuthAllowHosts angehängt (standardmäßig Graph- + Bot-Framework-Hosts). Halten Sie diese Liste streng (vermeiden Sie Multi-Tenant-Suffixe).
Dateien in Gruppenchats senden
Bots können Dateien in DMs mithilfe des FileConsentCard-Ablaufs senden (integriert). Das Senden von Dateien in Gruppenchats/Kanälen erfordert jedoch zusätzliche Einrichtung:| Kontext | So werden Dateien gesendet | Erforderliche Einrichtung |
|---|---|---|
| DMs | FileConsentCard → Benutzer akzeptiert → Bot lädt hoch | Funktioniert sofort |
| Gruppenchats/Kanäle | Zu SharePoint hochladen → Link teilen | Erfordert sharePointSiteId + Graph-Berechtigungen |
| Bilder (jeder Kontext) | Base64-kodiert inline | Funktioniert sofort |
Warum Gruppenchats SharePoint benötigen
Bots haben kein persönliches OneDrive-Laufwerk (der Graph-API-Endpunkt/me/drive funktioniert nicht für Application-Identitäten). Um Dateien in Gruppenchats/Kanälen zu senden, lädt der Bot zu einer SharePoint-Site hoch und erstellt einen Freigabelink.
Einrichtung
-
Graph-API-Berechtigungen hinzufügen in Entra ID (Azure AD) → App Registration:
Sites.ReadWrite.All(Application) - Dateien zu SharePoint hochladenChat.Read.All(Application) - optional, aktiviert benutzerbezogene Freigabelinks
- Admin-Zustimmung für den Tenant erteilen.
-
SharePoint-Site-ID ermitteln:
-
OpenClaw konfigurieren:
Freigabeverhalten
| Berechtigung | Freigabeverhalten |
|---|---|
Sites.ReadWrite.All nur | Organisationsweiter Freigabelink (jede Person in der Organisation kann zugreifen) |
Sites.ReadWrite.All + Chat.Read.All | Benutzerbezogener Freigabelink (nur Chat-Mitglieder können zugreifen) |
Chat.Read.All fehlt, greift der Bot auf organisationsweite Freigabe zurück.
Fallback-Verhalten
| Szenario | Ergebnis |
|---|---|
Gruppenchat + Datei + sharePointSiteId konfiguriert | Zu SharePoint hochladen, Freigabelink senden |
Gruppenchat + Datei + keine sharePointSiteId | OneDrive-Upload versuchen (kann fehlschlagen), nur Text senden |
| Persönlicher Chat + Datei | FileConsentCard-Ablauf (funktioniert ohne SharePoint) |
| Jeder Kontext + Bild | Base64-kodiert inline (funktioniert ohne SharePoint) |
Speicherort der Dateien
Hochgeladene Dateien werden in einem Ordner/OpenClawShared/ in der Standarddokumentbibliothek der konfigurierten SharePoint-Site gespeichert.
Umfragen (Adaptive Cards)
OpenClaw sendet Teams-Umfragen als Adaptive Cards (es gibt keine native Teams-Umfrage-API).- CLI:
openclaw message poll --channel msteams --target conversation:<id> ... - Stimmen werden vom Gateway in
~/.openclaw/msteams-polls.jsonaufgezeichnet. - Das Gateway muss online bleiben, um Stimmen aufzuzeichnen.
- Umfragen veröffentlichen derzeit noch keine Ergebniszusammenfassungen automatisch (prüfen Sie bei Bedarf die Store-Datei).
Adaptive Cards (beliebig)
Senden Sie beliebiges Adaptive-Card-JSON mit dem Toolmessage oder der CLI an Teams-Benutzer oder Konversationen.
Der Parameter card akzeptiert ein Adaptive-Card-JSON-Objekt. Wenn card angegeben ist, ist Nachrichtentext optional.
Agent-Tool:
Zielformate
MSTeams-Ziele verwenden Präfixe, um zwischen Benutzern und Konversationen zu unterscheiden:| Zieltyp | Format | Beispiel |
|---|---|---|
| Benutzer (nach ID) | user:<aad-object-id> | user:40a1a0ed-4ff2-4164-a219-55518990c197 |
| Benutzer (nach Name) | user:<display-name> | user:John Smith (erfordert Graph API) |
| Gruppe/Kanal | conversation:<conversation-id> | conversation:19:abc123...@thread.tacv2 |
| Gruppe/Kanal (roh) | <conversation-id> | 19:abc123...@thread.tacv2 (wenn @thread enthalten ist) |
user: werden Namen standardmäßig als Gruppen-/Team-Auflösung behandelt. Verwenden Sie immer user:, wenn Sie Personen über den Anzeigenamen ansprechen.
Proaktives Messaging
- Proaktive Nachrichten sind erst möglich, nachdem ein Benutzer interagiert hat, da wir erst dann Konversationsreferenzen speichern.
- Informationen zu
dmPolicyund Allowlist-Gating finden Sie unter/gateway/configuration.
Team- und Kanal-IDs (häufiger Stolperstein)
Der Query-ParametergroupId in Teams-URLs ist NICHT die Team-ID, die für die Konfiguration verwendet wird. Extrahieren Sie IDs stattdessen aus dem URL-Pfad:
Team-URL:
- Team-ID = Pfadsegment nach
/team/(URL-dekodiert, z. B.19:Bk4j...@thread.tacv2) - Kanal-ID = Pfadsegment nach
/channel/(URL-dekodiert) - Den Query-Parameter
groupIdignorieren
Private Kanäle
Bots haben in privaten Kanälen nur eingeschränkte Unterstützung:| Funktion | Standardkanäle | Private Kanäle |
|---|---|---|
| Bot-Installation | Ja | Eingeschränkt |
| Echtzeitnachrichten (Webhook) | Ja | Funktioniert möglicherweise nicht |
| RSC-Berechtigungen | Ja | Können sich anders verhalten |
| @-Erwähnungen | Ja | Wenn der Bot erreichbar ist |
| Graph-API-Verlauf | Ja | Ja (mit Berechtigungen) |
- Verwenden Sie Standardkanäle für Bot-Interaktionen
- Verwenden Sie DMs – Benutzer können dem Bot immer direkt schreiben
- Verwenden Sie Graph API für historischen Zugriff (erfordert
ChannelMessage.Read.All)
Fehlerbehebung
Häufige Probleme
- Bilder werden in Kanälen nicht angezeigt: Graph-Berechtigungen oder Admin-Zustimmung fehlen. Installieren Sie die Teams-App erneut und beenden/öffnen Sie Teams vollständig neu.
- Keine Antworten im Kanal: Erwähnungen sind standardmäßig erforderlich; setzen Sie
channels.msteams.requireMention=falseoder konfigurieren Sie dies pro Team/Kanal. - Versionskonflikt (Teams zeigt weiterhin altes Manifest): Entfernen Sie die App, fügen Sie sie erneut hinzu und beenden Sie Teams vollständig, um die Aktualisierung zu erzwingen.
- 401 Unauthorized vom Webhook: Beim manuellen Testen ohne Azure-JWT erwartet – bedeutet, dass der Endpunkt erreichbar ist, aber die Authentifizierung fehlgeschlagen ist. Verwenden Sie Azure Web Chat für einen korrekten Test.
Fehler beim Manifest-Upload
- „Icon file cannot be empty“: Das Manifest verweist auf Icon-Dateien mit 0 Byte. Erstellen Sie gültige PNG-Icons (32x32 für
outline.png, 192x192 fürcolor.png). - „webApplicationInfo.Id already in use“: Die App ist noch in einem anderen Team/Chat installiert. Suchen Sie sie und deinstallieren Sie sie zuerst oder warten Sie 5–10 Minuten auf die Weitergabe.
- „Something went wrong“ beim Upload: Laden Sie stattdessen über https://admin.teams.microsoft.com hoch, öffnen Sie die DevTools des Browsers (F12) → Registerkarte Network, und prüfen Sie den Response-Body auf den tatsächlichen Fehler.
- Sideload schlägt fehl: Versuchen Sie „Upload an app to your org’s app catalog“ statt „Upload a custom app“ – das umgeht häufig Sideload-Beschränkungen.
RSC-Berechtigungen funktionieren nicht
- Prüfen Sie, ob
webApplicationInfo.idexakt mit der App-ID Ihres Bots übereinstimmt - Laden Sie die App erneut hoch und installieren Sie sie im Team/Chat erneut
- Prüfen Sie, ob Ihr Organisationsadministrator RSC-Berechtigungen blockiert hat
- Bestätigen Sie, dass Sie den richtigen Bereich verwenden:
ChannelMessage.Read.Groupfür Teams,ChatMessage.Read.Chatfür Gruppenchats
Referenzen
- Create Azure Bot - Einrichtungsanleitung für Azure Bot
- Teams Developer Portal - Teams-Apps erstellen/verwalten
- Teams app manifest schema
- Receive channel messages with RSC
- RSC permissions reference
- Teams bot file handling (Kanal/Gruppe erfordert Graph)
- Proactive messaging
Verwandt
- Kanäle - Übersicht — alle unterstützten Kanäle
- Pairing — DM-Authentifizierung und Pairing-Ablauf
- Gruppen — Gruppenchat-Verhalten und Erwähnungs-Gating
- Kanal-Routing — Sitzungsrouting für Nachrichten
- Sicherheit — Zugriffsmodell und Härtung