Skip to main content
One agent can run across phone, web chat, email, text, and SMS. Per-channel configuration lets you tune how that agent thinks and how its replies are rendered on each channel, without forking the agent. Both maps are optional and additive: when a channel has no entry it inherits the base agent config, so voice and web behaviour is unaffected. There are two independent maps, keyed by channel (telephone, webrtc, webchat, sms, email, text):
channel_overrides and channel_properties live on a static_prompt agent config. They are consumed by the async messaging engine (SMS, email, text, and webchat — the text-only web widget). Voice and WebRTC ignore channel_properties transport mechanics and fall back to the base config.webrtc is the web widget with voice (a LiveKit session) and webchat is the web widget with its Text only toggle on. They are separate keys on purpose: text wants different steering than voice (markdown, no spoken-style phrasing, its own greeting, possibly a different model), and nothing configured under webrtc applies to webchat or the other way round.

channel_overrides

Each entry steers inference for one channel. Fields are merged with the base config at resolution time. When instructions_mode is append, the resolver concatenates base and override instructions separated by a blank line. If the base instructions are empty, the override is used as-is regardless of mode.

channel_properties

Each entry is a channel-exclusive block, discriminated by its channel field. Every block shares enabled (default true) and body_template (default {{agent_response}}), then adds channel-specific fields.

EmailProperties (channel: "email")

For the full email-agent reference (domains, routing, and the fields above in context), see Configuring an email agent.

SmsProperties (channel: "sms")

TextProperties (channel: "text")

The first-party API text channel has no transport mechanics, so it carries only the shared fields.

WebchatProperties (channel: "webchat")

The text-only web widget. Like text it has no transport mechanics and no enabled flag: a published widget is the switch. A webchat conversation is answered by the async engine, so channel_overrides.webchat (instructions, greeting, tool budget, LLM override) applies to it, and the agent’s widgets, forms, thinking hint and continue_on_phone tools are offered exactly as on the LiveKit widget. An escalation (a handoff action) can carry a channels.webchat route, set under Route by channel in the action.

How resolution works

When a message arrives on a channel, resolve_channel_config folds the base agent config with that channel’s override and property blocks into a single effective config:
The resolved values:
If a channel has no override and no properties entry, the base config is returned unchanged. This keeps voice and WebRTC untouched when you add async-channel tuning.

Next steps

Configuring an email agent

Full reference for email-specific fields, routing, and domains.

Channels

How an agent connects to phone, web, email, text, and SMS.