Detailed guide for obtaining credentials and configuring connections for 13+ channel backends.
xbot supports 13 channel backends. Configure via the interactive CLI or edit config.json manually.
xbot config --channel # Interactive setup
xbot channels list # List all channels
xbot channels status # Show enabled/disabled
xbot channels setup slack # Credential instructions
Global delivery behavior settings applying to all channels:
{
"channels": {
"sendProgress": true,
"sendToolHints": false,
"sendMaxRetries": 3
}
}
| Setting | Default | Description |
|---|---|---|
sendProgress | true | Send task progress updates to channel |
sendToolHints | false | false = muted notice on first tool call + batch every 10; true = every tool call |
sendMaxRetries | 3 | Exponential backoff retry count (1s, 2s, 4s...) |
Slack supports two modes: Socket Mode (no public URL needed) and Webhook mode.
Go to api.slack.com/apps and create an app
Under OAuth & Permissions, add Bot Scopes: chat:write, channels:read, channels:history
Install to workspace, copy Bot Token (xoxb-...)
Socket Mode: Enable on Socket Mode page and create App Token (xapp-...)
{
"channels": {
"slack": {
"enabled": true,
"mode": "socket",
"allowFrom": ["*"],
"botToken": "xoxb-...",
"appToken": "xapp-...",
"replyInThread": true,
"groupPolicy": "mention"
}
}
}
Socket Mode does not require signingSecret or a public webhook URL.
Find @BotFather in Telegram
Send /newbot to create a bot, receive the token
Set webhook URL to https://<your-domain>/telegram/webhook
{
"channels": {
"telegram": {
"enabled": true,
"allowFrom": ["*"],
"token": "<bot-token>",
"webhookPath": "/telegram/webhook",
"webhookSecret": "optional-secret",
"replyToMessage": true,
"groupPolicy": "mention"
}
}
}
Go to discord.com/developers/applications, create an app
Bot page → Add Bot → copy token
Enable Message Content Intent (Privileged Gateway Intents)
OAuth2 URL Generator → bot scope + Send Messages → invite to server
{
"channels": {
"discord": {
"enabled": true,
"allowFrom": ["*"],
"botToken": "<bot-token>",
"groupPolicy": "mention"
}
}
}
Go to open.feishu.cn and create a custom app
Copy App ID and App Secret
Configure request URL in event subscription
{
"channels": {
"feishu": {
"enabled": true,
"allowFrom": ["*"],
"appId": "cli_xxx",
"appSecret": "...",
"verificationToken": "...",
"webhookPath": "/feishu/events",
"groupPolicy": "mention",
"replyToMessage": true,
"reactEmoji": "THUMBSUP"
}
}
}
Go to open-dev.dingtalk.com and create a robot app
Copy Client ID (AppKey), Client Secret (AppSecret), and Robot Code
{
"channels": {
"dingtalk": {
"enabled": true,
"allowFrom": ["*"],
"clientId": "<AppKey>",
"clientSecret": "<AppSecret>",
"robotCode": "<Robot Code>"
}
}
}
Create a bot account on your Matrix homeserver
Obtain access token (e.g., via Element: Settings > Help & About)
Invite the bot to rooms where it should respond
{
"channels": {
"matrix": {
"enabled": true,
"allowFrom": ["*"],
"homeserverUrl": "https://matrix.example.com",
"accessToken": "<token>",
"userId": "@bot:example.com"
}
}
}
End-to-end encrypted rooms (m.room.encrypted) are not supported.
Log in to work.weixin.qq.com admin console
App Management → Create self-built application
Copy Corp ID, Agent ID, and Secret
{
"channels": {
"wecom": {
"enabled": true,
"allowFrom": ["*"],
"corpId": "<corp-id>",
"agentId": "<agent-id>",
"secret": "<secret>"
}
}
}
WeChat uses HTTP long-poll with QR code login. No token needed upfront.
Enable the channel in config.json
Run xbot channels login weixin — a QR code URL will be printed
Scan the QR code in WeChat to authorize
{
"channels": {
"weixin": {
"enabled": true,
"allowFrom": ["*"]
}
}
}
Go to q.qq.com and register as QQ Bot developer
Create bot application, obtain App ID and Secret
{
"channels": {
"qq": {
"enabled": true,
"allowFrom": ["*"],
"appId": "<app-id>",
"secret": "<secret>"
}
}
}
{
"channels": {
"mochat": {
"enabled": true,
"allowFrom": ["*"],
"baseUrl": "https://your-instance.com",
"clawToken": "<token>",
"sessions": ["session-id-1"],
"panels": []
}
}
}
Email uses IMAP polling for receiving + SMTP for sending. No public webhook needed.
{
"channels": {
"email": {
"enabled": true,
"allowFrom": ["*"],
"imapHost": "imap.example.com",
"imapPort": 993,
"imapUsername": "bot@example.com",
"imapPassword": "...",
"imapUseSsl": true,
"smtpHost": "smtp.example.com",
"smtpPort": 587,
"smtpUsername": "bot@example.com",
"smtpPassword": "...",
"smtpUseTls": true,
"fromAddress": "bot@example.com",
"pollIntervalSeconds": 30
}
}
}
WhatsApp connects via a Node.js Baileys bridge over WebSocket.
Install Node.js v18+
Clone Baileys bridge: git clone https://github.com/nicepkg/whatsapp-bridge
cd whatsapp-bridge && npm install && npm start
Scan the QR code displayed in the bridge terminal
{
"channels": {
"whatsapp": {
"enabled": true,
"allowFrom": ["*"],
"bridgeUrl": "ws://localhost:3001",
"bridgeToken": "",
"groupPolicy": "open"
}
}
}
The Baileys bridge must be running before xbot run.