Platform

Channels (Telegram, Slack, Discord, Signal, Viber)

Talk to Agent OS agents via messaging channels — webhooks, config, and default agent.

Overview

Channels let users talk to agents from messaging platforms. Agent OS supports:

  • Telegram — Bot token + webhook or polling; default agent in config.
  • Slack — Bot token + signing secret; Events API or slash command → webhook.
  • Discord — Bot token + public key; interactions webhook.
  • Signal — Bridge pattern: bridge POSTs to our webhook; we reply via bridge /send.
  • Viber — Bot auth token; webhook + set_webhook.

Each channel has:

  • A webhook endpoint (e.g. POST /api/channels/telegram/webhook) that receives incoming messages or events.
  • Config in ~/.agent-os/config.json: bot token, signing secret or public key if needed, and default agent id. Editable in the dashboard under Settings → Channels.
  • Optional status endpoint (e.g. GET /api/channels/telegram/status) and set-webhook (Telegram, Viber) to register the webhook URL with the platform.

Flow: incoming message → resolve default agent for that channel → run agent with message text and conversation context → send reply back via the channel’s API.

Telegram

  • Config: telegram_bot_token, telegram_default_agent_id in config (or Settings → Channels → Telegram).
  • Webhook: POST /api/channels/telegram/webhook. Set the webhook URL with your bot (e.g. https://your-domain.com/api/channels/telegram/webhook). Requires HTTPS.
  • Polling: If webhook is not set, the server can use long polling (see startTelegramPolling in the repo).
  • Docs: See doc/TELEGRAM_SETUP.md in the Agent OS repo for step-by-step setup.

Slack

  • Config: slack_bot_token, slack_signing_secret, slack_default_agent_id.
  • Webhook: POST /api/channels/slack/webhook. Configure your Slack app to send events or slash commands to this URL; verify signature with slack_signing_secret.
  • Status: GET /api/channels/slack/status.
  • Docs: See doc/SLACK_SETUP.md in the repo.

Discord

  • Config: discord_bot_token, discord_public_key, discord_default_agent_id.
  • Webhook: POST /api/channels/discord/webhook. Discord sends interaction payloads; the server verifies the signature with discord_public_key and responds (e.g. slash command reply).
  • Status: GET /api/channels/discord/status.
  • Docs: See doc/DISCORD_SETUP.md in the repo.

Signal

  • Config: signal_bridge_url, signal_default_agent_id. The bridge is a separate service that receives Signal messages and POSTs them to our webhook; we reply by POSTing to the bridge’s send endpoint.
  • Webhook: POST /api/channels/signal/webhook.
  • Status: GET /api/channels/signal/status.
  • Docs: See doc/SIGNAL_SETUP.md in the repo.

Viber

  • Config: viber_auth_token, viber_default_agent_id.
  • Webhook: POST /api/channels/viber/webhook. Viber requires HTTPS for the webhook.
  • Set webhook: POST /api/channels/viber/set-webhook to register the URL with Viber.
  • Status: GET /api/channels/viber/status.
  • Docs: See doc/VIBER_SETUP.md in the repo.

Optional: OAuth / Integrations service

Agent OS itself does not include a separate OAuth integrations server. Skills that need OAuth tokens (e.g. Gmail, GitHub) can:

  • Use a Portal / Integrations backend: you run or use an OAuth service; skills use a runtime-supplied base URL (e.g. {{base}}) in tool definitions so the deployer points to their own portal. See Skills authoring and the workspace rule: integration base URLs are runtime config, not hardcoded in skills.
  • Store credentials in skill config (e.g. user pastes a token or refresh token into the skill’s config in the dashboard).

Channel credentials (Telegram, Slack, etc.) are stored only in Agent OS config (~/.agent-os/config.json), not in a separate integrations service.