--- title: Chat channels description: The 22 chat-channel adapters ClawMetry reads — Telegram, Signal, WhatsApp, Discord, Slack, iMessage, Matrix and more — and the concurrent-channel cap per tier. keywords: agent chat channels, Telegram agent monitoring, Signal WhatsApp agent transcripts, Slack agent observability eyebrow: Runtimes --- # Chat channels An OpenClaw-family agent can be reachable from a lot of places at once. Each channel writes its own transcript directory, and ClawMetry reads all of them into the same session and event model as everything else — so a Telegram conversation and a terminal session sit side by side in Conversations, with the same cost accounting. ## Supported channels All 22 adapters are free; there is no per-adapter gate. | | | | | |---|---|---|---| | Telegram | Signal | WhatsApp | Discord | | Slack | IRC | iMessage | WebChat | | Google Chat | Microsoft Teams | BlueBubbles | Matrix | | Mattermost | LINE | Nostr | Twitch | | Feishu | Zalo | Tlon | Synology Chat | | Nextcloud Talk | ClickClack | | | ## Where the data comes from One directory per adapter under the workspace root: ```text ~/.openclaw/telegram/*.jsonl ~/.openclaw/signal/*.jsonl ~/.openclaw/whatsapp/*.jsonl ~/.openclaw/discord/*.jsonl … ``` The daemon walks each directory it finds and ingests the transcripts. Files that are adapter bookkeeping rather than conversation — offset trackers, schema manifests — are skipped by name, so a JSON-object-per-file layout does not turn into noise in the event table. ## The concurrent-channel cap The channels axis is **capacity-scoped**: every adapter is free, but the number you may run *concurrently* is what the tier bounds. | Tier | Concurrent channels | |---|---| | OSS / Free | 3 | | Starter and above | Unlimited | ```bash clawmetry channels # list adapters and the current cap clawmetry channels --json # {tier, grace, enforced, channel_limit, channels[]} clawmetry channels --why 8 # what tier 8 concurrent channels would need ``` Note that `--why` takes a *count*, not an adapter id — because the constraint is capacity, not which adapter you picked. ## What you see per channel The **Conversations** tab groups by channel and thread. Per channel you get: - Message volume and thread count over time - Delivery health — whether messages are actually getting through - Per-thread transcripts with the same tool-call and cost detail as any session - Which agent handled which conversation The API surface mirrors this: ```bash curl -s localhost:8900/api/channels/status | jq curl -s localhost:8900/api/channels/telegram/threads | jq '.threads[:5]' curl -s localhost:8900/api/channel-delivery-health | jq ``` ## Adding a channel directory If your agent writes a channel transcript directory ClawMetry does not know about, the daemon needs its directory name added to the channel list — that is the only wiring required, and it is picked up on the next cycle. Open an issue with the directory name and a sample line.