Prerequisite: mint and bind a least-privilege execution key
A conversation route runs its turn as anexecution_key — an API-key identity,
not the client who texted. That key’s live grants are the turn’s entire authority,
so scope it to exactly what the agent needs and nothing more.
1
Mint a scoped key
Mint a key whose scopes are the least the agent’s tools require. A non-admin
owner may grant only scopes it already holds; the new key is owned by you.
2
Bind it when you create the route
The route’s
--execution-key binds that identity. You may bind your own
identity or a key you own; an admin may bind any key (a pass-role check). The
key must be evaluable by a background execution — a stored policy condition that
needs a request token is rejected at bind. The turn is bounded by the key’s
live grants: attenuate the key and the next turn is denied, with no
revocation step on the route.Pick a provider and wire it
Both providers use the same bridge and the same execution-key binding above. What differs — the channel package and its env group, the webhook(s) to point at the deployment, theour_identity format, and (on the Meta Cloud API) the rich-message
and 24-hour-window behaviour — lives on the plugin page:
channel-twilio
CHANNEL_TWILIO_*, the inbound and status webhooks, and the whatsapp:-prefixed
sender as our_identity. Text only.channel-whatsapp
CHANNEL_WHATSAPP_*, the single webhook with its hub.challenge handshake, the
phone_number_id identity, plus interactive selects, media, and templates.--channel naming the provider and --identity its our_identity
(exact formats on the plugin pages):
Test it and add more numbers
Send a WhatsApp message to the configured number and watch the agent’s reply come back from that same number. Read one answer record by id:--channel
and a different --identity (a second Twilio sender, or a second phone_number_id
under one Cloud credential). Each identity resolves to its own route and agent, and
each reply leaves from the number that was texted. A (channel, identity) pair may
be claimed by only one route.
Delivery outcomes — including a failed record when WhatsApp rejects a send inside
or outside its 24-hour window — surface on the admin failed-delivery door:
See also
- Client conversations — doors, routing, and delivery outcomes.
- Conversation bridge reference — every setting, the read doors, and the authorization model.
- Use owned keys — minting and capping the execution key.
- Telegram / Slack to an agent — the same bridge on other channels.

