Telegram

Telegram — самый быстрый канал для начала работы с OpenClaw. Достаточно создать бота через @BotFather и вставить токен.

Настройка за 3 минуты

1. Создайте бота

Откройте Telegram, найдите @BotFather, отправьте /newbot. Следуйте инструкциям и сохраните токен.

2. Настройте конфиг

{
  channels: {
    telegram: {
      enabled: true,
      botToken: "123:abc",
      dmPolicy: "pairing",
      groups: { "*": { requireMention: true } },
    },
  },
}

Или через переменную окружения: TELEGRAM_BOT_TOKEN=... (только для default-аккаунта). Конфиг имеет приоритет над env.

Telegram не использует openclaw channels login — токен настраивается в конфиге/env, затем запускается Gateway.

3. Запустите и подтвердите первое сообщение

openclaw gateway
openclaw pairing list telegram
openclaw pairing approve telegram 

Код действителен 1 час.

Доступ к боту (DM)

channels.telegram.dmPolicy — кто может писать боту в личку:

  • pairing (по умолчанию) — новые отправители получают код
  • allowlist — только из списка allowFrom (числовые ID)
  • open — всем (нужно allowFrom: ["*"])
  • disabled — никому
  • Важные нюансы DM-политики
  • allowFrom принимает числовые Telegram ID. Префиксы telegram: / tg: допускаются.
  • dmPolicy: "allowlist" с пустым allowFrom блокирует все ЛС и отклоняется валидацией.
  • Pairing — это только DM. Одобрение pairing НЕ даёт доступ к группам. Для групп нужно настраивать groupAllowFrom отдельно.
  • Для одно-владельческих ботов: поставьте dmPolicy: "allowlist" с явным числовым ID в allowFrom.
  • Как узнать свой Telegram ID

  • Напишите боту
  • Запустите openclaw logs --follow
  • Найдите from.id
  • Или через Bot API: curl "https://api.telegram.org/bot/getUpdates"

    Группы

    Добавьте бота в группу. Два уровня контроля:

    1. Какие группы разрешены (channels.telegram.groups):

  • Нет groups + groupPolicy: "open" — любая группа
  • Нет groups + groupPolicy: "allowlist" — группы блокируются
  • Конкретные ID или "*" — явный allowlist
  • 2. Какие пользователи разрешены в группах (channels.telegram.groupPolicy):

  • open — любой участник
  • allowlist (по умолчанию) — только из groupAllowFrom или allowFrom
  • disabled — бот не отвечает в группах
  • {
      channels: {
        telegram: {
          groupAllowFrom: ["8734062810", "745123456"],
          groups: {
            "-1001234567890": {
              groupPolicy: "open",
              requireMention: false,
            },
          },
        },
      },
    }
    
    Частая ошибка: groupAllowFrom ≠ groups
  • Числовые ID групп (отрицательные, напр. -1001234567890) → channels.telegram.groups
  • Числовые ID пользователейgroupAllowFrom или allowFrom
  • Group auth НЕ наследует DM pairing-store. Pairing — только для DM.
  • Упоминания

    По умолчанию бот в группе реагирует только на упоминания (@botusername). Упоминания также работают через mentionPatterns:

    {
      agents: {
        list: [{
          id: "main",
          groupChat: { mentionPatterns: ["@openclaw", "openclaw"] },
        }],
      },
    }
    

    Команды в чате:

  • /activation always — бот отвечает на всё (в сессии)
  • /activation mention — только по упоминанию (в сессии)
  • Для постоянной настройки — через конфиг: groups: { "*": { requireMention: false } }.

    Режим приватности

    Telegram-боты по умолчанию имеют Privacy Mode — они не видят все сообщения в группе. Чтобы бот видел всё:

  • Отключите через /setprivacy у @BotFather, или
  • Сделайте бота администратором группы
  • После отключения приватности удалите и заново добавьте бота в группу.

    Форум-топики

    Если группа — форум с топиками, OpenClaw автоматически изолирует сессии по топикам (каждый топик = отдельная сессия).

    Streaming (превью ответов)

    OpenClaw может показывать ответ в реальном времени, редактируя сообщение:

    {
      channels: {
        telegram: {
          streaming: "partial",  // off | partial | block | progress
        },
      },
    }
    
  • partial (по умолчанию) — превью обновляется по мере генерации
  • block — ответ приходит одним сообщением
  • off — без превью
  • Runtime

  • Telegram работает через long polling (grammY runner). Webhook — опционально.
  • Long polling защищён от конфликтов: только один poller на токен. Ошибки 409 = кто-то ещё использует тот же токен.
  • Watchdog перезапускает poller после 120 секунд без лайв-проверки. Настройка: channels.telegram.pollingStallThresholdMs (30000–600000 мс).
  • Telegram не поддерживает read-receipts.
  • Что дальше

  • Discord — аналогичная настройка
  • WhatsApp — чуть сложнее
  • Все каналы — обзор