Skip to content

Channel Overview

Channels are how Human receives and sends messages. Each channel implements the hu_channel_t vtable.

Method Description
start Start listening (e.g. long-poll, WebSocket)
stop Stop listening
send Send a message to a target
name Channel identifier
health_check Report channel health
send_event Optional: streaming send with stage
start_typing / stop_typing Optional: typing indicators
Channel Build flag Description
CLI HU_ENABLE_CLI (default ON) Terminal chat, always available
Telegram HU_ENABLE_TELEGRAM Telegram Bot API
Discord HU_ENABLE_DISCORD Discord bot
Slack HU_ENABLE_SLACK Slack app (Socket mode, events)
Signal HU_ENABLE_SIGNAL Signal via signal-cli
Nostr HU_ENABLE_NOSTR Nostr DMs (nak)
WhatsApp HU_ENABLE_WHATSAPP WhatsApp Business API
Matrix HU_ENABLE_MATRIX Matrix.org
IRC HU_ENABLE_IRC IRC
Line HU_ENABLE_LINE LINE
Lark HU_ENABLE_LARK Lark/Feishu
OneBot HU_ENABLE_ONEBOT OneBot protocol
DingTalk HU_ENABLE_DINGTALK DingTalk
Email HU_ENABLE_EMAIL Email
Web HU_ENABLE_WEB WebSocket web UI
iMessage HU_ENABLE_IMESSAGE Apple iMessage
Mattermost HU_ENABLE_MATTERMOST Mattermost
QQ HU_ENABLE_QQ QQ
MaixCam HU_ENABLE_MAIXCAM MaixCam board
Dispatch HU_ENABLE_DISPATCH Dispatch/router

Enable all at once: -DHU_ENABLE_ALL_CHANNELS=ON

Channels use an allowlist for access control:

  • Empty allowlist — Deny all (no one can interact)
  • "*" — Allow all
  • List of IDs — Exact match only (e.g. Telegram user IDs, Discord user IDs)

Example (Telegram):

{
"channels": {
"telegram": [
{
"token": "123456:ABC...",
"allow_from": ["123456789", "987654321"]
}
]
}
}

allow_from empty or omitted = allow all. allow_from: ["*"] = allow all. allow_from: ["123"] = only user 123.

When using the gateway (human gateway), incoming webhooks are routed by path:

Path Channel
/webhook/telegram Telegram
/webhook/slack Slack
/webhook/discord Discord
/webhook/whatsapp WhatsApp
/webhook/line LINE
/webhook/lark Lark
/telegram Telegram (legacy)
/slack/events Slack events
/whatsapp WhatsApp
/line LINE
/lark Lark
/discord Discord

Use a tunnel (ngrok, cloudflared) to expose the gateway to the internet for webhook delivery.