Skip to content

Channels

Lango supports multi-channel communication, allowing your agent to interact with users across different messaging platforms simultaneously.

Supported Channels

Channel Config Section Implementation
Telegram channels.telegram internal/channels/telegram/
Discord channels.discord internal/channels/discord/
Slack channels.slack internal/channels/slack/

Each channel runs as an independent integration within the same Lango process. Messages from all channels are routed to the same agent, maintaining separate sessions per user/channel.

Voice support — Phase 1 (infrastructure only)

The voice infrastructure layer is now shipped: internal/voice/ exposes SpeechToText / TextToSpeech interfaces with a Gemini-backed STT implementation, plus voice.* config (default disabled — see Voice configuration).

Per-channel voice round-trip is NOT yet wired. Inbound (Telegram getFile → audio download → STT → text message inject) and outbound (SynthesizesendVoice / file upload) integration is Phase 2, scheduled for a future change. The Gemini TTS implementation is also Phase 2 — Phase 1 returns ErrTTSNotConfigured as a graceful-degradation signal.

Until Phase 2 lands, channels behave as text-only regardless of voice.enabled. Setting voice.enabled: true does not yet activate any user-facing behavior.

Setup

The easiest way to configure channels is through the onboarding wizard:

lango onboard

Select Channel Setup during onboarding to configure one or more channels.

Telegram

Prerequisites

  1. Create a bot via BotFather on Telegram
  2. Copy the bot token

Configuration

Settings: lango settings → Channels

{
  "channels": {
    "telegram": {
      "enabled": true,
      "botToken": "${TELEGRAM_BOT_TOKEN}",
      "allowlist": []
    }
  }
}
Key Type Description
enabled bool Enable the Telegram channel
botToken string Bot token from BotFather
allowlist []int64 Allowed user/group IDs (empty = allow all)

Security

In production, always set allowlist to restrict which Telegram users and groups can interact with your agent.

Discord

Prerequisites

  1. Create an application in the Discord Developer Portal
  2. Create a bot user and copy the bot token
  3. Note the Application ID for slash command registration

Configuration

Settings: lango settings → Channels

{
  "channels": {
    "discord": {
      "enabled": true,
      "botToken": "${DISCORD_BOT_TOKEN}",
      "applicationId": "your-application-id",
      "allowedGuilds": []
    }
  }
}
Key Type Description
enabled bool Enable the Discord channel
botToken string Bot token from Discord Developer Portal
applicationId string Application ID for slash commands
allowedGuilds []string Allowed guild (server) IDs (empty = allow all)

Slack

Prerequisites

  1. Create a Slack app at api.slack.com
  2. Enable Socket Mode for real-time events
  3. Add required bot scopes and install to your workspace

Configuration

Settings: lango settings → Channels

{
  "channels": {
    "slack": {
      "enabled": true,
      "botToken": "${SLACK_BOT_TOKEN}",
      "appToken": "${SLACK_APP_TOKEN}",
      "signingSecret": "${SLACK_SIGNING_SECRET}"
    }
  }
}
Key Type Description
enabled bool Enable the Slack channel
botToken string Bot OAuth token (xoxb-...)
appToken string App-level token for Socket Mode (xapp-...)
signingSecret string Signing secret for request verification

Channel Features

All channels share the following capabilities:

  • Session isolation -- Each user/channel combination gets its own session
  • Tool approval -- Interactive approval prompts forwarded to the originating channel
  • Message formatting -- Markdown/rich text adapted per platform
  • Delivery targets -- Automation systems (cron, background, workflow) can deliver results to any enabled channel
  • Progressive thinking -- Real-time "Thinking... (30s)" placeholder updates showing elapsed time

Multiple Channels

You can enable multiple channels simultaneously. Each runs independently:

Settings: lango settings → Channels

{
  "channels": {
    "telegram": {
      "enabled": true,
      "botToken": "${TELEGRAM_BOT_TOKEN}"
    },
    "discord": {
      "enabled": true,
      "botToken": "${DISCORD_BOT_TOKEN}",
      "applicationId": "123456789"
    },
    "slack": {
      "enabled": true,
      "botToken": "${SLACK_BOT_TOKEN}",
      "appToken": "${SLACK_APP_TOKEN}",
      "signingSecret": "${SLACK_SIGNING_SECRET}"
    }
  }
}