Skip to content

Supported Channels

The gateway registry exposes channel adapters by name and alias. Each production channel should keep platform-specific code inside src/gateway/channels/<name>.rs and share common behavior through gateway core.

GroupChannels
Team chatslack, discord, mattermost, msteams, teams, googlechat, google_chat, nextcloud-talk, nextcloud_talk, synology-chat, synology_chat, tlon, irc
Messagingtelegram, signal, whatsapp, line, sms, zalo, zalouser, weixin, qqbot, yuanbao, nostr
Enterprise Chinafeishu, lark, feishu_comment, lark_comment, dingtalk, wecom, wecom_callback
Apple and local bridgesbluebubbles, imessage
Email and cloudemail, msgraph_webhook
Automation and voicehomeassistant, home_assistant, voice-call, voice_call, talk-voice, talk_voice
APIapi_server

Internal and test-only adapters include webhook, qa-channel, and websocket helper paths. They are useful for development and fixtures but should not be presented as normal user-facing chat software in setup pickers.

Use the channel manager:

Terminal window
duck gateway channels

Choose Add Channel, pick the platform, and follow the prompts. The setup flow writes non-secret channel config to profile config.json and secret material to profile auth.json.

The table below summarizes what setup asks for. Field names and credentials are intentionally platform-specific; use Configure Channels for the shared schema.

ChannelSetup inputs
telegramBotFather bot token, optional allowed Telegram user ids. Setup uses Bot API polling by default.
slackxoxb- bot token, xapp- Socket Mode app token, optional signing secret, allowed channels/users.
signalsignal-cli HTTP daemon URL, account/number, DM policy, optional allowed users and groups.
matrixHomeserver URL, access token, bot user id if token validation cannot detect it, allowed rooms/users.
feishu, larkScan-to-create or existing app id/app secret, WebSocket or webhook mode, optional verification/encrypt keys for webhook mode.
feishu_comment, lark_commentApp id/app secret, document allowlist, comment policy, WebSocket or webhook mode.
discordBot token, allowed guild/channel/user ids, mention policy.
mattermostServer URL, bot or personal access token, allowed channels/users.
api_serverOptional bearer token. Exposes OpenAI-compatible HTTP endpoints through Gateway.
whatsappWhatsApp Cloud API credentials and webhook verification fields, or an external bridge transport when selected.
dingtalkClient id/app key and client secret/app secret. Setup uses Stream Mode by default.
wecomEnterprise WeChat AI Bot id and secret. Setup uses AI Bot WebSocket by default.
wecom_callbackEnterprise WeChat encrypted callback credentials and independent callback namespace.
weixinWeixin iLink QR login flow. Runtime stores the returned token and API base.
bluebubbles, imessageBlueBubbles server URL and password, DM/group policies, webhook path. imessage keeps a separate namespace.
emailIMAP host/account/password, SMTP host/account/password, polling interval, attachment policy.
smsTwilio-compatible account SID, auth token, from number, webhook URL, optional JSON bridge secret.
msgraph_webhookGraph bridge URL, notification URL, optional bridge token, optional clientState secret, accepted resource filters.
msteams, teamsBot Framework app id/client secret, optional tenant id, messaging endpoint, allowed conversations/users.
googlechat, google_chatBearer access token, Google project id, Pub/Sub subscription, REST/PubSub settings.
lineChannel access token, channel secret, webhook URL, group policy.
ircServer, port, TLS flag, nickname, channel list, optional server/NickServ passwords.
nextcloud-talk, nextcloud_talkNextcloud server URL, bot username/app password, optional webhook secret, room allowlist.
nostrPrivate key or nsec, relay URLs, allowed pubkeys. Bridge mode has separate bridge URL/token prompts.
synology-chat, synology_chatIncoming webhook URL, optional bot username, outgoing webhook secret, allowed channels/users.
tlonExternal Tlon/Urbit bridge URL, optional bearer token and webhook secret, conversation allowlist.
twitchOAuth token, username, channel list, mention policy.
zaloExternal Zalo Official Account/business bridge URL, app/account ids, allowlists, optional secrets.
zalouserExternal Zalo user/session bridge URL, app/session ids, allowlists, optional secrets.
homeassistant, home_assistantHome Assistant base URL, long-lived access token, notify service, watched domains/entities, cooldown, optional command webhook secret.
qqbotQQ Bot app id and app secret, markdown support flag, DM/group policy.
yuanbaoYuanbao app id/app secret, bot accounts, direct WebSocket/API domain settings, DM/group policy.
voice-call, voice_callExternal voice bridge URL, optional bearer token and webhook secret, provider label, call/caller allowlists.
talk-voice, talk_voiceExternal talk-voice bridge URL, optional bearer token and webhook secret, provider label, conversation/participant allowlists.

Aliases must route to one implementation while preserving the configured namespace. For example, teams and msteams share the Microsoft Teams adapter, and imessage uses the BlueBubbles backend while keeping an iMessage-facing channel name.

Each production adapter should document and test:

  • Required config and auth fields.
  • Inbound text to Agent Loop.
  • Outbound text delivery.
  • Session key derivation for DM, group, channel, thread, and topic surfaces.
  • Attachment handoff and media limits.
  • Typing behavior, even if the platform only supports a no-op.
  • Approval behavior through native UI or text fallback.
  • Dedupe behavior for platform event ids.