/** Chat transports guide — Matrix, Slack, WhatsApp, Discord, and web UI setup. */ import type { Metadata } from 'next' import Link from 'next/link' /** Page metadata for the chat transports guide. */ export const metadata: Metadata = { title: 'Chat Transports — Huskies Docs', description: 'Connect huskies to Matrix, WhatsApp, Slack, Discord, or the built-in web UI.', } /** Renders the chat transports setup guide for all supported platforms. */ export default function TransportsPage() { return ( <>
Huskies can be controlled via bot commands in any of five transports. Only one external transport can be active at a time. The web UI is always available regardless.
.huskies/bot.toml and fill in your credentials. The file is gitignored. Restart
huskies after changes.
The built-in web interface is always available at http://localhost:<port>. No
configuration required. It provides:
No bot.toml is required for the web UI. If no transport is configured, huskies runs
in web-only mode.
Matrix uses the Matrix Client-Server API with long-polling sync. No public webhook URL is required — the bot connects outbound to your homeserver.
@huskies:example.com).
cp .huskies/bot.toml.matrix.example .huskies/bot.toml
| Key | Description |
|---|---|
| homeserver |
Your Matrix homeserver URL (e.g. https://matrix.example.com).
|
| username |
Bot account Matrix ID (e.g. @huskies:example.com).
|
| password | Bot account password. |
| room_ids |
List of room IDs to listen in (e.g. {`["!roomid:example.com"]`}).
|
| allowed_users | Matrix IDs allowed to interact. Empty list means nobody — always set this. |
| ambient_rooms |
Rooms where the bot responds to all messages (not just addressed ones). Updated automatically
by ambient on/off.
|
Slack uses event subscriptions over a webhook. You'll need a public HTTPS URL pointing to your huskies server.
chat:write, chat:update.
message.channels, message.groups,{' '}
message.im.
https://your-server/webhook/slack
cp .huskies/bot.toml.slack.example .huskies/bot.toml
| Key | Description |
|---|---|
| slack_bot_token |
OAuth bot token starting with xoxb-.
|
| slack_signing_secret | Signing secret from the app's Basic Information page. |
| slack_channel_ids |
List of channel IDs to listen in (e.g. {`["C01ABCDEF"]`}).
|
Connects huskies to WhatsApp Business via the Meta Cloud API. Requires a Meta Business account and a public webhook URL.
https://your-server/webhook/whatsapp
cp .huskies/bot.toml.whatsapp-meta.example .huskies/bot.toml
| Key | Description |
|---|---|
| whatsapp_provider |
Set to "meta" for the Meta Cloud API.
|
| whatsapp_phone_number_id | Phone Number ID from the Meta dashboard. |
| whatsapp_access_token | Permanent access token. |
| whatsapp_verify_token | Webhook verify token — must match what you set in Meta's dashboard. |
| whatsapp_allowed_phones |
Optional. List of phone numbers allowed to interact (e.g.{' '}
{`["+15551234567"]`}). When absent, all numbers are allowed.
|
| whatsapp_notification_template |
Optional. Name of the approved Meta message template for out-of-window notifications
(default: "pipeline_notification").
|
An alternative WhatsApp integration using Twilio's WhatsApp API. Requires a Twilio account.
cp .huskies/bot.toml.whatsapp-twilio.example .huskies/bot.toml
Set whatsapp_provider = "twilio" and fill in your Twilio account SID, auth
token, and phone numbers. The webhook URL is the same:{' '}
https://your-server/webhook/whatsapp.
Connects huskies to Discord using the Discord Gateway WebSocket. No public webhook URL required — the bot connects outbound.
bot scope with permissions: Send
Messages, Read Message History, Manage Messages.
cp .huskies/bot.toml.discord.example .huskies/bot.toml
| Key | Description |
|---|---|
| discord_bot_token | Bot token from the Discord developer portal. |
| discord_channel_ids |
List of channel IDs to listen in (e.g.{' '}
{`["123456789012345678"]`}).
|
| discord_allowed_users | Optional. Discord user IDs allowed to interact. When absent, all users in configured channels can interact. |
When using huskies --gateway, you can configure the gateway bot to receive
notifications from all registered projects in a single room. Events are prefixed
with [project-name].
No additional transport is required — the gateway aggregated stream works with any of the
transports above. Configure the gateway's .huskies/bot.toml with your transport
credentials and set aggregated_notifications_enabled = true (the default). See{' '}
Configuration → Gateway aggregated stream
{' '}
for the full reference.
projects.toml does not require editing per-project bot configs — the gateway
picks it up automatically.