Платформы обмена сообщениями
Telegram
Статус: готов к использованию в продакшене для личных сообщений бота и групп через grammY. Long polling — режим по умолчанию; режим webhook опционален.
Быстрая настройка
Шаг 1: Создание токена бота в BotFather
Откройте Telegram и напишите @BotFather (убедитесь, что это именно @BotFather). Выполните /newbot, следуйте подсказкам и сохраните токен.
Шаг 2: Настройка токена и политики личных сообщений
{
channels: {
telegram: {
enabled: true,
botToken: "123:abc",
dmPolicy: "pairing",
groups: { "*": { requireMention: true } },
},
},
}
Резервный вариант через переменные окружения: TELEGRAM_BOT_TOKEN=... (только для аккаунта по умолчанию). Telegram не использует openclaw channels login telegram; настройте токен в конфиге/env, затем запустите шлюз.
Шаг 3: Запуск шлюза и подтверждение первого личного сообщения
openclaw gateway
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
Коды связывания истекают через 1 час.
Шаг 4: Добавление бота в группу
Добавьте бота в свою группу, затем настройте channels.telegram.groups и groupPolicy в соответствии с вашей моделью доступа.
ℹ️ Порядок разрешения токена учитывает аккаунт. На практике значения из конфига имеют приоритет над резервным вариантом из переменных окружения, а
TELEGRAM_BOT_TOKENприменяется только к аккаунту по умолчанию.
Настройки на стороне Telegram
Telegram-боты по умолчанию используют Режим конфиденциальности, который ограничивает, какие групповые сообщения они получают. Если бот должен видеть все групповые сообщения, необходимо:
- отключить режим конфиденциальности через
/setprivacy, или - сделать бота администратором группы.
При переключении режима конфиденциальности удалите и снова добавьте бота в каждую группу, чтобы Telegram применил изменения.
Статус администратора управляется в настройках группы Telegram. Боты-администраторы получают все групповые сообщения, что полезно для постоянного группового поведения.
/setjoingroups— разрешить/запретить добавление в группы/setprivacy— для поведения видимости в группах
Контроль доступа и активация
Поведение в runtime
- Telegram управляется процессом шлюза.
- Маршрутизация детерминирована: входящие сообщения из Telegram возвращаются в Telegram (модель не выбирает каналы).
- Входящие сообщения нормализуются в общий конверт канала с метаданными ответа и заполнителями медиа.
- Групповые сессии изолированы по ID группы. Темы форума добавляют
:topic:для изоляции топиков. - Личные сообщения могут содержать
message_thread_id; OpenClaw маршрутизирует их с использованием ключей сессии, учитывающих тред, и сохраняет ID треда для ответов. - Long polling использует grammY runner с последовательной обработкой для каждого чата/треда. Общая конкурентность sink runner использует
agents.defaults.maxConcurrent. - Telegram Bot API не поддерживает квитанции о прочтении (
sendReadReceiptsне применяется).
Справочник по функциям
OpenClaw может передавать частичные ответы в реальном времени:
- личные чаты: нативный стриминг черновиков Telegram через
sendMessageDraft - группы/топики: предварительное сообщение +
editMessageText
Требование:
channels.telegram.streamingимеет значениеoff | partial | block | progress(по умолчанию:partial)progressотображается вpartialдля Telegram (совместимость с кросс-канальным именованием)- устаревшие значения
channels.telegram.streamModeи булевоstreamingавтоматически преобразуются
Telegram включил sendMessageDraft для всех ботов в Bot API 9.5 (1 марта 2026). Для ответов только с текстом:
- ЛС: OpenClaw обновляет черновик на месте (без дополнительного предварительного сообщения)
- группа/топик: OpenClaw сохраняет то же предварительное сообщение и выполняет окончательное редактирование на месте (без второго сообщения)
Для сложных ответов (например, с медиа) OpenClaw возвращается к обычной окончательной доставке, а затем очищает предварительное сообщение. Предварительный стриминг отделен от блочного стриминга. Когда блочный стриминг явно включен для Telegram, OpenClaw пропускает предварительный поток, чтобы избежать двойного стриминга. Если нативный транспорт черновиков недоступен/отклонен, OpenClaw автоматически возвращается к sendMessage + editMessageText. Поток рассуждений только для Telegram:
/reasoning streamотправляет рассуждения в живой предпросмотр во время генерации- окончательный ответ отправляется без текста рассуждений
Исходящий текст использует Telegram parse_mode: "HTML".
- Текст в стиле Markdown преобразуется в безопасный для Telegram HTML.
- Сырой HTML модели экранируется, чтобы уменьшить количество ошибок парсинга Telegram.
- Если Telegram отклоняет разобранный HTML, OpenClaw повторяет попытку как обычный текст.
Предпросмотры ссылок включены по умолчанию и могут быть отключены с помощью channels.telegram.linkPreview: false.
Регистрация меню команд Telegram обр абатывается при запуске с помощью setMyCommands. Нативные команды по умолчанию:
commands.native: "auto"включает нативные команды для Telegram
Добавьте пользовательские пункты меню команд:
{
channels: {
telegram: {
customCommands: [
{ command: "backup", description: "Git backup" },
{ command: "generate", description: "Create an image" },
],
},
},
}
Правила:
- имена нормализуются (удаляется ведущий
/, приводится к нижнему регистру) - допустимый шаблон:
a-z,0-9,_, длина1..32 - пользовательские команды не могут переопределять нативные команды
- конфликты/дубликаты пропускаются и логируются
Примечания:
- пользовательские команды — это только пункты меню; они не реализуют поведение автоматически
- команды плагинов/навыков могут по-прежнему работать при вводе, даже если они не отображаются в меню Telegram
Если нативные команды отключены, встроенные команды удаляются. Пользовательские/плагинные команды могут по-прежнему регистрироваться, если настроены. Частая ошибка настройки:
setMyCommands failedобычно означает, что исходящий DNS/HTTPS кapi.telegram.orgзаблокирован.