Home / Docs / Channel Setup

Channel Setup

Zubo connects to multiple messaging platforms simultaneously. All channels share the same agent personality, memory, tools, and skills. Messages from any channel are routed through the unified agent loop — so your agent behaves consistently whether someone messages it on Telegram, Discord, Slack, WhatsApp, Signal, or the built-in web chat.

Web Chat (Always On)

The web chat channel is enabled by default and requires no configuration. When Zubo starts, it serves a full-featured chat interface and dashboard at http://localhost:<port>.

Configuration:

{
  "channels": {
    "webchat": { "enabled": true, "port": 3000 }
  }
}

Or set the port via CLI:

zubo config set channels.webchat.port 3000

Telegram

Connect Zubo to Telegram so you can chat with your agent from the Telegram app on any device.

Setup Steps

  1. Open Telegram and search for @BotFather
  2. Send /newbot and follow the prompts to create a new bot. BotFather will give you a bot token (e.g., 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11)
  3. Add the token to your Zubo config:
    zubo config set channels.telegram.botToken "123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
  4. (Optional) Restrict access to specific Telegram users by their numeric user ID:
    {
      "channels": {
        "telegram": {
          "botToken": "123456:ABC-DEF...",
          "allowedUsers": [12345678]
        }
      }
    }
  5. Restart Zubo: zubo restart

Getting your Telegram user ID: search for @userinfobot on Telegram and send it any message. It will reply with your numeric user ID.

Config Fields

FieldTypeDefaultDescription
enabledbooleantrueEnable or disable the Telegram channel
botTokenstringBot token from BotFather
allowedUsersnumber[][]Telegram user IDs allowed to message. Empty array means anyone can message.

Discord

Add Zubo as a Discord bot so it can respond to messages in your server.

Setup Steps

  1. Go to the Discord Developer Portal
  2. Click New Application and give it a name
  3. Go to the Bot section in the left sidebar, then click Reset Token to generate a bot token. Copy and save it.
  4. Still in the Bot section, scroll down to Privileged Gateway Intents and enable Message Content Intent
  5. Go to OAuth2 → URL Generator in the left sidebar. Select the bot scope, then check the Send Messages and Read Message History permissions.
  6. Copy the generated URL at the bottom and open it in your browser to invite the bot to your server
  7. Add the token to your Zubo config:
    zubo config set channels.discord.botToken "MTk4NjIz..."
  8. Restart Zubo: zubo restart

Config Fields

FieldTypeDefaultDescription
enabledbooleantrueEnable or disable the Discord channel
botTokenstringBot token from the Discord Developer Portal
allowedUsersstring[][]Discord user IDs allowed to message. Empty array means anyone can message.

Slack

Connect Zubo to your Slack workspace using Socket Mode for real-time communication without exposing a public URL.

Setup Steps

  1. Go to api.slack.com/apps and click Create New App. Choose "From scratch" and select your workspace.
  2. In the left sidebar, go to Settings → Socket Mode and enable it
  3. When prompted, generate an App-Level Token with the connections:write scope. Copy this token (it starts with xapp-).
  4. Go to OAuth & Permissions in the left sidebar. Under Bot Token Scopes, add: chat:write, app_mentions:read, im:history, im:read, im:write
  5. Click Install to Workspace at the top of the page and authorize. Copy the Bot User OAuth Token (it starts with xoxb-).
  6. Add both tokens to your Zubo config:
    {
      "channels": {
        "slack": {
          "botToken": "xoxb-...",
          "appToken": "xapp-...",
          "allowedUsers": []
        }
      }
    }
  7. Restart Zubo: zubo restart

Config Fields

FieldTypeDefaultDescription
enabledbooleantrueEnable or disable the Slack channel
botTokenstringBot User OAuth Token (starts with xoxb-)
appTokenstringApp-Level Token (starts with xapp-)
allowedUsersstring[][]Slack user IDs allowed to message. Empty array means anyone in the workspace can message.

WhatsApp

Zubo connects to WhatsApp using the Baileys library, which provides an unofficial WhatsApp Web API. No Meta Business account or phone number API is required — it works by linking as a companion device to your existing WhatsApp account.

Setup Steps

  1. Add WhatsApp to your Zubo config:
    {
      "channels": {
        "whatsapp": { "enabled": true }
      }
    }
  2. Start (or restart) Zubo. A QR code will appear in your terminal.
  3. On your phone, open WhatsApp → Settings → Linked Devices → Link a Device
  4. Scan the QR code displayed in the terminal
  5. Once linked, Zubo will respond to incoming WhatsApp messages

Config Fields

FieldTypeDefaultDescription
enabledbooleantrueEnable or disable the WhatsApp channel
authDirstringautoDirectory where WhatsApp authentication credentials are stored. Defaults to a directory inside ~/.zubo.
allowedNumbersstring[][]Phone numbers allowed to message, in international format (e.g., "+1234567890"). Empty array means anyone can message.

Signal

Connect Zubo to Signal using signal-cli, a command-line interface for the Signal messenger.

Setup Steps

  1. Install signal-cli on your system:
    # macOS
    brew install signal-cli
    
    # Linux (download from GitHub releases)
    # See: https://github.com/AsamK/signal-cli/releases
  2. Register your phone number with Signal:
    signal-cli -u +1234567890 register
  3. Verify the number with the SMS code you receive:
    signal-cli -u +1234567890 verify 123-456
  4. Add Signal to your Zubo config:
    {
      "channels": {
        "signal": {
          "phoneNumber": "+1234567890",
          "signalCliPath": "/usr/local/bin/signal-cli",
          "allowedNumbers": ["+1987654321"]
        }
      }
    }
  5. Restart Zubo: zubo restart

Config Fields

FieldTypeDefaultDescription
enabledbooleantrueEnable or disable the Signal channel
phoneNumberstringYour registered Signal phone number in international format
signalCliPathstringautoPath to the signal-cli binary. Zubo will attempt to find it automatically if not specified.
allowedNumbersstring[][]Phone numbers allowed to message. Empty array means anyone can message.

Running Multiple Channels

Zubo is designed to run all channels simultaneously. There is no limit to how many channels you can enable at once.

Channel Security

Controlling who can interact with your agent is critical, especially for public-facing deployments.

Best Practices