Skip to content

Channels

Every chat app Habakkuk can talk on, how each one connects, how much setup it takes, and which one to start with.

On this page

A channel is one account on one chat platform: a Telegram bot, a Slack app, a WhatsApp agent. Channels live under channels: in config.yaml, keyed by an account name you choose, with a type. habakkuk serve runs them, and habakkuk channels (or /status in a chat) shows their health.

yaml
channels:
  telegram:                   # the account name: yours to choose
    type: telegram            # the platform
    token_env: TELEGRAM_BOT_TOKEN

Tip

Start with a WhatsApp agent or Telegram. Both connect by polling, so they need no public URL, and habakkuk setup checks the key or token for you. A WhatsApp agent takes about a minute; a Telegram bot takes two.

All channels#

"Public URL" means the platform calls Habakkuk over the internet, so habakkuk serve needs an HTTPS address it can reach (see Webhook channels).

Channel type Connects by Public URL Setup
WhatsApp agent whatsappagent long polling no easy, in habakkuk setup
WhatsApp linked device whatsapp a linked device, like WhatsApp Web no easy, in habakkuk setup
WhatsApp Business Cloud API whatsappcloud webhook + Graph API yes involved: a Meta app and business account
Telegram telegram long polling no easy, in habakkuk setup
Slack slack Socket Mode no moderate: a Slack app, in habakkuk setup
Discord discord Gateway websocket no moderate: a bot application, in habakkuk setup
Signal signal a signal-cli daemon no moderate: run signal-cli
Matrix matrix /sync long polling no moderate: a bot account and token
Email email IMAP (IDLE or polling) + SMTP no easy: a mailbox and an app password
SMS sms Twilio webhook + REST yes moderate: a Twilio number
Microsoft Teams msteams Bot Framework webhook yes involved: an Azure bot registration
Google Chat googlechat Chat app HTTP endpoint yes involved: a Google Cloud project
iMessage bluebubbles a BlueBubbles server on a Mac yes moderate: a Mac that stays on
Web chat web Habakkuk's own HTTP server no easy, in habakkuk setup
LINE line webhook yes moderate
Mattermost mattermost WebSocket + REST no easy
IRC irc TLS, SASL PLAIN no easy
ntfy ntfy JSON stream + publish no easy
Messenger messenger webhook + Graph API yes involved: a Meta app
Instagram instagram webhook + Graph API yes involved: a Meta app
Feishu / Lark feishu event subscription + IM API yes moderate
DingTalk dingtalk robot HTTP callback yes moderate
WeCom wecom app callback + message API yes moderate
Zulip zulip event queue long-poll + REST no easy
Rocket.Chat rocketchat realtime API + REST no easy
Nextcloud Talk nextcloudtalk Talk bot webhook yes moderate
Twitch chat twitch IRC over TLS no easy

What has been tested live#

Three channels have run against the real service so far:

  • WhatsApp linked device (whatsapp), linked to a real account.
  • WhatsApp agents (whatsappagent).
  • Slack over Socket Mode (slack), including two Slack apps side by side.

The web chat is Habakkuk's own HTTP server, so its tests exercise the real thing.

Every other channel in the table is built against the platform's documented API and tested here with a fake platform server. None of them has run against the real service yet. Expect rough edges there, and please report what you find with the output of habakkuk logs -level warn -since 1h.

How channels work#

  • Who may talk. Direct messages from someone not in allow_from get a pairing code that you approve with habakkuk pair CODE. See Access, groups and delivery.
  • Groups. In groups the bot answers only when addressed (a mention, a reply, or the platform's equivalent). groups: all answers everything; off ignores groups.
  • One conversation, one session. Each chat (and each thread, where the platform has them) is a conversation with its own session. A fresh session starts after 24 hours of silence or when you send /new.
  • Exactly once. A redelivered message never runs twice, a reply is delivered once, and a long reply resumes at the first unsent chunk after a crash.
  • Replies keep their context. When you reply to (quote) a message, the agent sees what you quoted. Messages that reached the chat from elsewhere, such as a scheduled task's result or another agent's question, are shown to the agent on your next message. See Access, groups and delivery and Sessions.
  • Supervised. Every adapter runs under a supervisor that restarts it with backoff and tears down a connection that stays silent too long.
  • Several at once. Run as many channels as you like, of the same or different types, and route each one (or each conversation) to a different agent.

Next steps#

In this section