Microsoft Teams (plugin)
“Laat alle hoop varen, gij die hier binnentreedt.”Bijgewerkt: 2026-01-21 Status: tekst + DM-bijlagen worden ondersteund; het verzenden van bestanden in kanalen/groepen vereist
sharePointSiteId + Graph-rechten (zie Bestanden verzenden in groepschats). Polls worden verzonden via Adaptive Cards.
Plugin vereist
Microsoft Teams wordt geleverd als een plugin en is niet inbegrepen bij de core-installatie. Breaking change (2026.1.15): MS Teams is uit de core verplaatst. Als je het gebruikt, moet je de plugin installeren. Uitleg: dit houdt core-installaties lichter en laat MS Teams-afhankelijkheden onafhankelijk updaten. Installeren via CLI (npm‑register):Snelle installatie (beginner)
- Installeer de Microsoft Teams-plugin.
- Maak een Azure Bot aan (App ID + client secret + tenant ID).
- Configureer OpenClaw met deze referenties.
- Stel
/api/messagesbloot (standaard poort 3978) via een publieke URL of tunnel. - Installeer het Teams-app-pakket en start de Gateway.
channels.msteams.groupPolicy: "allowlist"). Om groepsantwoorden toe te staan, stel channels.msteams.groupAllowFrom in (of gebruik groupPolicy: "open" om elk lid toe te staan, met mention‑vereiste).
Doelen
- Met OpenClaw praten via Teams DM’s, groepschats of kanalen.
- Routering deterministisch houden: antwoorden gaan altijd terug naar het kanaal waar ze zijn ontvangen.
- Standaard veilig kanaalgedrag (mentions vereist tenzij anders geconfigureerd).
Config-wegschrijvingen
Standaard mag Microsoft Teams config-updates wegschrijven die worden getriggerd door/config set|unset (vereist commands.config: true).
Uitschakelen met:
Toegangsbeheer (DM’s + groepen)
DM-toegang- Standaard:
channels.msteams.dmPolicy = "pairing". Onbekende afzenders worden genegeerd tot goedkeuring. channels.msteams.allowFromaccepteert AAD-object-ID’s, UPN’s of weergavenamen. De wizard zet namen om naar ID’s via Microsoft Graph wanneer de referenties dat toestaan.
- Standaard:
channels.msteams.groupPolicy = "allowlist"(geblokkeerd tenzij jegroupAllowFromtoevoegt). Gebruikchannels.defaults.groupPolicyom de standaard te overschrijven wanneer niet ingesteld. channels.msteams.groupAllowFrombepaalt welke afzenders groepschats/kanalen kunnen triggeren (valt terug opchannels.msteams.allowFrom).- Stel
groupPolicy: "open"in om elk lid toe te staan (standaard nog steeds mention‑vereist). - Om geen kanalen toe te staan, stel
channels.msteams.groupPolicy: "disabled"in.
- Beperk groeps-/kanaalantwoorden door teams en kanalen te vermelden onder
channels.msteams.teams. - Sleutels kunnen team-ID’s of namen zijn; kanaalsleutels kunnen conversatie-ID’s of namen zijn.
- Wanneer
groupPolicy="allowlist"en een teams‑toegestane lijst aanwezig is, worden alleen vermelde teams/kanalen geaccepteerd (mention‑vereist). - De configuratiewizard accepteert
Team/Channel‑items en slaat ze voor je op. - Bij opstarten zet OpenClaw team-/kanaal- en gebruikersnamen in de toegestane lijst om naar ID’s (wanneer Graph-rechten dit toestaan) en logt de mapping; niet-opgeloste items blijven zoals ingevoerd.
Hoe het werkt
- Installeer de Microsoft Teams-plugin.
- Maak een Azure Bot aan (App ID + secret + tenant ID).
- Bouw een Teams-app-pakket dat naar de bot verwijst en de onderstaande RSC-rechten bevat.
- Upload/installeer de Teams-app in een team (of persoonlijke scope voor DM’s).
- Configureer
msteamsin~/.openclaw/openclaw.json(of omgevingsvariabelen) en start de Gateway. - De Gateway luistert standaard naar Bot Framework-webhookverkeer op
/api/messages.
Azure Bot-installatie (Vereisten)
Voordat je OpenClaw configureert, moet je een Azure Bot-resource aanmaken.Stap 1: Azure Bot maken
- Ga naar Create Azure Bot
-
Vul het tabblad Basics in:
Waarde Waarde Bot-naam Je botnaam, bijv. openclaw-msteams(moet uniek zijn)Abonnement Selecteer je Azure-abonnement Resourcegroep Nieuw aanmaken of bestaand gebruiken Prijscategorie Free voor dev/test Type app Single Tenant (aanbevolen – zie opmerking hieronder) Type aanmaak Nieuwe Microsoft App-ID maken
Deprecatiebericht: Het aanmaken van nieuwe multi-tenant bots is na 2025-07-31 afgeschaft. Gebruik Single Tenant voor nieuwe bots.
- Klik Review + create → Create (wacht ~1–2 minuten)
Stap 2: Referenties ophalen
- Ga naar je Azure Bot-resource → Configuration
- Kopieer Microsoft App ID → dit is je
appId - Klik Manage Password → ga naar de App-registratie
- Onder Certificates & secrets → New client secret → kopieer de Value → dit is je
appPassword - Ga naar Overview → kopieer Directory (tenant) ID → dit is je
tenantId
Stap 3: Messaging-endpoint configureren
- In Azure Bot → Configuration
- Stel Messaging endpoint in op je webhook-URL:
- Productie:
https://your-domain.com/api/messages - Lokale dev: gebruik een tunnel (zie Lokale ontwikkeling hieronder)
- Productie:
Stap 4: Teams-kanaal inschakelen
- In Azure Bot → Channels
- Klik Microsoft Teams → Configure → Save
- Accepteer de Servicevoorwaarden
Lokale ontwikkeling (Tunneling)
Teams kanlocalhost niet bereiken. Gebruik een tunnel voor lokale ontwikkeling:
Optie A: ngrok
Teams Developer Portal (Alternatief)
In plaats van handmatig een manifest-ZIP te maken, kun je de Teams Developer Portal gebruiken:- Klik + New app
- Vul basisinfo in (naam, beschrijving, ontwikkelaarsinfo)
- Ga naar App features → Bot
- Selecteer Enter a bot ID manually en plak je Azure Bot App ID
- Vink scopes aan: Personal, Team, Group Chat
- Klik Distribute → Download app package
- In Teams: Apps → Manage your apps → Upload a custom app → selecteer de ZIP
De bot testen
Optie A: Azure Web Chat (verifieer eerst de webhook)- In Azure Portal → je Azure Bot-resource → Test in Web Chat
- Stuur een bericht – je zou een antwoord moeten zien
- Dit bevestigt dat je webhook-endpoint werkt vóór Teams-installatie
- Installeer de Teams-app (sideload of org-catalogus)
- Zoek de bot in Teams en stuur een DM
- Controleer Gateway-logs op inkomende activiteit
Installatie (minimaal, alleen tekst)
-
Installeer de Microsoft Teams-plugin
- Via npm:
openclaw plugins install @openclaw/msteams - Via een lokale checkout:
openclaw plugins install ./extensions/msteams
- Via npm:
-
Bot-registratie
- Maak een Azure Bot aan (zie hierboven) en noteer:
- App ID
- Client secret (App-wachtwoord)
- Tenant ID (single-tenant)
- Maak een Azure Bot aan (zie hierboven) en noteer:
-
Teams-app-manifest
- Voeg een
bot‑item toe metbotId = <App ID>. - Scopes:
personal,team,groupChat. supportsFiles: true(vereist voor bestandsverwerking in persoonlijke scope).- Voeg RSC-rechten toe (hieronder).
- Maak iconen:
outline.png(32x32) encolor.png(192x192). - Zip alle drie bestanden samen:
manifest.json,outline.png,color.png.
- Voeg een
-
OpenClaw configureren
Je kunt ook omgevingsvariabelen gebruiken in plaats van config-sleutels:
MSTEAMS_APP_IDMSTEAMS_APP_PASSWORDMSTEAMS_TENANT_ID
-
Bot-endpoint
- Stel het Azure Bot Messaging Endpoint in op:
https://<host>:3978/api/messages(of je gekozen pad/poort).
- Stel het Azure Bot Messaging Endpoint in op:
-
Gateway starten
- Het Teams-kanaal start automatisch wanneer de plugin is geïnstalleerd en
msteams‑config met referenties bestaat.
- Het Teams-kanaal start automatisch wanneer de plugin is geïnstalleerd en
Contextgeschiedenis
channels.msteams.historyLimitbepaalt hoeveel recente kanaal-/groepsberichten in de prompt worden opgenomen.- Valt terug op
messages.groupChat.historyLimit. Stel0in om uit te schakelen (standaard 50). - DM-geschiedenis kan worden beperkt met
channels.msteams.dmHistoryLimit(gebruikersbeurten). Per‑gebruiker‑overschrijvingen:channels.msteams.dms["<user_id>"].historyLimit.
Huidige Teams RSC-rechten (Manifest)
Dit zijn de bestaande resourceSpecific-rechten in ons Teams-app-manifest. Ze gelden alleen binnen het team/de chat waar de app is geïnstalleerd. Voor kanalen (team-scope):ChannelMessage.Read.Group(Application) – alle kanaalberichten ontvangen zonder @mentionChannelMessage.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 groepschatberichten ontvangen zonder @mention
Voorbeeld Teams-manifest (geredigeerd)
Minimaal, geldig voorbeeld met de vereiste velden. Vervang ID’s en URL’s.Manifest‑kanttekeningen (verplichte velden)
bots[].botIdmoet overeenkomen met de Azure Bot App ID.webApplicationInfo.idmoet overeenkomen met de Azure Bot App ID.bots[].scopesmoet de oppervlakken bevatten die je wilt gebruiken (personal,team,groupChat).bots[].supportsFiles: trueis vereist voor bestandsverwerking in persoonlijke scope.authorization.permissions.resourceSpecificmoet kanaal lezen/verzenden bevatten als je kanaalverkeer wilt.
Een bestaande app bijwerken
Om een reeds geïnstalleerde Teams-app bij te werken (bijv. om RSC-rechten toe te voegen):- Werk je
manifest.jsonbij met de nieuwe instellingen - Verhoog het veld
version(bijv.1.0.0→1.1.0) - Zip opnieuw het manifest met iconen (
manifest.json,outline.png,color.png) - Upload de nieuwe zip:
- Optie A (Teams Admin Center): Teams Admin Center → Teams apps → Manage apps → zoek je app → Upload new version
- Optie B (Sideload): In Teams → Apps → Manage your apps → Upload a custom app
- Voor teamkanalen: herinstalleer de app in elk team zodat nieuwe rechten ingaan
- Teams volledig afsluiten en opnieuw starten (niet alleen het venster sluiten) om gecachte app‑metadata te wissen
Mogelijkheden: alleen RSC vs Graph
Met alleen Teams RSC (app geïnstalleerd, geen Graph API-rechten)
Werkt:- Kanaalbericht tekst lezen.
- Kanaalbericht tekst verzenden.
- Persoonlijke (DM) bestandsbijlagen ontvangen.
- Afbeeldings- of bestandsinhoud in kanalen/groepen (payload bevat alleen HTML‑stub).
- Bijlagen downloaden die in SharePoint/OneDrive zijn opgeslagen.
- Berichtgeschiedenis lezen (buiten de live webhook‑event).
Met Teams RSC + Microsoft Graph Application-rechten
Toevoegen:- Gehoste inhoud downloaden (afbeeldingen die in berichten zijn geplakt).
- Bestandsbijlagen downloaden die in SharePoint/OneDrive zijn opgeslagen.
- Kanaal-/chatberichtgeschiedenis lezen via Graph.
RSC vs Graph API
| Mogelijkheid | RSC-rechten | Graph API |
|---|---|---|
| Realtime berichten | Ja (via webhook) | Nee (alleen polling) |
| Historische berichten | Nee | Ja (geschiedenis opvragen) |
| Installatiecomplexiteit | Alleen app-manifest | Vereist admin‑toestemming + tokenflow |
| Werkt offline | Nee (moet draaien) | Ja (op elk moment opvragen) |
ChannelMessage.Read.All (vereist admin‑toestemming).
Graph‑ingeschakelde media + geschiedenis (vereist voor kanalen)
Als je afbeeldingen/bestanden in kanalen nodig hebt of berichtgeschiedenis wilt ophalen, moet je Microsoft Graph-rechten inschakelen en admin‑toestemming verlenen.- In Entra ID (Azure AD) App Registration, voeg Microsoft Graph Application permissions toe:
ChannelMessage.Read.All(kanaalbijlagen + geschiedenis)Chat.Read.AllofChatMessage.Read.All(groepschats)
- Verleen admin‑toestemming voor de tenant.
- Verhoog de Teams-app manifestversie, upload opnieuw en herinstalleer de app in Teams.
- Teams volledig afsluiten en opnieuw starten om gecachte app‑metadata te wissen.
User.Read.All (Application) toe en geef admin consent.
Bekende beperkingen
Webhook‑timeouts
Teams levert berichten via HTTP‑webhooks. Als verwerking te lang duurt (bijv. trage LLM‑antwoorden), kun je zien:- Gateway‑timeouts
- Teams die het bericht opnieuw probeert te verzenden (duplicaten)
- Verloren antwoorden
Opmaak
Teams‑markdown is beperkter dan Slack of Discord:- Basisopmaak werkt: vet, cursief,
code, links - Complexe markdown (tabellen, geneste lijsten) rendert mogelijk niet correct
- Adaptive Cards worden ondersteund voor polls en het verzenden van kaarten (zie hieronder)
Configuratie
Belangrijke instellingen (zie/gateway/configuration voor gedeelde kanaalpatronen):
channels.msteams.enabled: kanaal in-/uitschakelen.channels.msteams.appId,channels.msteams.appPassword,channels.msteams.tenantId: bot‑referenties.channels.msteams.webhook.port(standaard3978)channels.msteams.webhook.path(standaard/api/messages)channels.msteams.dmPolicy:pairing | allowlist | open | disabled(standaard: pairing)channels.msteams.allowFrom: toegestane lijst voor DM’s (AAD‑object‑ID’s, UPN’s of weergavenamen). De wizard zet namen om naar ID’s tijdens installatie wanneer Graph‑toegang beschikbaar is.channels.msteams.textChunkLimit: uitgaande tekst‑chunkgrootte.channels.msteams.chunkMode:length(standaard) ofnewlineom op lege regels (alinea‑grenzen) te splitsen vóór lengte‑chunking.channels.msteams.mediaAllowHosts: toegestane lijst voor inkomende bijlagehosts (standaard Microsoft/Teams‑domeinen).channels.msteams.mediaAuthAllowHosts: toegestane lijst voor het toevoegen van Authorization‑headers bij media‑retries (standaard Graph + Bot Framework‑hosts).channels.msteams.requireMention: @mention vereisen in kanalen/groepen (standaard true).channels.msteams.replyStyle:thread | top-level(zie Antwoordstijl).channels.msteams.teams.<teamId>.replyStyle: per‑team overschrijving.channels.msteams.teams.<teamId>.requireMention: per‑team overschrijving.channels.msteams.teams.<teamId>.tools: standaard per‑team tool‑beleid‑overschrijvingen (allow/deny/alsoAllow) gebruikt wanneer een kanaaloverschrijving ontbreekt.channels.msteams.teams.<teamId>.toolsBySender: standaard per‑team per‑afzender tool‑beleid‑overschrijvingen ("*"wildcard ondersteund).channels.msteams.teams.<teamId>.channels.<conversationId>.replyStyle: per‑kanaal overschrijving.channels.msteams.teams.<teamId>.channels.<conversationId>.requireMention: per‑kanaal overschrijving.channels.msteams.teams.<teamId>.channels.<conversationId>.tools: per‑kanaal tool‑beleid‑overschrijvingen (allow/deny/alsoAllow).channels.msteams.teams.<teamId>.channels.<conversationId>.toolsBySender: per‑kanaal per‑afzender tool‑beleid‑overschrijvingen ("*"wildcard ondersteund).channels.msteams.sharePointSiteId: SharePoint‑site‑ID voor bestandsuploads in groepschats/kanalen (zie Bestanden verzenden in groepschats).
Routering & sessies
- Sessiesleutels volgen het standaard agent‑formaat (zie /concepts/session):
- Directe berichten delen de hoofdsessie (
agent:<agentId>:<mainKey>). - Kanaal-/groepsberichten gebruiken conversatie‑ID:
agent:<agentId>:msteams:channel:<conversationId>agent:<agentId>:msteams:group:<conversationId>
- Directe berichten delen de hoofdsessie (
Antwoordstijl: Threads vs Posts
Teams introduceerde recent twee kanaal‑UI‑stijlen boven hetzelfde datamodel:| Stijl | Beschrijving | Aanbevolen replyStyle |
|---|---|---|
| Posts (klassiek) | Berichten verschijnen als kaarten met antwoorden eronder | thread (standaard) |
| Threads (Slack‑achtig) | Berichten lopen lineair, meer zoals Slack | top-level |
replyStyle:
threadin een Threads‑kanaal → antwoorden verschijnen onhandig genesttop-levelin een Posts‑kanaal → antwoorden verschijnen als losse top‑level posts i.p.v. in de thread
replyStyle per kanaal op basis van de kanaalinstelling:
Bijlagen & afbeeldingen
Huidige beperkingen:- DM’s: Afbeeldingen en bestandsbijlagen werken via Teams bot file‑API’s.
- Kanalen/groepen: Bijlagen staan in M365‑opslag (SharePoint/OneDrive). De webhook‑payload bevat alleen een HTML‑stub, niet de daadwerkelijke bytes. Graph API‑rechten zijn vereist om kanaalbijlagen te downloaden.
channels.msteams.mediaAllowHosts (gebruik ["*"] om elke host toe te staan).
Authorization‑headers worden alleen toegevoegd voor hosts in channels.msteams.mediaAuthAllowHosts (standaard Graph + Bot Framework‑hosts). Houd deze lijst strikt (vermijd multi‑tenant suffixen).
Bestanden verzenden in groepschats
Bots kunnen bestanden in DM’s verzenden via de FileConsentCard‑flow (ingebouwd). Bestanden verzenden in groepschats/kanalen vereist echter extra installatie:| Context | Hoe bestanden worden verzonden | Benodigde setup |
|---|---|---|
| DM’s | FileConsentCard → gebruiker accepteert → bot uploadt | Werkt out of the box |
| Groepschats/kanalen | Upload naar SharePoint → deel‑link | Vereist sharePointSiteId + Graph‑rechten |
| Afbeeldingen (elk) | Base64‑gecodeerd inline | Werkt out of the box |
Waarom groepschats SharePoint nodig hebben
Bots hebben geen persoonlijke OneDrive‑schijf (het/me/drive Graph API‑endpoint werkt niet voor applicatie‑identiteiten). Om bestanden in groepschats/kanalen te verzenden, uploadt de bot naar een SharePoint‑site en maakt een deel‑link.
Installatie
-
Voeg Graph API‑rechten toe in Entra ID (Azure AD) → App Registration:
Sites.ReadWrite.All(Application) – bestanden uploaden naar SharePointChat.Read.All(Application) – optioneel, maakt per‑gebruiker deel‑links mogelijk
- Verleen admin‑toestemming voor de tenant.
-
Haal je SharePoint‑site‑ID op:
-
Configureer OpenClaw:
Delen gedrag
| Bevoegdheden | Delen gedrag |
|---|---|
Sites.ReadWrite.All alleen | Organisatiebrede deel‑link (iedereen in de org heeft toegang) |
Sites.ReadWrite.All + Chat.Read.All | Per‑gebruiker deel‑link (alleen chatleden hebben toegang) |
Chat.Read.All ontbreekt, valt de bot terug op organisatiebreed delen.
Fallback‑gedrag
| Scenario | Resultaat |
|---|---|
Groepschat + bestand + sharePointSiteId geconfigureerd | Upload naar SharePoint, stuur deel‑link |
Groepschat + bestand + geen sharePointSiteId | Poging OneDrive‑upload (kan falen), stuur alleen tekst |
| Persoonlijke chat + bestand | FileConsentCard‑flow (werkt zonder SharePoint) |
| Elke context + afbeelding | Base64‑gecodeerd inline (werkt zonder SharePoint) |
Opslaglocatie van bestanden
Geüploade bestanden worden opgeslagen in een map/OpenClawShared/ in de standaard documentbibliotheek van de geconfigureerde SharePoint‑site.
Polls (Adaptive Cards)
OpenClaw verzendt Teams‑polls als Adaptive Cards (er is geen native Teams‑poll‑API).- CLI:
openclaw message poll --channel msteams --target conversation:<id> ... - Stemmen worden door de Gateway vastgelegd in
~/.openclaw/msteams-polls.json. - De Gateway moet online blijven om stemmen te registreren.
- Polls plaatsen nog geen automatische resultaat‑samenvattingen (inspecteer indien nodig het opslagbestand).
Adaptive Cards (vrij)
Stuur elke Adaptive Card‑JSON naar Teams‑gebruikers of conversaties met demessage‑tool of CLI.
De parameter card accepteert een Adaptive Card‑JSON‑object. Wanneer card wordt meegegeven, is berichttekst optioneel.
Agent‑tool:
Target formats
MSTeams‑doelen gebruiken prefixes om onderscheid te maken tussen gebruikers en conversaties:| Doeltype | Formaat | Voorbeeld |
|---|---|---|
| Gebruiker (op ID) | user:<aad-object-id> | user:40a1a0ed-4ff2-4164-a219-55518990c197 |
| Gebruiker (op naam) | user:<display-name> | user:John Smith (vereist Graph API) |
| Groep/kanaal | conversation:<conversation-id> | conversation:19:[email protected] |
| Groep/kanaal (raw) | <conversation-id> | 19:[email protected] (als @thread bevat) |
user: worden namen standaard als groep/team opgezocht. Gebruik altijd user: wanneer je personen op weergavenaam target.
Proactieve berichten
- Proactieve berichten zijn alleen mogelijk nadat een gebruiker heeft geïnteracteerd, omdat we dan conversatie‑referenties opslaan.
- Zie
/gateway/configurationvoordmPolicyen gating via toegestane lijsten.
Team- en kanaal‑ID’s (veelgemaakte valkuil)
De queryparametergroupId in Teams‑URL’s is NIET het team‑ID dat voor configuratie wordt gebruikt. Haal ID’s uit het URL‑pad:
Team‑URL:
- Team‑ID = padsegment na
/team/(URL‑gedecodeerd, bijv.19:[email protected]) - Kanaal‑ID = padsegment na
/channel/(URL‑gedecodeerd) - Negeer de queryparameter
groupId
Privékanalen
Bots hebben beperkte ondersteuning in privékanalen:| Functie | Standaardkanalen | Privékanalen |
|---|---|---|
| Bot‑installatie | Ja | Beperkt |
| Realtime berichten (webhook) | Ja | Werkt mogelijk niet |
| RSC‑rechten | Ja | Kan anders werken |
| @mentions | Ja | Als bot toegankelijk is |
| Graph API‑geschiedenis | Ja | Ja (met rechten) |
- Gebruik standaardkanalen voor bot‑interacties
- Gebruik DM’s – gebruikers kunnen de bot altijd direct berichten
- Gebruik Graph API voor historische toegang (vereist
ChannelMessage.Read.All)
Veelvoorkomende problemen
Problemen oplossen
- Afbeeldingen verschijnen niet in kanalen: Graph‑rechten of admin‑toestemming ontbreken. Herinstalleer de Teams‑app en sluit/open Teams volledig.
- Geen antwoorden in kanaal: mentions zijn standaard vereist; stel
channels.msteams.requireMention=falsein of configureer per team/kanaal. - Versiemismatch (Teams toont oud manifest): verwijder en voeg de app opnieuw toe en sluit Teams volledig.
- 401 Unauthorized van webhook: Verwacht bij handmatig testen zonder Azure JWT – betekent dat het endpoint bereikbaar is maar authenticatie faalt. Gebruik Azure Web Chat om correct te testen.
Manifest‑uploadfouten
- “Icon file cannot be empty”: Het manifest verwijst naar iconen van 0 bytes. Maak geldige PNG‑iconen (32x32 voor
outline.png, 192x192 voorcolor.png). - “webApplicationInfo.Id already in use”: De app is nog geïnstalleerd in een ander team/chat. Verwijder die eerst of wacht 5–10 minuten op propagatie.
- “Something went wrong” bij upload: Upload via https://admin.teams.microsoft.com, open DevTools (F12) → Network‑tab en controleer de response‑body voor de echte fout.
- Sideload mislukt: Probeer “Upload an app to your org’s app catalog” i.p.v. “Upload a custom app” – dit omzeilt vaak sideload‑beperkingen.
RSC‑rechten werken niet
- Controleer of
webApplicationInfo.idexact overeenkomt met de App ID van je bot - Upload de app opnieuw en herinstalleer in het team/de chat
- Controleer of je org‑admin RSC‑rechten heeft geblokkeerd
- Bevestig dat je de juiste scope gebruikt:
ChannelMessage.Read.Groupvoor teams,ChatMessage.Read.Chatvoor groepschats
Referenties
- Create Azure Bot – Azure Bot‑installatiehandleiding
- Teams Developer Portal – Teams‑apps maken/beheren
- Teams app manifest schema
- Receive channel messages with RSC
- RSC permissions reference
- Teams bot file handling (kanaal/groep vereist Graph)
- Proactive messaging