Multi-Channel Bots
Run multiple bots on one platform — one per role (CFO, Ops, Content) — with per-channel tokens
from praisonaiagents import Agent
agent = Agent(name="multi-channel-bot", instructions="Respond across Telegram, Slack, and Discord.")
agent.start("Handle the same question from users on all three platforms.")The user deploys role-specific bots on one platform; each token routes to its agent.
Deploy multiple specialized bots on the same platform with unique tokens and role-specific routing.
Quick Start
- Run onboard wizard
Start the wizard and choose your platform:
bash praisonai onboardChoose
telegramfor your first platform, then when prompted “Add another bot channel?” answerYesand enter roles likecfo,ops,content. - Configure tokens
The wizard generates unique environment variables for each channel:
bash # Tokens are saved to ~/.praisonai/.env automatically TELEGRAM_CFO_BOT_TOKEN=123456789:ABC... TELEGRAM_OPS_BOT_TOKEN=987654321:DEF... TELEGRAM_CONTENT_BOT_TOKEN=456789123:GHI... TELEGRAM_ALLOWED_USERS=123456789,987654321 - Start the gateway
Launch all bots simultaneously:
bash praisonai gateway startAll configured bots will connect and route to their specialized agents.
How It Works
Multi-channel setup routes each bot to its specialized agent based on the channel configuration.
Environment Variable Convention
Follow this exact naming pattern for multiple bots on the same platform:
| Channel key | Environment Variable | Bot Purpose |
|---|---|---|
telegram_cfo | TELEGRAM_CFO_BOT_TOKEN | CFO-related tasks |
telegram_ops | TELEGRAM_OPS_BOT_TOKEN | Operations tasks |
telegram_content | TELEGRAM_CONTENT_BOT_TOKEN | Content creation |
telegram_support | TELEGRAM_SUPPORT_BOT_TOKEN | Customer support |
Pattern: `
_
_BOT_TOKEN` (uppercase, role separated by underscore).
Example Configuration
This bot.yaml shows a complete multi-channel workforce setup:
gateway:
host: "127.0.0.1"
port: 8765
agents:
cfo:
instructions: "You are a CFO agent. Help with financial analysis, budget planning, and cost optimization."
model: gpt-4o-mini
memory: false
ops:
instructions: "You are an ops agent. Help with system monitoring, deployment, and infrastructure."
model: gpt-4o-mini
memory: false
content:
instructions: "You are a content agent. Help with writing, editing, and content strategy."
model: gpt-4o-mini
memory: false
channels:
telegram_cfo:
platform: telegram
token: ${TELEGRAM_CFO_BOT_TOKEN}
group_policy: mention_only
allowed_users: ${TELEGRAM_ALLOWED_USERS}
routes:
default: cfo
telegram_ops:
platform: telegram
token: ${TELEGRAM_OPS_BOT_TOKEN}
group_policy: mention_only
allowed_users: ${TELEGRAM_ALLOWED_USERS}
routes:
default: ops
telegram_content:
platform: telegram
token: ${TELEGRAM_CONTENT_BOT_TOKEN}
group_policy: mention_only
allowed_users: ${TELEGRAM_ALLOWED_USERS}
routes:
default: contentCommon Patterns
Single platform, multiple roles
Deploy multiple specialized bots on one platform:
channels:
telegram_finance:
platform: telegram
token: ${TELEGRAM_FINANCE_BOT_TOKEN}
routes:
default: finance_agent
telegram_hr:
platform: telegram
token: ${TELEGRAM_HR_BOT_TOKEN}
routes:
default: hr_agent
telegram_marketing:
platform: telegram
token: ${TELEGRAM_MARKETING_BOT_TOKEN}
routes:
default: marketing_agentCross-platform workforce
Distribute roles across different platforms:
channels:
telegram_cfo:
platform: telegram
token: ${TELEGRAM_CFO_BOT_TOKEN}
routes:
default: cfo
discord_ops:
platform: discord
token: ${DISCORD_OPS_BOT_TOKEN}
routes:
default: ops
slack_content:
platform: slack
token: ${SLACK_CONTENT_BOT_TOKEN}
routes:
default: contentLocal + remote continuity
Add the built-in local channel next to a remote one — start a conversation in your terminal and keep the same session going from your phone.
channels:
local: {}
telegram:
platform: telegram
token: ${TELEGRAM_BOT_TOKEN}
agents:
assistant:
instructions: "You are a helpful assistant."praisonai-bot gateway startBoth surfaces share one resolved session id via the identity resolver and delivery router. See Local (Terminal) Channel.
Validation with praisonai doctor
The multi_channel_tokens check validates your setup:
PASS Conditions
- Each channel has a unique environment variable
- Each environment variable resolves to a unique token value
- Follows `PLATFORM_
_BOT_TOKEN` naming convention
WARN Conditions
- Environment variable doesn’t follow naming convention
- Environment variable is unset but referenced in config
FAIL Conditions
- Two channels point to the same environment variable
- Two environment variables resolve to the same token value
Sample output:
$ praisonai doctor
✓ Multi-Channel Token Configuration: Multi-channel configuration looks good (3 channels)Remediation: Each channel must have a unique bot token. Create separate bots in @BotFather and use unique environment variables.
Best Practices
Use unique tokens per role
Create a separate bot in @BotFather for each role. Never reuse the same token across multiple channels as this will cause conflicts and validation failures.
Follow naming convention
Stick to the `PLATFORM_
_BOT_TOKEN` pattern so the doctor check passes. This makes it clear which token belongs to which channel and role.
Secure token storage
Keep all role tokens in ~/.praisonai/.env with chmod 600 permissions. Never commit tokens to version control or share them publicly.
Role-specific access control
Each role can have its own allowed_users environment variable for granular access control. For example, only finance team members should access the CFO bot.