Skip to main content

Overview

OrcBot supports multiple communication channels with per-channel configuration for auto-reply, admin permissions, and channel-specific features.

Telegram

Basic Configuration

telegramToken
string
Telegram bot token obtained from @BotFather.Policy: LOCKED - Critical authentication credential.Environment variable: TELEGRAM_TOKEN
telegramAutoReplyEnabled
boolean
default:false
Enable automatic replies to all messages without requiring /commands.

Getting Started

1

Create a bot with BotFather

  1. Open Telegram and search for @BotFather
  2. Send /newbot and follow the prompts
  3. Copy the bot token provided
2

Configure OrcBot

orcbot.config.yaml
telegramToken: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
telegramAutoReplyEnabled: true
Or use environment variable:
.env
TELEGRAM_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
3

Start the bot

orcbot run
4

Find your user ID

Send a message to your bot, then check logs or use the /admin command to see your Telegram user ID.
5

Add yourself as admin

orcbot.config.yaml
adminUsers:
  telegram:
    - "123456789"  # Your Telegram user ID

Commands

telegramCommands
array
List of available Telegram commands displayed in the bot menu.
telegramCommands:
  - command: status
    description: Check agent health and current activity
  - command: queue
    description: View pending and active tasks
  - command: cancel
    description: Cancel the current running task
  - command: reset
    description: Reset conversation context
  - command: models
    description: List available LLM models
  - command: help
    description: Show all available commands

Rich Features

OrcBot provides enhanced Telegram UX through specialized skills:

Inline Buttons

Send messages with interactive inline keyboard buttons.
telegram_send_buttons(chatId, "Choose an option:", [["Yes", "No"]])

Polls

Create native Telegram polls.
telegram_send_poll(chatId, "Favorite color?", ["Red", "Blue", "Green"])

Reactions

React with emoji (falls back to reply if blocked).
telegram_react(chatId, messageId, "👍")

Message Editing

Edit previously sent messages.
telegram_edit_message(chatId, messageId, "Updated text")

Pin Messages

Pin important messages in chats.
telegram_pin_message(chatId, messageId)

Progress Indicators

Show typing indicators during processing.
progressFeedbackTypingOnly: true

Example Configuration

orcbot.config.yaml
# Telegram Configuration
telegramToken: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
telegramAutoReplyEnabled: true

# Admin users
adminUsers:
  telegram:
    - "123456789"
    - "987654321"

# Autonomy settings
autonomyAllowedChannels:
  - telegram

# Progress feedback
progressFeedbackEnabled: true
progressFeedbackTypingOnly: true

WhatsApp

Basic Configuration

whatsappEnabled
boolean
default:false
Enable WhatsApp channel integration.Policy: LOCKED - Channel configuration affects system architecture.
whatsappSessionPath
string
default:"~/.orcbot/whatsapp-session"
Path to WhatsApp session storage directory (for Baileys multi-device).
whatsappAutoReplyEnabled
boolean
default:false
Enable automatic replies to all WhatsApp messages.
whatsappOwnerJID
string
Owner JID for WhatsApp (format: 1234567890@s.whatsapp.net).

Feature Flags

whatsappStatusReplyEnabled
boolean
default:false
Enable replies to WhatsApp status updates.
whatsappAutoReactEnabled
boolean
default:false
Enable automatic reactions to messages.
whatsappContextProfilingEnabled
boolean
default:false
Enable context profiling for better conversation understanding.

Getting Started

1

Enable WhatsApp

orcbot.config.yaml
whatsappEnabled: true
whatsappAutoReplyEnabled: true
2

Start OrcBot

orcbot run
A QR code will be displayed in the terminal.
3

Scan QR code

  1. Open WhatsApp on your phone
  2. Go to Settings → Linked Devices
  3. Tap “Link a Device”
  4. Scan the QR code shown in the terminal
4

Find your JID

Send a message to the bot, then check logs for your JID (format: 1234567890@s.whatsapp.net).
5

Set owner and admins

orcbot.config.yaml
whatsappOwnerJID: 1234567890@s.whatsapp.net

adminUsers:
  whatsapp:
    - "1234567890@s.whatsapp.net"

Multi-Modal Support

WhatsApp channels support:
  • Text messages - Standard text communication
  • Voice notes - Send TTS-generated voice messages
  • Images - Send and analyze images
  • Documents - Send files and documents
  • Reactions - React to messages with emoji

Example Configuration

orcbot.config.yaml
# WhatsApp Configuration
whatsappEnabled: true
whatsappAutoReplyEnabled: true
whatsappSessionPath: ~/.orcbot/whatsapp-session
whatsappOwnerJID: 1234567890@s.whatsapp.net
whatsappStatusReplyEnabled: false
whatsappAutoReactEnabled: true
whatsappContextProfilingEnabled: true

# Admin users
adminUsers:
  whatsapp:
    - "1234567890@s.whatsapp.net"

# Autonomy
autonomyAllowedChannels:
  - whatsapp
WhatsApp uses the Baileys library which requires a persistent session. Do not delete the whatsappSessionPath directory or you’ll need to re-link the device.

Discord

Basic Configuration

discordToken
string
Discord bot token obtained from the Discord Developer Portal.Policy: LOCKED - Critical authentication credential.Environment variable: DISCORD_TOKEN
discordAutoReplyEnabled
boolean
default:false
Enable automatic replies to all messages (not just mentions).

Getting Started

1

Create Discord application

  1. Go to Discord Developer Portal
  2. Click “New Application”
  3. Name your bot and create it
2

Create bot user

  1. Go to the “Bot” section
  2. Click “Add Bot”
  3. Enable these Privileged Gateway Intents:
    • Presence Intent
    • Server Members Intent
    • Message Content Intent (required)
3

Get bot token

Under the “Bot” section, click “Reset Token” and copy the token.
4

Configure OrcBot

orcbot.config.yaml
discordToken: MTIzNDU2Nzg5MDEyMzQ1Njc4OQ.GaBcDe.FgHiJkLmNoPqRsTuVwXyZ123456789
discordAutoReplyEnabled: true
Or use environment variable:
.env
DISCORD_TOKEN=MTIzNDU2Nzg5MDEyMzQ1Njc4OQ.GaBcDe.FgHiJkLmNoPqRsTuVwXyZ123456789
5

Invite bot to server

  1. Go to “OAuth2” → “URL Generator”
  2. Select scopes: bot, applications.commands
  3. Select permissions: Send Messages, Read Messages, Attach Files
  4. Copy the generated URL and open it to invite the bot
6

Find your user ID

  1. Enable Developer Mode in Discord (Settings → Advanced)
  2. Right-click your username and select “Copy User ID”
7

Add yourself as admin

orcbot.config.yaml
adminUsers:
  discord:
    - "123456789012345678"

Example Configuration

orcbot.config.yaml
# Discord Configuration
discordToken: MTIzNDU2Nzg5MDEyMzQ1Njc4OQ.GaBcDe.FgHiJkLmNoPqRsTuVwXyZ123456789
discordAutoReplyEnabled: true

# Admin users
adminUsers:
  discord:
    - "123456789012345678"

# Autonomy
autonomyAllowedChannels:
  - discord
Message Content Intent is required. Without it, the bot cannot read message content. Enable it in the Discord Developer Portal under Bot → Privileged Gateway Intents.

Slack

Basic Configuration

slackBotToken
string
Slack bot token (starts with xoxb-).Policy: LOCKED - Critical authentication credential.Environment variable: SLACK_BOT_TOKEN
slackAppToken
string
Slack app-level token for Socket Mode (starts with xapp-).Policy: LOCKED - Critical authentication credential.Environment variable: SLACK_APP_TOKEN
slackSigningSecret
string
Slack signing secret for webhook verification.Policy: LOCKED - Critical authentication credential.Environment variable: SLACK_SIGNING_SECRET
slackAutoReplyEnabled
boolean
default:false
Enable automatic replies to all messages (not just mentions).

Getting Started

1

Create Slack app

  1. Go to Slack API
  2. Click “Create New App” → “From scratch”
  3. Name your app and select a workspace
2

Enable Socket Mode

  1. Go to “Socket Mode” in the sidebar
  2. Enable Socket Mode
  3. Generate an app-level token with connections:write scope
  4. Copy the token (starts with xapp-)
3

Configure bot scopes

Go to “OAuth & Permissions” → “Scopes” and add:
  • chat:write - Send messages
  • channels:read - View channels
  • channels:history - Read messages in public channels
  • groups:history - Read messages in private channels
  • im:history - Read direct messages
  • mpim:history - Read group messages
  • users:read - View users
  • files:write - Upload files
4

Enable event subscriptions

  1. Go to “Event Subscriptions”
  2. Enable events
  3. Subscribe to bot events:
    • message.channels
    • message.groups
    • message.im
    • message.mpim
5

Install to workspace

  1. Go to “Install App”
  2. Click “Install to Workspace”
  3. Copy the Bot User OAuth Token (starts with xoxb-)
6

Get signing secret

Go to “Basic Information” → “App Credentials” and copy the Signing Secret.
7

Configure OrcBot

orcbot.config.yaml
slackBotToken: xoxb-your-bot-token
slackAppToken: xapp-your-app-token
slackSigningSecret: your-signing-secret
slackAutoReplyEnabled: true
Or use environment variables:
.env
SLACK_BOT_TOKEN=xoxb-your-bot-token
SLACK_APP_TOKEN=xapp-your-app-token
SLACK_SIGNING_SECRET=your-signing-secret
8

Find your user ID

  1. Click on your profile in Slack
  2. Click “More” → “Copy member ID”
9

Add yourself as admin

orcbot.config.yaml
adminUsers:
  slack:
    - "U0123456789"

Example Configuration

orcbot.config.yaml
# Slack Configuration
slackBotToken: xoxb-1234567890-1234567890-abcdefghijklmnopqrstuvwx
slackAppToken: xapp-1-ABCD-1234567890-1234567890-abcdefghijklmnopqrstuvwxyz
slackSigningSecret: 1234567890abcdefghijklmnopqrstuv
slackAutoReplyEnabled: true

# Admin users
adminUsers:
  slack:
    - "U0123456789"

# Autonomy
autonomyAllowedChannels:
  - slack
OrcBot uses Socket Mode for Slack, which doesn’t require exposing a public endpoint. This makes it easier to run behind firewalls.

Email

Basic Configuration

emailEnabled
boolean
default:false
Enable email channel integration (SMTP + IMAP).
emailAutoReplyEnabled
boolean
default:false
Enable automatic replies to incoming emails.
emailAddress
string
Email address for the bot.Environment variable: EMAIL_ADDRESS
emailFromName
string
Display name for outgoing emails.
emailDefaultSubject
string
default:"OrcBot response"
Default subject line for outgoing emails.
emailSocketTimeoutMs
number
default:15000
Socket timeout for email operations in milliseconds.Environment variable: EMAIL_SOCKET_TIMEOUT_MS

SMTP Configuration (Sending)

smtpHost
string
SMTP server hostname (e.g., smtp.gmail.com).Environment variable: SMTP_HOST
smtpPort
number
default:587
SMTP server port (587 for TLS, 465 for SSL).Environment variable: SMTP_PORT
smtpSecure
boolean
default:false
Use SSL/TLS for SMTP connection (port 465).Environment variable: SMTP_SECURE
smtpStartTls
boolean
default:true
Use STARTTLS for SMTP connection (port 587).Environment variable: SMTP_STARTTLS
smtpUsername
string
SMTP authentication username.Environment variable: SMTP_USERNAME
smtpPassword
string
SMTP authentication password.Environment variable: SMTP_PASSWORD

IMAP Configuration (Receiving)

imapHost
string
IMAP server hostname (e.g., imap.gmail.com).Environment variable: IMAP_HOST
imapPort
number
default:993
IMAP server port (993 for SSL).Environment variable: IMAP_PORT
imapSecure
boolean
default:true
Use SSL for IMAP connection.Environment variable: IMAP_SECURE
imapUsername
string
IMAP authentication username.Environment variable: IMAP_USERNAME
imapPassword
string
IMAP authentication password.Environment variable: IMAP_PASSWORD

Example Configuration (Gmail)

1

Create app password

  1. Go to Google Account Security
  2. Enable 2-Step Verification if not already enabled
  3. Go to “App passwords”
  4. Generate a new app password for “Mail”
2

Configure OrcBot

orcbot.config.yaml
# Email Configuration
emailEnabled: true
emailAutoReplyEnabled: true
emailAddress: yourbot@gmail.com
emailFromName: OrcBot

# SMTP (Sending)
smtpHost: smtp.gmail.com
smtpPort: 587
smtpStartTls: true
smtpUsername: yourbot@gmail.com
smtpPassword: your-app-password

# IMAP (Receiving)
imapHost: imap.gmail.com
imapPort: 993
imapSecure: true
imapUsername: yourbot@gmail.com
imapPassword: your-app-password
Or use environment variables:
.env
EMAIL_ADDRESS=yourbot@gmail.com
SMTP_HOST=smtp.gmail.com
SMTP_USERNAME=yourbot@gmail.com
SMTP_PASSWORD=your-app-password
IMAP_HOST=imap.gmail.com
IMAP_USERNAME=yourbot@gmail.com
IMAP_PASSWORD=your-app-password
3

Add admins

orcbot.config.yaml
adminUsers:
  email:
    - "admin@example.com"
Use app-specific passwords. Most email providers require app-specific passwords for third-party applications. Do not use your main account password.

Admin Permissions

adminUsers
object
Per-channel admin user allowlists. Admins have access to elevated commands and skills.Policy: LOCKED - Security-critical configuration.
adminUsers:
  telegram:
    - "123456789"
    - "987654321"
  whatsapp:
    - "1234567890@s.whatsapp.net"
  discord:
    - "123456789012345678"
  slack:
    - "U0123456789"
  email:
    - "admin@example.com"

Admin-Only Skills

These skills require admin privileges:
  • run_command - Execute shell commands
  • create_custom_skill - Create executable plugins
  • manage_config - Modify configuration
  • spawn_agent - Create worker agents
  • delegate_task - Orchestrate tasks
  • system_check - Verify system dependencies
  • self_repair_skill - Repair broken plugins
Admin status is checked per-channel. A user who is admin on Telegram is not automatically admin on Discord.

Multi-Channel Strategy

Configure multiple channels simultaneously:
orcbot.config.yaml
# All channels enabled
telegramToken: your-telegram-token
telegramAutoReplyEnabled: true

whatsappEnabled: true
whatsappAutoReplyEnabled: true

discordToken: your-discord-token
discordAutoReplyEnabled: true

slackBotToken: your-slack-bot-token
slackAppToken: your-slack-app-token
slackSigningSecret: your-signing-secret
slackAutoReplyEnabled: true

emailEnabled: true
emailAutoReplyEnabled: false  # Email usually needs explicit replies

# Per-channel admins
adminUsers:
  telegram: ["123456789"]
  whatsapp: ["1234567890@s.whatsapp.net"]
  discord: ["123456789012345678"]
  slack: ["U0123456789"]
  email: ["admin@example.com"]

# Autonomy on select channels
autonomyAllowedChannels:
  - telegram
  - discord

Session Scope

sessionScope
enum
default:"per-channel-peer"
Conversation session isolation:
  • main - Single global session (all users share memory)
  • per-peer - Separate session per user (user’s Telegram and Discord are same session)
  • per-channel-peer - Separate session per channel-user (user’s Telegram and Discord are different sessions)
sessionScope: per-channel-peer  # Recommended for privacy

Identity Linking

Link user identities across channels so the agent recognizes the same person.
identityLinks:
  telegram:123456789: whatsapp:1234567890@s.whatsapp.net
  discord:987654321: telegram:123456789
  slack:U0123456789: email:admin@example.com
This allows:
  • Shared user profile across channels
  • Consistent conversation context
  • Cross-channel admin permissions
Identity linking is useful when sessionScope: per-peer but you want specific users to be recognized across channels.