Every channel implements the same Go interface. Enable, configure, and forget — the gateway handles the rest.
Full Telegram bot using gopkg.in/telebot.v3 long-polling. Handles text, photos, and document uploads with multi-account support.
# Get token from @BotFather channels: telegram: enabled: true adapter: telegram accounts: - id: main token: "${TELEGRAM_BOT_TOKEN}"
/newbotTELEGRAM_BOT_TOKEN env varenabled: true in config.yamlDiscord bot using discordgo. Listens to guild and DM messages. Respects guild/DM intents and ignores its own messages to prevent loops.
# discord.com/developers → Application → Bot channels: discord: enabled: true adapter: discord accounts: - id: main token: "${DISCORD_BOT_TOKEN}"
Pure HTTP webhook adapter — no Slack SDK. Listens on :3000/slack/events. Handles URL verification challenge automatically and ignores bot messages.
# Point Slack Events API to /slack/events channels: slack: enabled: true adapter: slack accounts: - id: main token: "${SLACK_BOT_TOKEN}"
message.channelshttps://yourhost:3000/slack/eventsMeta Cloud API webhook on :3001/whatsapp/events. Handles GET verify challenge and POST message events. Sends replies via the Messages API.
channels:
whatsapp:
enabled: true
adapter: whatsapp
options:
verify_token: "${WHATSAPP_VERIFY_TOKEN}"
accounts:
- id: main
token: "${WHATSAPP_ACCESS_TOKEN}"
name: "${WHATSAPP_PHONE_NUMBER_ID}"
/whatsapp/eventsBridges the signal-cli-rest-api project. Supports both webhook mode (push) and polling mode (2-second GET loop). Account name is your phone number.
# Run: docker run -p 8080:8080 bbernhard/signal-cli-rest-api channels: signal: enabled: true adapter: signal options: base_url: "http://localhost:8080" mode: "webhook" accounts: - id: main name: "+15551234567"
webhook or pollingRaw TCP IRC connection to irc.chat.twitch.tv:6667. Zero external dependencies. Handles PING/PONG keepalive and auto-reconnects on drop. Account name = channels to join.
# Token format: "oauth:your_token_here" channels: twitch: enabled: true adapter: twitch accounts: - id: main token: "${TWITCH_OAUTH_TOKEN}" name: "mychannel,otherchannel"
chat:read and chat:edit scopesname to comma-separated list of channels to joinPure HTTP long-polling via /_matrix/client/v3/sync. Auto-joins invited rooms. Skips own messages. Account name is the homeserver URL.
channels:
matrix:
enabled: true
adapter: matrix
accounts:
- id: main
token: "${MATRIX_ACCESS_TOKEN}"
name: "https://matrix.org"
name to your homeserver URLBridges Apple iMessage via the BlueBubbles server. Webhook on :3003/imessage/events. Requires a Mac with iMessage signed in.
# Requires BlueBubbles on a Mac — bluebubbles.app channels: imessage: enabled: true adapter: imessage accounts: - id: main token: "${BLUEBUBBLES_PASSWORD}" name: "http://192.168.1.10:1234"
/imessage/eventsname to your BlueBubbles server URLPolls your Obsidian vault via the Local REST API community plugin. Detects modified notes and appends AI responses under a configurable heading. Skips notes that already have a response.
channels:
obsidian:
enabled: true
adapter: obsidian
options:
poll_interval: "5s"
watch_folder: "Inbox"
response_heading: "## AI Response"
skip_tls_verify: true
accounts:
- id: main
token: "${OBSIDIAN_API_KEY}"
name: "https://127.0.0.1:27124"
watch_folder to the folder you want monitoredFull MQTT 3.1.1 client written from scratch with Go stdlib. No external broker library. IoT devices publish to devices/{id}/messages, AI responds to devices/{id}/responses.
# Mosquitto: brew install mosquitto channels: mqtt: enabled: true adapter: mqtt options: broker: "tcp://localhost:1883" client_id: "superfastclaw" username: "${MQTT_USERNAME}" password: "${MQTT_PASSWORD}" qos: 1
devices/{device_id}/messagesdevices/{device_id}/responses