Channels
14 adapters, one unified message format. Every adapter normalizes inbound messages into the same InboundMessage shape regardless of platform.
| Channel | Required config keys | Auth method |
|---|---|---|
| Telegram | bot_token | @BotFather bot token |
| Discord | bot_token | Discord Developer Portal bot token |
| Slack | bot_token, app_token | Slack app tokens (socket mode) |
phone_number_id, access_token | Meta permanent access token | |
username, password (IMAP+SMTP) | IMAP/SMTP credentials | |
| SMS | account_sid, auth_token, from_number | Twilio credentials |
| Matrix | homeserver, user_id, access_token | Matrix access token |
| IRC | server, nick | None (or SASL via server config) |
| Signal | phone_number | Local signal-cli registration |
| Webhook | none required | Optional HMAC secret |
| Mastodon | instance_url, access_token | OAuth2 access token |
| Microsoft Teams | app_id, app_password | Azure Bot Framework |
| Mattermost | token | Personal access token |
| Nextcloud Talk | url, username, password, room_token | Nextcloud credentials |
Enabling a channel
Either run the guided wizard:
cortex channels add discord
Or write the config block directly — every key supports ENV:VAR_NAME secret resolution:
[channels.discord]
enabled = true
bot_token = "ENV:DISCORD_BOT_TOKEN"
Checking channel status
cortex channels list
Shows every configured channel and whether its adapter is currently connected.
Writing your own channel adapter
Subclass ChannelAdapter from cortexflow-sdk and implement
connect(), disconnect(), and send() — see
Plugins & SDK for a full example, or
examples/plugins/
on GitHub for three complete, tested plugins.