Choose an upload route
- Teams client (fastest)
- Developer Portal
- Publish to your org
Best for testing and personal use. In Teams, go to Apps → Manage your apps → Upload an app:
Choose Upload a custom app and select the zip. The bot is then available to you; open
it and call.
This requires custom app upload to be allowed for your account - if the button is missing,
ask your Teams admin (policy reference:
Manage custom app policies and settings).Official walkthrough: Upload your app in Teams.


Register your agent in StandIn
In your StandIn dashboard, register your Agent voice URL and the matching HMACsharedSecret
(done automatically if you used pairing).
If you also want Teams chat, set the optional Agent chat URL
(https://<your-public-host>/api/messages; leave it empty if you only use voice).
Place the first call
Search for the app in Teams (or open it under Apps → Built for your org after an org publish), then call the bot. StandIn answers, connects to your bridge, and your agent speaks.First chat message ignored? Using OpenClaw, its chat channel drops direct messages from
senders you have not approved (
dmPolicy: pairing, the default) - approve yourself with
openclaw pairing approve msteams <CODE>. Using Hermes, an unknown sender gets a
pairing-code reply instead of an answer - approve it with hermes pairing approve teams <CODE>
(with TEAMS_ALLOWED_USERS set, unlisted senders are dropped silently instead). Details:
the bot ignores Teams chat.If something does not work
- Bot never joins the call → check the calling webhook on the Teams channel and that Graph permissions are admin-consented.
- Bot joins but stays silent → usually a
sharedSecretmismatch or an unreachable Agent voice URL; see Troubleshooting. - Upload rejected → re-check the package layout (files
at the zip root) and bump the manifest
versionon republish.