Сопряжение
Устранение неполадок каналов
Настройка Gateway
Быстрая настройка
Создайте токен бота в BotFather
- Через чат: откройте Telegram, начните чат с @BotFather (убедитесь, что имя пользователя в точности совпадает с
@BotFather), выполните/newbot, следуйте подсказкам и сохраните токен. - Через веб-интерфейс: откройте веб-приложение BotFather — оно работает во всех клиентах Telegram, включая web.telegram.org, — создайте бота в интерфейсе и скопируйте его токен.
Настройте токен и политику личных сообщений
TELEGRAM_BOT_TOKEN (только для учётной записи по умолчанию; именованные учётные записи должны использовать botToken или tokenFile).
Telegram не использует openclaw channels login telegram; задайте токен в конфигурации или переменной окружения, затем запустите Gateway.Запустите Gateway и одобрите первое личное сообщение
Добавьте бота в группу
- ваш идентификатор пользователя Telegram для
allowFrom/groupAllowFrom - идентификатор группового чата Telegram в качестве ключа в
channels.telegram.groups
openclaw logs --follow, бота для определения идентификаторов пересланных сообщений или getUpdates Bot API. После разрешения группы команда /whoami@<bot_username> подтвердит идентификаторы пользователя и группы.Отрицательные идентификаторы супергрупп, начинающиеся с -100, являются идентификаторами групповых чатов. Их следует указывать в channels.telegram.groups, а не в groupAllowFrom.tokenFile имеет приоритет над botToken, а тот — над переменной окружения; конфигурация всегда имеет приоритет над TELEGRAM_BOT_TOKEN (который разрешается только для учётной записи по умолчанию). После успешного запуска OpenClaw кэширует идентификатор бота на срок до 24 часов, чтобы при перезапусках не выполнять дополнительный вызов getMe; изменение или удаление токена очищает этот кэш.Настройки на стороне Telegram
Режим конфиденциальности и видимость в группах
Режим конфиденциальности и видимость в группах
- отключите режим конфиденциальности через
/setprivacyили - назначьте бота администратором группы.
Разрешения в группе
Разрешения в группе
Полезные переключатели BotFather
Полезные переключатели BotFather
/setjoingroups— разрешить или запретить добавление в группы/setprivacy— поведение видимости в группах
Мини-приложение панели управления
Выполните/dashboard в личном чате с ботом, чтобы открыть панель управления OpenClaw внутри Telegram.
Требования:
gateway.tailscale.mode: "serve"или"funnel"для опубликованного HTTPS-URL мини-приложения.- Ваш числовой идентификатор пользователя Telegram должен находиться в действующем
allowFromвыбранной учётной записи или вcommands.ownerAllowFrom. - Используйте личный чат. В группах
/dashboardотвечает сообщениемopen this in a DM with the botи не отправляет кнопку. - Установки Docker: режимы Serve/Funnel требуют, чтобы Gateway был привязан к loopback-интерфейсу рядом с
tailscaled, что невозможно обеспечить при использовании мостовой сети с опубликованными портами. Запустите контейнер Gateway сnetwork_mode: hostи подключите в контейнер сокетtailscaledхоста (/var/run/tailscale), а также CLItailscale.
Управление доступом и активация
Идентификатор бота в группе
В группах и темах форумов явное упоминание настроенного имени пользователя бота (например,@my_bot) адресует сообщение выбранному агенту OpenClaw, даже если имя персонажа агента отличается от имени пользователя Telegram. Политика молчания в группе по-прежнему применяется к постороннему трафику, однако имя пользователя самого бота никогда не считается «кем-то другим».
- Политика личных сообщений
- Политика групп и списки разрешений
- Поведение упоминаний
channels.telegram.dmPolicy управляет доступом к личным сообщениям:pairing(по умолчанию)allowlist(требуется хотя бы один идентификатор отправителя вallowFrom)open(требуется, чтобыallowFromсодержал"*")disabled
dmPolicy: "open" с allowFrom: ["*"] позволяет любой учётной записи Telegram, которая найдёт или угадает имя пользователя бота, отправлять ему команды. Используйте эту конфигурацию только для намеренно общедоступных ботов с жёстко ограниченным набором инструментов; для ботов с одним владельцем следует использовать allowlist с числовыми идентификаторами пользователей.channels.telegram.allowFrom принимает числовые идентификаторы пользователей Telegram. Префиксы telegram: / tg: принимаются и нормализуются.
В конфигурациях с несколькими учётными записями ограничивающий channels.telegram.allowFrom верхнего уровня служит границей безопасности: allowFrom: ["*"] на уровне учётной записи не делает её общедоступной, если объединённый действующий список разрешений по-прежнему не содержит явного подстановочного знака.
dmPolicy: "allowlist" с пустым allowFrom блокирует все личные сообщения и отклоняется при проверке конфигурации.
При настройке запрашиваются только числовые идентификаторы пользователей. Если в конфигурации остались записи списка разрешений @username от старой настройки, выполните openclaw doctor --fix, чтобы по возможности преобразовать их в числовые идентификаторы (требуется токен бота Telegram).
Если ранее вы использовали файлы списка разрешений хранилища сопряжений, openclaw doctor --fix может восстановить записи в channels.telegram.allowFrom для сценариев со списками разрешений (например, когда dmPolicy: "allowlist" ещё не содержит явных идентификаторов).Для ботов с одним владельцем рекомендуется использовать dmPolicy: "allowlist" с явно заданными числовыми идентификаторами allowFrom, а не полагаться на предыдущие одобрения сопряжения.Распространённое заблуждение: одобрение сопряжения для личных сообщений не означает, что «этот отправитель авторизован везде». Сопряжение предоставляет доступ только к личным сообщениям. Если владелец команд ещё не задан, первое одобренное сопряжение также устанавливает commands.ownerAllowFrom, назначая явную учётную запись оператора для команд, доступных только владельцу, и одобрений выполнения. Авторизация отправителей в группах по-прежнему определяется явными списками разрешений в конфигурации.
Чтобы одна и та же учётная запись была авторизована и для личных сообщений, и для групповых команд, добавьте свой числовой идентификатор пользователя Telegram в channels.telegram.allowFrom, а для команд, доступных только владельцу, убедитесь, что commands.ownerAllowFrom содержит telegram:<your user id>.Как узнать свой идентификатор пользователя Telegram
Более безопасный способ (без стороннего бота): отправьте личное сообщение своему боту, выполнитеopenclaw logs --follow и найдите from.id.Способ через официальный Bot API:@userinfobot или @getidsbot.Поведение во время выполнения
- Telegram работает внутри процесса Gateway.
- Маршрутизация детерминирована: входящие ответы из Telegram возвращаются в Telegram (модель не выбирает каналы).
- Входящие сообщения нормализуются в общий конверт канала с метаданными ответа, заполнителями медиа и сохранённым контекстом цепочки ответов для ответов, замеченных Gateway.
- Групповые сеансы изолируются по идентификатору группы. Для тем форума добавляется
:topic:<threadId>. - Сообщения в личных чатах могут содержать
message_thread_id; OpenClaw сохраняет его для ответов. Сеансы тем в личных чатах разделяются, только когда TelegramgetMeсообщаетhas_topics_enabled: trueдля бота; в противном случае личные чаты остаются в плоском сеансе. - Длительный опрос использует исполнитель grammY с последовательной обработкой для каждого чата и каждой ветки. Параллелизм приёмника исполнителя задаётся через
agents.defaults.maxConcurrent. - При запуске нескольких учётных записей ограничивается число параллельных проверок
getMe, чтобы большие парки ботов не запускали проверки всех учётных записей одновременно. - Каждый процесс Gateway контролирует длительный опрос, чтобы токен бота одновременно мог использовать только один активный опрашивающий процесс. Постоянные конфликты 409
getUpdatesуказывают на другой Gateway OpenClaw, скрипт или внешний опрашивающий процесс, использующий тот же токен. - По умолчанию сторожевой таймер опроса перезапускает его после 120 секунд без завершённой проверки работоспособности
getUpdates. Увеличивайтеchannels.telegram.pollingStallThresholdMs(30000-600000, поддерживаются переопределения для отдельных учётных записей), только если в вашей среде возникают ложные перезапуски из-за зависания опроса во время длительной работы. - Telegram Bot API не поддерживает подтверждения прочтения (
sendReadReceiptsнеприменим).
channels.telegram.dm.threadReplies и channels.telegram.direct.<chatId>.threadReplies удалены. После обновления выполните openclaw doctor --fix, если эти ключи всё ещё присутствуют в конфигурации. Маршрутизация тем в личных чатах теперь следует getMe.has_topics_enabled Telegram (управляется режимом веток в BotFather): боты с включёнными темами используют сеансы личных чатов в рамках ветки, когда Telegram отправляет message_thread_id; остальные личные чаты остаются в плоском сеансе.Справочник возможностей
Предварительный просмотр потока в реальном времени (редактирование сообщений)
Предварительный просмотр потока в реальном времени (редактирование сообщений)
editMessageText, завершая ответ на месте.channels.telegram.streamingимеет значениеoff | partial | block | progress(по умолчанию:partial)- для коротких начальных предварительных ответов применяется устранение дребезга, после чего они материализуются спустя ограниченную задержку, если выполнение всё ещё активно
progressсохраняет один редактируемый черновик состояния для отображения хода выполнения инструментов, показывает стабильную метку состояния, когда активность ответа начинается до выполнения инструментов, очищает его после завершения и отправляет окончательный ответ обычным сообщениемstreaming.preview.toolProgressопределяет, будут ли обновления инструментов и хода выполнения повторно использовать то же редактируемое сообщение предварительного просмотра (по умолчанию:true, когда активна потоковая передача предварительного просмотра)streaming.preview.commandTextуправляет детализацией команд и выполнения в этих строках:raw(по умолчанию) илиstatus(только метка инструмента)streaming.progress.commentary(по умолчанию:false) включает комментарии и вводный текст ассистента во временном черновике хода выполнения- устаревшие
channels.telegram.streamMode, логические значенияstreamingи выведенные из эксплуатации ключи нативного предварительного просмотра черновика обнаруживаются автоматически; выполнитеopenclaw doctor --fixдля их миграции
v2026.4.22+).Чтобы сохранить редактирование предварительного ответа, но скрыть строки хода выполнения инструментов:progress показывает ход выполнения инструментов, не вставляя окончательный ответ в это сообщение путём редактирования. Разместите политику текста команд в streaming.progress:streaming.mode: "off" отключает редактирование предварительного просмотра и подавляет общие сообщения инструментов и хода выполнения вместо их отправки отдельными сообщениями состояния; запросы подтверждения, медиа и ошибки по-прежнему передаются через обычную доставку окончательного ответа. streaming.preview.toolProgress: false сохраняет только редактирование предварительного ответа.replyToMode имеет значение first, all или batched, а входящее сообщение содержит выделенный текст цитаты, OpenClaw отправляет окончательный ответ через нативный механизм ответа на цитату Telegram вместо редактирования предварительного ответа, поэтому streaming.preview.toolProgress не может отображать строки состояния в этом ходе. Ответы на текущее сообщение без выделенного текста цитаты по-прежнему передаются потоково. Установите replyToMode: "off", если видимость хода выполнения инструментов важнее нативных ответов на цитаты, или streaming.preview.toolProgress: false, чтобы принять этот компромисс./reasoning stream передаёт рассуждения в потоковом режиме в предварительный просмотр во время генерации, а затем удаляет предварительный просмотр рассуждений после доставки окончательного ответа (используйте /reasoning on, чтобы оставить его видимым). Окончательный ответ отправляется без текста рассуждений.Расширенное форматирование сообщений
Расширенное форматирование сообщений
$400-600K не интерпретируются как математические выражения. Длинный расширенный текст автоматически разделяется с учётом ограничений Telegram. Таблицы, превышающие ограничение в 20 столбцов, заменяются блоком кода.По умолчанию: выключено для совместимости с клиентами — некоторые актуальные клиенты для Desktop, Web, Android и сторонние клиенты отображают принятые расширенные сообщения как неподдерживаемые. Не включайте эту возможность, если хотя бы один клиент, используемый с ботом, не может отображать такие сообщения. /status показывает, включены или выключены расширенные сообщения в текущем сеансе.Предварительный просмотр ссылок включён по умолчанию. channels.telegram.linkPreview: false отключает автоматическое обнаружение сущностей в расширенном тексте.Нативные и пользовательские команды
Нативные и пользовательские команды
setMyCommands. commands.native: "auto" включает нативные команды для Telegram.Добавление пользовательских пунктов меню команд:/, преобразуются в нижний регистр); допустимый шаблон a-z, 0-9, _, длина 1-32; пользовательские команды не могут переопределять нативные команды; конфликты и дубликаты пропускаются и записываются в журнал.Пользовательские команды — это только пункты меню, они не реализуют поведение автоматически. Команды плагинов и Skills могут работать при ручном вводе, даже если они не отображаются в меню Telegram. Если нативные команды отключены, встроенные команды удаляются; пользовательские команды и команды плагинов всё равно могут регистрироваться, если они настроены.Распространённые ошибки настройки:setMyCommands failedсBOT_COMMANDS_TOO_MUCHпосле повторной попытки сокращения означает, что меню по-прежнему переполнено; уменьшите количество команд плагинов, Skills или пользовательских команд либо отключитеchannels.telegram.commands.native.- Сбой
deleteWebhook,deleteMyCommandsилиsetMyCommandsс404: Not Found, когда прямые команды curl к Bot API работают, обычно означает, что вchannels.telegram.apiRootуказан полный адрес конечной точки/bot<TOKEN>. ВapiRootдолжен быть указан только корневой адрес Bot API;openclaw doctor --fixудаляет случайный завершающий/bot<TOKEN>. getMe returned 401означает, что Telegram отклонил настроенный токен бота. ОбновитеbotToken,tokenFileилиTELEGRAM_BOT_TOKEN(учётная запись по умолчанию), указав текущий токен BotFather; OpenClaw останавливается до начала опроса, поэтому эта ошибка не отображается как сбой очистки Webhook.setMyCommands failedс ошибками сети или получения данных обычно означает, что исходящие запросы DNS/HTTPS кapi.telegram.orgзаблокированы.
Команды сопряжения устройств (плагин device-pair)
После установки:/pairсоздаёт код настройки- вставьте код в приложение iOS
/pair pendingвыводит список ожидающих запросов (включая роль и области действия)- подтверждение:
/pair approve <requestId>,/pair approve(единственный ожидающий запрос) или/pair approve latest
requestId; перед подтверждением снова выполните /pair pending.Подробнее: Сопряжение.Встроенные кнопки
Встроенные кнопки
off, dm, group, all, allowlist (по умолчанию). Устаревшее значение capabilities: ["inlineButtons"] сопоставляется с "all".Пример действия с сообщением:web_app работают только в личных чатах между пользователем и ботом.Нажатия на callback-кнопки, не обработанные зарегистрированным интерактивным обработчиком плагина, передаются агенту как текст: callback_data: <value>.Действия с сообщениями Telegram для агентов и автоматизации
Действия с сообщениями Telegram для агентов и автоматизации
sendMessage(to,content, необязательныйmediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,contentилиcaption, необязательные встроенные кнопкиpresentation; изменения только кнопок обновляют разметку ответа)createForumTopic(chatId,name, необязательныйiconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create.Ограничение доступа: channels.telegram.actions.sendMessage, deleteMessage, reactions, sticker (по умолчанию отключено). edit, createForumTopic и editForumTopic включены по умолчанию и не имеют отдельных переключателей.
При отправке во время выполнения используется активный снимок конфигурации и секретов, полученный при запуске или перезагрузке, поэтому пути действий не разрешают значения SecretRef заново при каждой отправке.Семантика удаления реакций: /tools/reactions.Теги ветвления ответов
Теги ветвления ответов
[[reply_to_current]]— отвечает на сообщение, вызвавшее действие[[reply_to:<id>]]— отвечает на сообщение с указанным идентификатором
channels.telegram.replyToMode: off (по умолчанию), first, all.Когда ветвление ответов включено и исходный текст или подпись доступны, OpenClaw автоматически добавляет нативную цитату. Telegram ограничивает текст нативной цитаты 1024 кодовыми единицами UTF-16; для более длинных сообщений цитируется начало, а если Telegram отклоняет цитату, используется обычный ответ.off отключает только неявное ветвление ответов; явные теги [[reply_to_*]] по-прежнему учитываются.Темы форума и поведение веток
Темы форума и поведение веток
:topic:<threadId>; ответы и индикатор набора текста направляются в ветку темы; путь конфигурации темы — channels.telegram.groups.<chatId>.topics.<threadId>.Общая тема (threadId=1) — особый случай: при отправке сообщений message_thread_id опускается (Telegram отклоняет sendMessage(...thread_id=1) с сообщением «ветка не найдена»), но действия набора текста по-прежнему включают message_thread_id (согласно практическим наблюдениям, это необходимо для отображения индикатора набора текста).Записи тем наследуют настройки группы, если они не переопределены (requireMention, allowFrom, skills, systemPrompt, enabled, groupPolicy). agentId применяется только к теме и не наследуется из настроек группы по умолчанию. topics."*" задаёт значения по умолчанию для каждой темы в этой группе; точные идентификаторы тем по-прежнему имеют приоритет над "*".Маршрутизация агентов по темам: каждую тему можно направить отдельному агенту через agentId в конфигурации темы, предоставив ей собственное рабочее пространство, память и сеанс:agent:zu:telegram:group:-1001234567890:topic:3.Постоянная привязка темы ACP: темы форума могут закреплять сеансы среды ACP с помощью типизированных привязок верхнего уровня (bindings[] с type: "acp", match.channel: "telegram", peer.kind: "group" и идентификатором с указанием темы, например -1001234567890:topic:42). В настоящее время область действия ограничена темами форумов в группах и супергруппах. См. Агенты ACP.Запуск ACP из чата с привязкой к ветке: /acp spawn <agent> --thread here|auto привязывает текущую тему к новому сеансу ACP; последующие сообщения направляются туда напрямую, а OpenClaw закрепляет подтверждение запуска в теме. Требуется channels.telegram.threadBindings.spawnSessions (по умолчанию: true).В контексте шаблона доступны MessageThreadId и IsForum. Личные чаты с message_thread_id сохраняют метаданные ответа, но используют ключи сеансов с учётом веток только тогда, когда Telegram getMe сообщает has_topics_enabled: true.
Устаревшие переопределения dm.threadReplies и direct.*.threadReplies удалены; режим веток BotFather является единственным источником истины. Выполните openclaw doctor --fix, чтобы удалить устаревшие ключи конфигурации.Аудио, видео и стикеры
Аудио, видео и стикеры
Аудиосообщения
Telegram различает голосовые сообщения и аудиофайлы. По умолчанию используется поведение аудиофайла; добавьте тег[[audio_as_voice]] в ответ агента, чтобы принудительно отправить голосовое сообщение. Расшифровки входящих голосовых сообщений помещаются в контекст агента как машинно-сгенерированный недоверенный текст, однако обнаружение упоминаний по-прежнему использует необработанную расшифровку, поэтому голосовые сообщения, требующие упоминания, продолжают работать.Видеосообщения
Telegram различает видеофайлы и видеосообщения. Видеосообщения не поддерживают подписи; указанный текст сообщения отправляется отдельно.Местоположения и места
Используйте существующее действиеsend с одним отдельным объектом location. Координаты отправляются как нативная метка; добавление одновременно name и address отправляет нативную карточку места. Отправку местоположения нельзя совмещать с текстом сообщения или медиафайлом.Стикеры
Входящие: статические WEBP-файлы загружаются и обрабатываются (заполнитель<media:sticker>); анимированные TGS- и видеофайлы WEBM пропускаются.Поля контекста стикера: Sticker.emoji, Sticker.setName, Sticker.fileId, Sticker.fileUniqueId, Sticker.cachedDescription. Описания кешируются в состоянии плагина OpenClaw в SQLite, чтобы сократить число повторных обращений к компьютерному зрению.Включение действий со стикерами:Уведомления о реакциях
Уведомления о реакциях
message_reaction отдельно от полезной нагрузки сообщения. Если эта функция включена, OpenClaw ставит в очередь системные события вида Telegram reaction added: 👍 by Alice (@alice) on msg 42.channels.telegram.reactionNotifications:off | own | all(по умолчанию:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(по умолчанию:minimal)
own означает только реакции пользователей на сообщения, отправленные ботом (по возможности определяется с помощью кеша отправленных сообщений). События реакций по-прежнему подчиняются правилам управления доступом Telegram (dmPolicy, allowFrom, groupPolicy, groupAllowFrom); события от неавторизованных отправителей отбрасываются.Telegram не предоставляет идентификаторы веток в обновлениях реакций: обычные группы направляются в сеанс группового чата, а группы с форумами — в сеанс общей темы (:topic:1), а не в конкретную исходную тему.allowed_updates для опроса или webhook автоматически включают message_reaction.Реакции-подтверждения
Реакции-подтверждения
ackReaction отправляет эмодзи подтверждения, пока OpenClaw обрабатывает входящее сообщение. messages.ackReactionScope определяет, когда оно отправляется.Порядок выбора эмодзи:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- резервный эмодзи идентичности агента (
agents.list[].identity.emoji, иначе «👀»)
"", чтобы отключить реакцию для канала или учётной записи.Область действия (messages.ackReactionScope, по умолчанию "group-mentions"; переопределение для учётной записи или канала Telegram в настоящее время отсутствует):all (личные сообщения и группы, включая фоновые события комнат), direct (только личные сообщения), group-all (каждое групповое сообщение, кроме фоновых событий комнат; без личных сообщений), group-mentions (группы, когда бот упомянут; без личных сообщений — значение по умолчанию), off / none (отключено).group-mentions) реакции-подтверждения не срабатывают в личных сообщениях и для фоновых событий комнат. Для личных сообщений используйте direct или all; только all подтверждает фоновые события комнат. Это значение считывается при запуске провайдера Telegram, поэтому для вступления изменения в силу требуется перезапуск Gateway.Запись конфигурации из событий и команд Telegram
Запись конфигурации из событий и команд Telegram
configWrites !== false). К операциям записи, инициированным Telegram, относятся события миграции групп (migrate_to_chat_id, обновляет channels.telegram.groups) и /config set / /config unset (требуется включение команд).Отключение:Длительный опрос и webhook
Длительный опрос и webhook
channels.telegram.webhookUrl и channels.telegram.webhookSecret; необязательно: webhookPath (по умолчанию /telegram-webhook), webhookHost (по умолчанию 127.0.0.1), webhookPort (по умолчанию 8787), webhookCertPath (самоподписанный сертификат PEM для конфигураций с прямым IP-адресом или без домена).В режиме длительного опроса OpenClaw сохраняет отметку перезапуска только после успешной передачи обновления; при сбое обработчика обновление остаётся доступным для повторной обработки в том же процессе и не помечается как завершённое.По умолчанию локальный слушатель привязывается к 127.0.0.1:8787. Для публичного входящего трафика разместите обратный прокси перед локальным портом или явно задайте webhookHost: "0.0.0.0".Режим webhook проверяет защитные условия запроса, секретный токен Telegram и тело JSON, а затем фиксирует обновление в устойчивой очереди входящих данных, прежде чем вернуть пустой 200. Успешное принятие в устойчивую очередь включает x-openclaw-delivery-accepted: durable; ответы проверки работоспособности, маршрутизации, аутентификации, валидации и ошибок хранилища не содержат этот заголовок. Обратные прокси и контроллеры хоста могут требовать этот заголовок, чтобы отличать принятие OpenClaw от обычного пустого 200, не определяя факт принятия по времени ответа.Затем OpenClaw асинхронно обрабатывает обновление через те же очереди бота для каждого чата и каждой темы, которые используются при длительном опросе, поэтому медленные обращения к агенту не задерживают подтверждение доставки Telegram.Ограничения, повторные попытки и цели CLI
Ограничения, повторные попытки и цели CLI
channels.telegram.textChunkLimitпо умолчанию равно 4000;streaming.chunkMode="newline"предпочитает границы абзацев (пустые строки) перед разделением по длине.channels.telegram.mediaMaxMb(по умолчанию 100) ограничивает размер входящих и исходящих медиафайлов.channels.telegram.mediaGroupFlushMs(по умолчанию 500, диапазон 10-60000) определяет, как долго альбомы и группы медиафайлов буферизуются, прежде чем OpenClaw передаст их как одно входящее сообщение. Увеличьте значение, если части альбома поступают с задержкой; уменьшите его, чтобы сократить задержку ответа на альбом.channels.telegram.timeoutSecondsпереопределяет тайм-аут клиента API (если значение не задано, применяется значение по умолчанию grammY). Клиенты ботов ограничивают настроенные значения ниже 60-секундного защитного интервала для исходящих запросов текста и индикатора набора, чтобы grammY не прерывал доставку видимого ответа до того, как смогут сработать транспортный защитный механизм OpenClaw и резервный вариант. Для длительного опроса по-прежнему используется 45-секундный защитный интервал запросаgetUpdates, чтобы бездействующие опросы не оставались незавершёнными бесконечно.channels.telegram.pollingStallThresholdMsпо умолчанию равно 120000; настраивайте в диапазоне от 30000 до 600000 только при ложноположительных перезапусках из-за зависания опроса.- история контекста группы использует
channels.telegram.historyLimitилиmessages.groupChat.historyLimit(по умолчанию 50);0отключает её. - дополнительный контекст ответа, цитаты или пересылки нормализуется в одно выбранное окно контекста беседы, если Gateway наблюдал родительские сообщения; кеш наблюдаемых сообщений хранится в состоянии плагина OpenClaw в SQLite, а
openclaw doctor --fixимпортирует устаревшие вспомогательные файлы. Telegram включает только один неглубокийreply_to_messageв каждое обновление, поэтому цепочки старше кеша ограничены этими данными. - списки разрешённых пользователей Telegram в первую очередь определяют, кто может запускать агента, а не служат полноценной границей редактирования дополнительного контекста.
- история личных сообщений:
channels.telegram.dmHistoryLimit,channels.telegram.dms["<user_id>"].historyLimit. channels.telegram.retryприменяется к вспомогательным функциям отправки Telegram (CLI/инструменты/действия) при устранимых ошибках исходящего API. Для доставки итогового ответа на входящее сообщение используется ограниченное число безопасных повторных попыток при сбоях до подключения, но неоднозначные сетевые ответы после отправки не повторяются, поскольку это может привести к дублированию видимых сообщений.
openclaw message poll и поддерживают темы форума:--poll-duration-seconds (5-600), --poll-anonymous, --poll-public, --thread-id (или цель :topic:). --poll-option повторяется 2-12 раз (ограничение Telegram на количество вариантов).Отправка в Telegram также поддерживает --presentation с блоками buttons для встроенных клавиатур (если это разрешено channels.telegram.capabilities.inlineButtons), --pin или --delivery '{"pin":true}' для запроса закреплённой доставки, если бот может закреплять сообщения в этом чате, и --force-document для отправки исходящих изображений, GIF-файлов и видео как документов вместо сжатых изображений, анимаций или видео.Ограничение действий: channels.telegram.actions.sendMessage=false отключает все исходящие сообщения, включая опросы; channels.telegram.actions.poll=false отключает создание опросов, оставляя обычную отправку включённой.Подтверждение выполнения команд в Telegram
Подтверждение выполнения команд в Telegram
channels.telegram.execApprovals.enabled("auto"включает функцию, если можно определить хотя бы одно подтверждающее лицо)channels.telegram.execApprovals.approvers(если значение отсутствует, используются числовые идентификаторы владельцев изcommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(по умолчанию) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom и defaultTo определяют, кто может обращаться к боту и куда он отправляет обычные ответы, — они не наделяют пользователя правом подтверждать выполнение команд. Первое одобренное сопряжение в личных сообщениях инициализирует commands.ownerAllowFrom, если владелец команд ещё не существует, поэтому конфигурации с одним владельцем работают без дублирования идентификаторов в execApprovals.approvers.При доставке в канал текст команды отображается в чате; включайте channel или both только в доверенных группах или темах. Если запрос поступает в тему форума, OpenClaw сохраняет тему для запроса подтверждения и последующих сообщений. По умолчанию срок действия подтверждений выполнения команд истекает через 30 минут.Для встроенных кнопок подтверждения также требуется, чтобы channels.telegram.capabilities.inlineButtons разрешал целевую область (dm, group или all). Идентификаторы подтверждения с префиксом plugin: обрабатываются через подтверждения плагина; остальные сначала обрабатываются через подтверждения выполнения команд.См. Подтверждение выполнения команд.Управление ответами об ошибках
Когда агент сталкивается с ошибкой доставки или провайдера, политика ошибок определяет, будут ли сообщения об ошибках отправлены в чат Telegram:Устранение неполадок
Бот не отвечает на сообщения группы без упоминания
Бот не отвечает на сообщения группы без упоминания
- Если
requireMention=false, режим конфиденциальности Telegram должен обеспечивать полную видимость: BotFather/setprivacy-> Disable, затем удалите бота из группы и добавьте его снова. openclaw channels statusпредупреждает, когда конфигурация предполагает обработку сообщений группы без упоминания.openclaw channels status --probeпроверяет явно указанные числовые идентификаторы групп; принадлежность по шаблону"*"проверить невозможно.- Быстрая проверка сеанса:
/activation always.
Бот вообще не видит сообщения группы
Бот вообще не видит сообщения группы
- Если существует
channels.telegram.groups, группа должна быть указана в списке (либо список должен содержать"*"). - Проверьте, состоит ли бот в группе.
- Причины пропуска см. в
openclaw logs --follow.
Команды работают частично или не работают вовсе
Команды работают частично или не работают вовсе
- Авторизуйте идентификатор отправителя (через сопряжение и/или числовой
allowFrom); авторизация команд применяется, даже если политика группы имеет значениеopen. setMyCommands failedвместе сBOT_COMMANDS_TOO_MUCHозначает, что нативное меню содержит слишком много пунктов; сократите количество команд плагинов, навыков или пользовательских команд либо отключите нативные меню.- Вызовы запуска
deleteMyCommands/setMyCommandsи вызовы индикатора набораsendChatActionограничены по времени и при тайм-ауте запроса повторяются один раз через резервный транспорт Telegram. Постоянные ошибки сети или fetch обычно означают, чтоapi.telegram.orgнедоступен по DNS/HTTPS.
При запуске сообщается о неавторизованном токене
При запуске сообщается о неавторизованном токене
getMe returned 401— это ошибка аутентификации Telegram для настроенного токена бота. Повторно скопируйте или сгенерируйте токен в BotFather, затем обновитеchannels.telegram.botToken,tokenFile,accounts.<id>.botTokenилиTELEGRAM_BOT_TOKEN(учётная запись по умолчанию).deleteWebhook 401 Unauthorizedво время запуска также является ошибкой аутентификации; если интерпретировать её как «Webhook отсутствует», это лишь отложит ту же ошибку некорректного токена до следующего вызова API.
Нестабильность опроса или сети
Нестабильность опроса или сети
- Node 22+ с пользовательским fetch или прокси может вызывать немедленное прерывание, если типы
AbortSignalне совпадают. - Некоторые хосты сначала разрешают
api.telegram.orgв IPv6; неисправный исходящий трафик IPv6 вызывает периодические сбои API. - Ошибки в журналах с
TypeError: fetch failedилиNetwork request for 'getUpdates' failed!считаются устранимыми сетевыми ошибками и вызывают повторные попытки. - Во время запуска опроса OpenClaw повторно использует успешную стартовую проверку
getMeдля grammY, поэтому среде выполнения не требуется второйgetMeперед первымgetUpdates. - Если
deleteWebhookзавершается с временной сетевой ошибкой во время запуска опроса, OpenClaw переходит к длительному опросу вместо ещё одного вызова управляющего API перед опросом. Если Webhook всё ещё активен, возникает конфликтgetUpdates; OpenClaw пересоздаёт транспорт и повторяет очистку Webhook. - Если сокеты Telegram пересоздаются через короткие фиксированные интервалы, проверьте, не задано ли низкое значение
channels.telegram.timeoutSeconds: клиенты ботов ограничивают настроенные значения ниже защитных интервалов исходящих запросов и запросовgetUpdates, однако старые выпуски могли прерывать каждый опрос или ответ, если это значение было ниже указанных интервалов. Polling stall detectedв журналах означает, что OpenClaw перезапускает опрос и пересоздаёт транспорт после 120 секунд без завершённой проверки активности длительного опроса по умолчанию.openclaw channels status --probeиopenclaw doctorпредупреждают, если работающая учётная запись с опросом не завершилаgetUpdatesпосле льготного периода запуска, работающая учётная запись с Webhook не завершилаsetWebhookпосле льготного периода запуска либо последняя успешная активность транспорта опроса устарела.- Увеличивайте
channels.telegram.pollingStallThresholdMsтолько тогда, когда длительные вызовыgetUpdatesработают корректно, но хост по-прежнему сообщает о ложных перезапусках из-за зависания опроса. Постоянные зависания обычно указывают на проблемы прокси, DNS, IPv6 или исходящего TLS-соединения сapi.telegram.org. - Telegram учитывает переменные окружения прокси процесса для транспорта Bot API:
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYи варианты в нижнем регистре.NO_PROXY/no_proxyпо-прежнему могут обходитьapi.telegram.org. - Если для служебной среды задан
OPENCLAW_PROXY_URL, а стандартные переменные окружения прокси отсутствуют, Telegram также использует этот URL для транспорта Bot API. - На VPS-хостах с нестабильным прямым исходящим соединением или TLS направьте вызовы API Telegram через прокси:
- Node 22+ по умолчанию использует
autoSelectFamily=true(кроме WSL2). Порядок результатов DNS для Telegram учитывает сначалаOPENCLAW_TELEGRAM_DNS_RESULT_ORDER, затемchannels.telegram.network.dnsResultOrder, а затем значение процесса по умолчанию (например,NODE_OPTIONS=--dns-result-order=ipv4first); если ни одно из них не применимо, в Node 22+ используется резервное значениеipv4first. - В WSL2 или когда лучше работает режим только IPv4 принудительно задайте выбор семейства адресов:
- Ответы из диапазона для тестирования производительности RFC 2544 (
198.18.0.0/15) уже по умолчанию разрешены для загрузки медиафайлов Telegram. Если доверенный прокси-сервер с подменой IP-адресов или прозрачный прокси-сервер при загрузке медиафайлов перенаправляетapi.telegram.orgна другой частный, внутренний или специальный адрес, включите обход только для Telegram:
- Такую же возможность можно включить для отдельной учётной записи в
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Если ваш прокси-сервер разрешает имена хостов медиафайлов Telegram в
198.18.x.x, сначала оставьте опасный флаг выключенным — этот диапазон уже разрешён по умолчанию.
- Временные переопределения через переменные окружения:
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1,OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first. - Проверьте ответы DNS:
Справочник по конфигурации
Основной справочник: Справочник по конфигурации — Telegram.Основные поля Telegram
Основные поля Telegram
- запуск/аутентификация:
enabled,botToken,tokenFile(должен быть обычным файлом; символьные ссылки отклоняются),accounts.* - управление доступом:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, верхнеуровневыйbindings[](type: "acp") - значения тем по умолчанию:
groups.<chatId>.topics."*"применяется к темам форума без совпадений; точные идентификаторы тем имеют приоритет - подтверждения выполнения:
execApprovals,accounts.*.execApprovals - команды/меню:
commands.native,commands.nativeSkills,customCommands - ветки/ответы:
replyToMode,threadBindings - потоковая передача:
streaming(режимыoff | partial | block | progress),streaming.preview.toolProgress - форматирование/доставка:
textChunkLimit,streaming.chunkMode,richMessages,markdown.tables(off | bullets | code | block),linkPreview,responsePrefix - медиафайлы/сеть:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - пользовательский корневой адрес API:
apiRoot(только корневой адрес Bot API; не включайте/bot<TOKEN>),trustedLocalFileRoots(абсолютные корневые адресаfile_pathсамостоятельно размещённого Bot API) - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost,webhookPort,webhookCertPath - действия/возможности:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker|createForumTopic|editForumTopic - реакции:
reactionNotifications,reactionLevel - ошибки:
errorPolicy,errorCooldownMs,silentErrorReplies - запись/история:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount (или включите channels.telegram.accounts.default), чтобы явно указать маршрутизацию по умолчанию. В противном случае OpenClaw использует первый нормализованный идентификатор учётной записи, а openclaw doctor выводит предупреждение. Именованные учётные записи наследуют channels.telegram.allowFrom / groupAllowFrom, но не значения accounts.default.*.