Channels Reference
This page is the canonical reference for channel catalog status, config blocks, secret references, access policy fields, doctor checks, live-smoke readiness, and reload semantics. Per-channel setup pages should link here instead of repeating field tables.
Setup And Operation Loop
Use the same loop for every implemented channel:
anyy setup channels CHANNEL --write-config
anyy channels doctor CHANNEL
anyy gateway start
anyy channels reload
setup writes config and stores supplied secrets. doctor checks local
readiness. gateway start runs the adapters. channels reload asks a running
gateway to apply edited channel config without a full restart.
Implemented Channels
The runtime channel catalog currently marks these channels as implemented:
| Channel | Label | Aliases |
|---|---|---|
telegram | Telegram | tg |
discord | Discord | - |
slack | Slack | - |
whatsapp | wa | |
facebook | Facebook Messenger | facebook_messenger, messenger, meta |
email | imap, smtp | |
sms | SMS (Twilio) | twilio, sms_twilio |
dingtalk | DingTalk | ding_talk |
feishu | Feishu / Lark | lark |
weixin | Weixin / WeChat | wechat, weixin_wechat |
qqbot | QQ Bot | qq, qq_bot |
irc | IRC | - |
line | LINE | - |
These catalog entries are planned but do not have registered runtime adapters:
| Channel | Label |
|---|---|
yuanbao | Yuanbao |
google_chat | Google Chat |
Doctor reports planned channels as configured/planned rather than pretending they can deliver messages.
Capability Matrix
Capabilities come from the registered channel descriptors. They describe what the runtime adapter advertises; platform setup and access policy can still block a specific conversation or delivery path.
| Channel | Transport | Conversations | Threads | Inbound media | Outbound media | Typing | Live smoke |
|---|---|---|---|---|---|---|---|
telegram | polling | DM, groups | No | Yes | No | Yes | Yes |
discord | lifecycle/socket | DM, groups | Yes | Yes | No | No | Yes |
slack | lifecycle/socket | DM, groups | Yes | Yes | No | No | Yes |
whatsapp | polling | DM, groups | No | Yes | No | Yes | Yes |
facebook | webhook | DM | No | Yes | No | Yes | Yes |
email | polling | mailbox | Yes | No | No | No | Yes |
sms | webhook | DM | No | No | No | No | Yes |
dingtalk | lifecycle/socket | DM, groups | No | No | No | No | Yes |
feishu | lifecycle/websocket, webhook fallback | DM, groups | Yes | Yes | No | No | Yes |
weixin | polling | DM | No | Yes | image, video, audio, voice, file | Yes | No |
qqbot | lifecycle/socket | DM, groups | No | No | No | No | Yes |
irc | lifecycle/socket | DM, groups | No | No | No | No | Yes |
line | webhook | DM, groups | No | No | No | No | Yes |
Channel Config Blocks
Channel blocks live under channels.<name> in config.yaml. Common fields:
| Field | Meaning |
|---|---|
enabled | Whether the gateway should run the adapter. |
account_id | Local label for the platform account/bot. Often used in identity and secret paths. |
dm_policy | Direct-message access policy. |
group_policy | Group/channel access policy when the adapter supports group conversations. |
allow_from | Allowed sender/user IDs for allowlist policies. |
allow_groups | Allowed group/channel IDs for allowlist group policies. |
send_chunk_chars | Maximum outgoing text chunk size for adapters with message-size limits. |
media_max_bytes | Maximum inbound media download size for adapters that fetch media. |
Recommended setup/default-mode fields by channel:
| Channel | Required config fields | Required secret refs | Optional secret refs |
|---|---|---|---|
telegram | - | token_ref | - |
discord | - | bot_token_ref | - |
slack | - | bot_token_ref | app_token_ref |
weixin | - | token_ref | - |
dingtalk | client_id | client_secret_ref | - |
qqbot | app_id | client_secret_ref | - |
facebook | page_id | page_access_token_ref | webhook_verify_token_ref, app_secret_ref |
email | address, imap_host, smtp_host | password_ref | - |
irc | host, nick | - | password_ref |
sms | account_sid, from_number | auth_token_ref | - |
line | - | channel_access_token_ref, channel_secret_ref | - |
whatsapp | - | - | bridge_token_ref |
feishu | app_id | app_secret_ref | tenant_access_token_ref, verification_token_ref, encrypt_key_ref |
Use anyy setup channels CHANNEL --write-config where available; it writes
the block and stores supplied secrets in profile-local secret files.
The table follows the documented setup path and the default adapter mode. Some adapter parsers accept narrower blocks, but setup-generated config is the recommended operational baseline.
Secret References
Channel secret fields accept the standard secret ref scheme:
| Ref | Meaning |
|---|---|
secret:path/name | Read <home>/secrets/path/name. |
env:NAME | Read environment variable NAME. |
file:/path/to/file | Read an arbitrary file. |
literal:value | Use the literal value. Avoid for real credentials. |
Doctor checks the secret refs known to its local channel probe. Missing refs that the probe marks required fail the channel's doctor check. Optional refs are checked when present.
A passing doctor result does not prove every adapter mode can authenticate. For
example, the documented Feishu websocket setup needs app_id and
app_secret_ref.
Do not paste platform tokens into channel docs, chat messages, screenshots, or
issue reports. Store them as secret: refs or inject them with service-manager
environment.
Access Policies
Access policies are adapter-owned strings, but implemented channel setup uses these common values:
| Policy | Meaning |
|---|---|
open | Accept messages from anyone the platform delivers to the adapter. |
allowlist | Accept only IDs listed in allow_from or allow_groups. |
pairing | Accept already-paired identities. |
mention | In groups, respond only when the bot is mentioned or otherwise addressed. |
disabled | Reject that conversation type. |
Not every adapter uses every policy. Check the channel's setup page for the recommended policy and platform-specific identity format.
Access policy is channel-level authorization. It does not change Anyy's tool permissions, provider credentials, or profile boundaries.
Live Smoke Checks
anyy channels doctor CHANNEL reports live-smoke readiness, but the doctor
itself does not contact external platform APIs. It reports whether a real live
test would have enough environment to run.
The gate for all live tests is:
ANYY_LIVE_CHANNEL_TESTS=1
When the required channel-specific variables are also set, the live-smoke plan reports ready and prints the Go test command, such as:
ANYY_LIVE_CHANNEL_TESTS=1 go test ./internal/channels/telegram -run TestLive -count=1
Use live smoke only with test accounts or safe platform targets.
Reload Semantics
Channels run inside the resident gateway. After editing channel config, either restart the gateway or request a channel reload:
anyy channels reload --home ~/.anyy
anyy channels reload --home ~/.anyy --json
Reload applies channel configuration to the running gateway through the local socket. If the gateway is not running, start it first:
anyy gateway start --home ~/.anyy