Both modes connect your own agent: StandIn is the bridge, never the brain. And both need the same
one-time admin consent before calling works - chat works without it.
StandIn Managed Bot
StandIn publishes and operates one Teams bot; your Microsoft organization is routed to your agent by a connection you create in the StandIn portal.- In Teams, add StandIn from the Store.
- Type
signinto the bot and sign in with your StandIn account. That link is how StandIn learns which Microsoft organization to connect - you do not type a tenant id anywhere. - In the StandIn portal, deploy an identity and choose Use the StandIn bot. Paste your agent’s address; the portal gives you back the secrets.
- A Microsoft 365 administrator approves calling once for the organization. Chat works before this; calling switches on when the approval lands.
calling_secret/messages_secret on Hermes) - when set, they win over secret. OpenClaw has no
per-lane override: one secret covers both lanes.
Prefer not to edit config by hand? Run the one-line installer with --connection managed and that
secret: it writes both lanes, mounts /msteams/calling and /msteams/messages on your Tailscale
Funnel, and prints the two URLs to paste into the connection - see
Quickstart: StandIn Managed Bot.
One agent instance serves one connection. The secrets belong to a single Microsoft organization -
run a second instance for a second organization, and never share a secret across tenants.
Bring your own Azure bot
You register a Microsoft Entra app, create an Azure Bot resource, and upload your own Teams app package. The bot carries your name and lives entirely in your tenant. Follow Azure bot setup and App package. This is the right choice when identity custody matters more than setup time, or when you need the bot to be visibly yours.Endpoints
StandIn dials your agent, so the endpoint you save in the portal has to match the path your agent actually listens on. Give the portal a bare host and it fills in the default below; paste a full URL instead if your bridge serves something else. Calling is the same in both modes. Only chat differs, and that is the line people get wrong:
A bring-your-own-bot identity therefore uses
/api/messages, served by your runtime’s own Teams
channel (OpenClaw’s msteams channel, the Hermes gateway’s Teams platform) rather than by the voice
plugin. That is a different process from voice, which is why it has its own port. The portal suggests
the right one of the two when you deploy the identity, so take the value it offers.
Expose your agent
The mount commands that publish these paths, what a healthy probe looks like on each lane, and the
--http1.1 gotcha that makes a working voice mount look broken.