Готово для production-використання з DM ботів і групами через grammY. Long polling є режимом за замовчуванням; режим webhook є необов’язковим.Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Сполучення
Усунення несправностей каналу
Конфігурація Gateway
Швидке налаштування
Створіть токен бота в BotFather
@BotFather).Запустіть /newbot, виконайте підказки та збережіть токен.Налаштуйте токен і політику DM
TELEGRAM_BOT_TOKEN=... (лише стандартний обліковий запис).
Telegram не використовує openclaw channels login telegram; налаштуйте токен у конфігурації/env, потім запустіть gateway.Додайте бота до групи
- ваш Telegram user ID, який використовується в
allowFrom/groupAllowFrom - Telegram group chat ID, який використовується як ключ у
channels.telegram.groups
openclaw logs --follow, бота для forwarded-ID або Bot API getUpdates. Після дозволу групи /whoami@<bot_username> може підтвердити user і group IDs.Від’ємні Telegram supergroup IDs, що починаються з -100, є group chat IDs. Розміщуйте їх у channels.telegram.groups, а не в groupAllowFrom.TELEGRAM_BOT_TOKEN застосовується лише до стандартного облікового запису.Налаштування на стороні Telegram
Режим приватності та видимість у групах
Режим приватності та видимість у групах
- вимкніть режим приватності через
/setprivacy, або - зробіть бота адміністратором групи.
Дозволи групи
Дозволи групи
Корисні перемикачі BotFather
Корисні перемикачі BotFather
/setjoingroups, щоб дозволити/заборонити додавання до груп/setprivacyдля поведінки видимості в групах
Контроль доступу та активація
- Політика DM
- Політика груп і allowlists
- Поведінка згадок
channels.telegram.dmPolicy керує доступом до direct message:pairing(за замовчуванням)allowlist(потрібен принаймні один sender ID уallowFrom)open(потрібно, щобallowFromмістив"*")disabled
dmPolicy: "open" з allowFrom: ["*"] дає змогу будь-якому обліковому запису Telegram, який знайде або вгадає username бота, керувати ботом. Використовуйте це лише для навмисно публічних ботів із жорстко обмеженими інструментами; боти з одним власником мають використовувати allowlist із числовими user IDs.channels.telegram.allowFrom приймає числові Telegram user IDs. Префікси telegram: / tg: приймаються та нормалізуються.
У конфігураціях із кількома обліковими записами обмежувальний верхньорівневий channels.telegram.allowFrom розглядається як межа безпеки: записи рівня облікового запису allowFrom: ["*"] не роблять цей обліковий запис публічним, якщо ефективний allowlist облікового запису після злиття не містить явного wildcard.
dmPolicy: "allowlist" з порожнім allowFrom блокує всі DM і відхиляється валідацією конфігурації.
Налаштування запитує лише числові user IDs.
Якщо ви оновилися і ваша конфігурація містить записи allowlist @username, запустіть openclaw doctor --fix, щоб їх розв’язати (найкраще можливе відновлення; потрібен Telegram bot token).
Якщо раніше ви покладалися на файли allowlist зі сховища сполучень, openclaw doctor --fix може відновити записи в channels.telegram.allowFrom у потоках allowlist (наприклад, коли dmPolicy: "allowlist" ще не має явних IDs).Для ботів з одним власником надавайте перевагу dmPolicy: "allowlist" з явними числовими IDs у allowFrom, щоб політика доступу була надійно закріплена в конфігурації (а не залежала від попередніх схвалень сполучення).Поширена плутанина: схвалення сполучення DM не означає «цей відправник авторизований скрізь».
Сполучення надає доступ до DM. Якщо command owner ще не існує, перше схвалене сполучення також встановлює commands.ownerAllowFrom, щоб команди лише для власника та схвалення exec мали явний обліковий запис оператора.
Авторизація відправника в групі все одно походить з явних allowlists конфігурації.
Якщо ви хочете «я авторизований один раз, і працюють як DM, так і групові команди», додайте свій числовий Telegram user ID у channels.telegram.allowFrom; для команд лише для власника переконайтеся, що commands.ownerAllowFrom містить telegram:<your user id>.Як знайти свій Telegram user ID
Безпечніше (без стороннього бота):- Напишіть DM своєму боту.
- Запустіть
openclaw logs --follow. - Прочитайте
from.id.
@userinfobot або @getidsbot.Поведінка runtime
- Telegram належить процесу gateway.
- Маршрутизація детермінована: вхідні Telegram відповідають назад у Telegram (модель не вибирає канали).
- Вхідні повідомлення нормалізуються в спільний envelope каналу з метаданими відповіді, placeholders для медіа та збереженим контекстом ланцюжка відповідей для відповідей Telegram, які спостерігав gateway.
- Групові сесії ізольовані за group ID. Forum topics додають
:topic:<threadId>, щоб ізолювати topics. - DM-повідомлення можуть містити
message_thread_id; OpenClaw зберігає thread ID для відповідей, але за замовчуванням тримає DM у плоскій сесії. Налаштуйтеchannels.telegram.dm.threadReplies: "inbound",channels.telegram.direct.<chatId>.threadReplies: "inbound",requireTopic: trueабо відповідну конфігурацію topic, коли ви навмисно хочете ізоляцію сесій DM topic. - Long polling використовує grammY runner із послідовністю на рівні чату/потоку. Загальна concurrency runner sink використовує
agents.defaults.maxConcurrent. - Long polling захищений усередині кожного процесу gateway, щоб лише один активний poller міг використовувати bot token одночасно. Якщо ви все ще бачите конфлікти
getUpdates409, імовірно, інший OpenClaw gateway, скрипт або зовнішній poller використовує той самий токен. - Перезапуски long-polling watchdog за замовчуванням запускаються після 120 секунд без завершеної liveness
getUpdates. Збільшуйтеchannels.telegram.pollingStallThresholdMsлише якщо ваше розгортання все ще бачить хибні перезапуски через polling-stall під час довготривалої роботи. Значення в мілісекундах і дозволене в діапазоні від30000до600000; підтримуються перевизначення на рівні облікового запису. - Telegram Bot API не має підтримки read-receipt (
sendReadReceiptsне застосовується).
Довідник функцій
Попередній перегляд live stream (редагування повідомлень)
Попередній перегляд live stream (редагування повідомлень)
- direct chats: повідомлення попереднього перегляду +
editMessageText - групи/topics: повідомлення попереднього перегляду +
editMessageText
channels.telegram.streamingмає значенняoff | partial | block | progress(стандартно:partial)progressутримує один редагований чернетковий статус для перебігу виконання інструментів, очищає його після завершення й надсилає фінальну відповідь як звичайне повідомленняstreaming.preview.toolProgressкерує тим, чи оновлення інструментів/перебігу повторно використовують те саме редаговане повідомлення попереднього перегляду (стандартно:true, коли потоковий попередній перегляд активний)streaming.preview.commandTextкерує деталями команд/виконання всередині цих рядків перебігу виконання інструментів:raw(стандартно, зберігає випущену поведінку) абоstatus(лише мітка інструмента)- застарілі значення
channels.telegram.streamModeі булеві значенняstreamingвиявляються; запустітьopenclaw doctor --fix, щоб мігрувати їх уchannels.telegram.streaming.mode
v2026.4.22 і пізніше. Щоб зберегти редагований попередній перегляд для тексту відповіді, але приховати рядки перебігу виконання інструментів, задайте:progress, коли вам потрібен видимий перебіг виконання інструментів без редагування фінальної відповіді в тому самому повідомленні. Розмістіть політику тексту команд у streaming.progress:streaming.mode: "off" лише тоді, коли потрібна доставка тільки фінального результату: редагування попереднього перегляду Telegram вимикаються, а загальні повідомлення про інструменти/перебіг пригнічуються замість надсилання як окремі статусні повідомлення. Запити на схвалення, медіанавантаження й помилки все одно проходять через звичайну фінальну доставку. Використовуйте streaming.preview.toolProgress: false, коли потрібно лише зберегти редагування попереднього перегляду відповіді, приховуючи рядки статусу перебігу виконання інструментів.replyToMode дорівнює "first", "all" або "batched" і вхідне повідомлення містить текст вибраної цитати, OpenClaw надсилає фінальну відповідь через нативний шлях quote-reply Telegram замість редагування попереднього перегляду відповіді, тому streaming.preview.toolProgress не може показати короткі рядки статусу для цього ходу. Відповіді на поточне повідомлення без тексту вибраної цитати все ще зберігають потоковий попередній перегляд. Задайте replyToMode: "off", коли видимість перебігу виконання інструментів важливіша за нативні quote-reply, або задайте streaming.preview.toolProgress: false, щоб визнати цей компроміс.- короткі попередні перегляди в особистих повідомленнях/групах/темах: OpenClaw зберігає те саме повідомлення попереднього перегляду й виконує фінальне редагування на місці
- довгі фінальні тексти, що розбиваються на кілька повідомлень Telegram, повторно використовують наявний попередній перегляд як перший фінальний фрагмент, коли це можливо, а потім надсилають лише решту фрагментів
- фінальні результати режиму progress очищають чернетку статусу й використовують звичайну фінальну доставку замість редагування чернетки у відповідь
- якщо фінальне редагування не вдається до підтвердження завершеного тексту, OpenClaw використовує звичайну фінальну доставку й очищає застарілий попередній перегляд
/reasoning streamнадсилає міркування в live-попередній перегляд під час генерації- попередній перегляд міркувань видаляється після фінальної доставки; використовуйте
/reasoning on, коли міркування мають залишатися видимими - фінальна відповідь надсилається без тексту міркувань
Форматування та резервний HTML
Форматування та резервний HTML
parse_mode: "HTML".- Markdown-подібний текст рендериться в безпечний для Telegram HTML.
- Підтримувані HTML-теги Telegram зберігаються; непідтримуваний HTML екранується.
- Якщо Telegram відхиляє розібраний HTML, OpenClaw повторює надсилання як звичайний текст.
channels.telegram.linkPreview: false.Нативні команди й користувацькі команди
Нативні команди й користувацькі команди
setMyCommands.Стандартні значення нативних команд:commands.native: "auto"вмикає нативні команди для Telegram
- назви нормалізуються (видаляється початковий
/, нижній регістр) - допустимий шаблон:
a-z,0-9,_, довжина1..32 - користувацькі команди не можуть перевизначати нативні команди
- конфлікти/дублікати пропускаються й логуються
- користувацькі команди є лише записами меню; вони не реалізують поведінку автоматично
- команди plugin/skill усе ще можуть працювати під час введення, навіть якщо їх не показано в меню Telegram
setMyCommands failedзBOT_COMMANDS_TOO_MUCHозначає, що меню Telegram усе ще переповнене після обрізання; зменште кількість команд plugin/skill/користувацьких команд або вимкніть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 зупиняється до polling, тому це не повідомляється як помилка очищення webhook.setMyCommands failedз помилками мережі/fetch зазвичай означає, що вихідний DNS/HTTPS доapi.telegram.orgзаблоковано.
Команди сполучення пристрою (device-pair plugin)
Коли встановлено device-pair plugin:/pairгенерує код налаштування- вставте код у застосунок iOS
/pair pendingпоказує список запитів, що очікують (включно з роллю/областями дії)- схваліть запит:
/pair approve <requestId>для явного схвалення/pair approve, коли є лише один запит, що очікує/pair approve latestдля найновішого
scopes: []; будь-який переданий операторський токен залишається обмеженим до operator.approvals, operator.read, operator.talk.secrets і operator.write. Перевірки областей дії bootstrap мають префікс ролі, тому цей allowlist оператора задовольняє лише операторські запити; неоператорські ролі все ще потребують областей дії під власним префіксом ролі.Якщо пристрій повторює спробу зі зміненими деталями автентифікації (наприклад, роллю/областями дії/публічним ключем), попередній запит, що очікує, замінюється, а новий запит використовує інший requestId. Повторно запустіть /pair pending перед схваленням.Докладніше: Сполучення.Вбудовані кнопки
Вбудовані кнопки
offdmgroupallallowlist(стандартно)
capabilities: ["inlineButtons"] зіставляється з inlineButtons: "all".Приклад дії з повідомленням:callback_data: <value>Дії повідомлень Telegram для агентів і автоматизації
Дії повідомлень Telegram для агентів і автоматизації
sendMessage(to,content, необов’язковоmediaUrl,replyToMessageId,messageThreadId)react(chatId,messageId,emoji)deleteMessage(chatId,messageId)editMessage(chatId,messageId,content)createForumTopic(chatId,name, необов’язковоiconColor,iconCustomEmojiId)
send, react, delete, edit, sticker, sticker-search, topic-create).Елементи керування доступом:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(стандартно: вимкнено)
edit і topic-create наразі ввімкнені стандартно й не мають окремих перемикачів channels.telegram.actions.*.
Runtime-надсилання використовують активний знімок конфігурації/секретів (запуск/перезавантаження), тому шляхи дій не виконують спеціальне повторне розв’язання SecretRef для кожного надсилання.Семантика видалення реакцій: /tools/reactionsТеги потоків відповідей
Теги потоків відповідей
[[reply_to_current]]відповідає на повідомлення-тригер[[reply_to:<id>]]відповідає на конкретний ID повідомлення Telegram
channels.telegram.replyToMode керує обробкою:off(стандартно)firstall
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 стосується лише теми й не успадковується зі стандартних налаштувань групи.Маршрутизація агентів за темами: кожна тема може маршрутизуватися до іншого агента через встановлення agentId у конфігурації теми. Це дає кожній темі власний ізольований робочий простір, пам’ять і сесію. Приклад:agent:zu:telegram:group:-1001234567890:topic:3Постійне прив’язування тем ACP: теми форуму можуть закріплювати сесії ACP harness через типізовані 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. DM-чати з message_thread_id за замовчуванням зберігають маршрутизацію DM і метадані відповіді у пласких сесіях; вони використовують ключі сесій з урахуванням гілок лише тоді, коли налаштовано threadReplies: "inbound", threadReplies: "always", requireTopic: true або відповідну конфігурацію теми. Використовуйте верхньорівневий channels.telegram.dm.threadReplies як типове значення для акаунта або direct.<chatId>.threadReplies для одного DM.Аудіо, відео та стікери
Аудіо, відео та стікери
Аудіоповідомлення
Telegram розрізняє голосові нотатки та аудіофайли.- за замовчуванням: поведінка аудіофайлу
- тег
[[audio_as_voice]]у відповіді агента примусово надсилає голосову нотатку - транскрипти вхідних голосових нотаток оформлюються як машинно згенерований, недовірений текст у контексті агента; виявлення згадок усе одно використовує сирий транскрипт, тому голосові повідомлення з обмеженням за згадкою продовжують працювати.
Відеоповідомлення
Telegram розрізняє відеофайли та відеонотатки.Приклад дії з повідомленням:Стікери
Обробка вхідних стікерів:- статичний WEBP: завантажується й обробляється (заповнювач
<media:sticker>) - анімований TGS: пропускається
- відео WEBM: пропускається
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
Сповіщення про реакції
Сповіщення про реакції
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 обробляє вхідне повідомлення.Порядок визначення:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- запасний емодзі ідентичності агента (
agents.list[].identity.emoji, інакше ”👀”)
- Telegram очікує unicode-емодзі (наприклад, ”👀”).
- Використовуйте
"", щоб вимкнути реакцію для каналу або акаунта.
Записи конфігурації з подій і команд 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, webhookHost, webhookPort (за замовчуванням /telegram-webhook, 127.0.0.1, 8787).У режимі довгого опитування OpenClaw зберігає свій водяний знак перезапуску лише після успішного диспетчеризування оновлення. Якщо обробник завершується з помилкою, це оновлення залишається доступним для повторної спроби в тому самому процесі й не записується як завершене для дедуплікації після перезапуску.Локальний слухач прив’язується до 127.0.0.1:8787. Для публічного входу або поставте зворотний проксі перед локальним портом, або навмисно задайте webhookHost: "0.0.0.0".Режим Webhook перевіряє захисти запиту, секретний токен Telegram і JSON-тіло перед поверненням 200 до Telegram.
Потім OpenClaw обробляє оновлення асинхронно через ті самі бот-лінії на чат/тему, що використовуються довгим опитуванням, тому повільні ходи агента не блокують ACK доставки Telegram.Обмеження, повторні спроби та цілі CLI
Обмеження, повторні спроби та цілі CLI
channels.telegram.textChunkLimitза замовчуванням дорівнює 4000.channels.telegram.chunkMode="newline"надає перевагу межам абзаців (порожнім рядкам) перед розбиттям за довжиною.channels.telegram.mediaMaxMb(за замовчуванням 100) обмежує розмір вхідних і вихідних медіа Telegram.channels.telegram.mediaGroupFlushMs(за замовчуванням 500) керує тим, як довго альбоми/медіагрупи Telegram буферизуються перед тим, як OpenClaw диспетчеризує їх як одне вхідне повідомлення. Збільшіть це значення, якщо частини альбому надходять із запізненням; зменшіть його, щоб скоротити затримку відповіді на альбом.channels.telegram.timeoutSecondsперевизначає тайм-аут клієнта Telegram API (якщо не задано, застосовується типове значення grammY). Клієнти ботів обмежують налаштовані значення нижче 60-секундного захисту вихідного запиту тексту/набору, щоб grammY не переривав видиму доставку відповіді до того, як зможуть спрацювати транспортний захист і запасний механізм OpenClaw. Довге опитування й далі використовує 45-секундний захист запитуgetUpdates, щоб бездіяльні опитування не залишалися покинутими безстроково.channels.telegram.pollingStallThresholdMsза замовчуванням дорівнює120000; налаштовуйте в межах від30000до600000лише для хибнопозитивних перезапусків через зависання опитування.- історія контексту групи використовує
channels.telegram.historyLimitабоmessages.groupChat.historyLimit(за замовчуванням 50);0вимикає. - додатковий контекст відповіді/цитати/пересилання нормалізується в одне вибране вікно контексту розмови, коли Gateway спостерігав батьківські повідомлення; кеш спостережених повідомлень зберігається поруч зі сховищем сесій. Telegram включає в оновлення лише один поверхневий
reply_to_message, тому ланцюжки, старші за кеш, обмежені поточним корисним навантаженням оновлення Telegram. - allowlist Telegram переважно обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту.
- Керування історією DM:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
- конфігурація
channels.telegram.retryзастосовується до допоміжних функцій надсилання Telegram (CLI/інструменти/дії) для відновлюваних вихідних помилок API. Доставка фінальної вхідної відповіді також використовує обмежену повторну спробу безпечного надсилання для помилок Telegram до підключення, але не повторює неоднозначні мережеві оболонки після надсилання, які можуть дублювати видимі повідомлення.
openclaw message poll і підтримують теми форуму:--poll-duration-seconds(5-600)--poll-anonymous--poll-public--thread-idдля тем форуму (або використовуйте ціль:topic:)
--presentationз блокамиbuttonsдля вбудованих клавіатур, колиchannels.telegram.capabilities.inlineButtonsце дозволяє--pinабо--delivery '{"pin":true}', щоб запросити закріплену доставку, коли бот може закріплювати в цьому чаті--force-document, щоб надсилати вихідні зображення, GIF і відео як документи замість стиснених фото, анімованих медіа або відеозавантажень
channels.telegram.actions.sendMessage=falseвимикає вихідні повідомлення Telegram, включно з опитуваннямиchannels.telegram.actions.poll=falseвимикає створення опитувань Telegram, залишаючи звичайне надсилання ввімкненим
Підтвердження exec у Telegram
Підтвердження exec у Telegram
channels.telegram.execApprovals.enabled(автоматично вмикається, коли можна визначити принаймні одного схвалювача)channels.telegram.execApprovals.approvers(повертається до числових ID власників ізcommands.ownerAllowFrom)channels.telegram.execApprovals.target:dm(за замовчуванням) |channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom, groupAllowFrom і defaultTo керують тим, хто може говорити з ботом і куди він надсилає звичайні відповіді. Вони не роблять когось схвалювачем exec. Перше схвалене DM-спарювання ініціалізує commands.ownerAllowFrom, коли власника команд ще немає, тому налаштування з одним власником і далі працює без дублювання ID у execApprovals.approvers.Доставка в канал показує текст команди в чаті; вмикайте channel або both лише в довірених групах/темах. Коли запит потрапляє в тему форуму, OpenClaw зберігає тему для запиту схвалення та подальшої відповіді. Підтвердження exec за замовчуванням спливають через 30 хвилин.Вбудовані кнопки схвалення також вимагають, щоб channels.telegram.capabilities.inlineButtons дозволяв цільову поверхню (dm, group або all). ID схвалення з префіксом plugin: розв’язуються через схвалення plugin; інші спочатку розв’язуються через підтвердження exec.Див. Підтвердження exec.Керування відповідями про помилки
Коли агент стикається з помилкою доставки або провайдера, Telegram може або відповісти текстом помилки, або приховати її. Цю поведінку керують два ключі конфігурації:| Ключ | Значення | Типово | Опис |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply надсилає дружнє повідомлення про помилку в чат. silent повністю пригнічує відповіді про помилки. |
channels.telegram.errorCooldownMs | number (ms) | 60000 | Мінімальний час між відповідями про помилки в той самий чат. Запобігає спаму помилками під час збоїв. |
Усунення несправностей
Бот не відповідає на групові повідомлення без згадки
Бот не відповідає на групові повідомлення без згадки
- Якщо
requireMention=false, режим приватності Telegram має дозволяти повну видимість.- BotFather:
/setprivacy-> Disable - потім видаліть і повторно додайте бота до групи
- BotFather:
openclaw channels statusпопереджає, коли конфігурація очікує групові повідомлення без згадки.openclaw channels status --probeможе перевіряти явні числові ID груп; wildcard"*"не можна перевірити на членство.- швидкий тест сеансу:
/activation always.
Бот узагалі не бачить групові повідомлення
Бот узагалі не бачить групові повідомлення
- коли існує
channels.telegram.groups, група має бути в списку (або містити"*") - перевірте членство бота в групі
- перегляньте журнали:
openclaw logs --followдля причин пропуску
Команди працюють частково або не працюють узагалі
Команди працюють частково або не працюють узагалі
- авторизуйте ідентичність відправника (спарювання та/або числовий
allowFrom) - авторизація команд усе одно застосовується, навіть коли політика групи —
open setMyCommands failedзBOT_COMMANDS_TOO_MUCHозначає, що в нативному меню забагато записів; зменште кількість команд plugin/skill/користувацьких команд або вимкніть нативні меню- стартові виклики
deleteMyCommands/setMyCommandsі виклики індикації наборуsendChatActionобмежені за часом і повторюються один раз через резервний транспорт Telegram у разі тайм-ауту запиту. Постійні помилки мережі/fetch зазвичай вказують на проблеми доступності DNS/HTTPS доapi.telegram.org
Під час запуску повідомляється про неавторизований токен
Під час запуску повідомляється про неавторизований токен
getMe returned 401— це помилка автентифікації Telegram для налаштованого токена бота.- Скопіюйте повторно або згенеруйте заново токен бота в BotFather, потім оновіть
channels.telegram.botToken,channels.telegram.tokenFile,channels.telegram.accounts.<id>.botTokenабоTELEGRAM_BOT_TOKENдля облікового запису за замовчуванням. deleteWebhook 401 Unauthorizedпід час запуску також є помилкою автентифікації; трактування цього як “webhook не існує” лише відклало б ту саму помилку поганого токена до пізніших викликів API.
Нестабільність опитування або мережі
Нестабільність опитування або мережі
- Node 22+ + користувацький fetch/proxy може спричиняти негайне переривання, якщо типи AbortSignal не збігаються.
- Деякі хости спочатку розв’язують
api.telegram.orgв IPv6; несправний вихід IPv6 може спричиняти періодичні збої Telegram API. - Якщо журнали містять
TypeError: fetch failedабоNetwork request for 'getUpdates' failed!, OpenClaw тепер повторює їх як відновлювані мережеві помилки. - Під час запуску опитування OpenClaw повторно використовує успішну стартову перевірку
getMeдля grammY, тож runner не потребує другогоgetMeперед першимgetUpdates. - Якщо
deleteWebhookзавершується тимчасовою мережевою помилкою під час запуску опитування, OpenClaw переходить до long polling замість ще одного передопитувального виклику control-plane. Активний webhook проявляється як конфліктgetUpdates; тоді OpenClaw перебудовує транспорт Telegram і повторює очищення webhook. - Якщо сокети Telegram повторно створюються з коротким фіксованим інтервалом, перевірте, чи не занизьке
channels.telegram.timeoutSeconds; клієнти ботів обмежують налаштовані значення нижче outbound-запобіжників і запобіжників запитівgetUpdates, але старіші випуски могли переривати кожне опитування або відповідь, коли це значення було нижчим за ці запобіжники. - Якщо журнали містять
Polling stall detected, OpenClaw перезапускає опитування і перебудовує транспорт Telegram після 120 секунд без завершеної перевірки живучості long-poll за замовчуванням. openclaw channels status --probeіopenclaw doctorпопереджають, коли запущений обліковий запис опитування не завершивgetUpdatesпісля пільгового періоду запуску, коли запущений webhook-обліковий запис не завершивsetWebhookпісля пільгового періоду запуску, або коли остання успішна активність транспорту опитування застаріла.- Збільшуйте
channels.telegram.pollingStallThresholdMsлише тоді, коли довготривалі викликиgetUpdatesсправні, але ваш хост усе одно повідомляє про хибні перезапуски через зупинку опитування. Постійні зупинки зазвичай вказують на проблеми proxy, DNS, IPv6 або вихідного TLS між хостом іapi.telegram.org. - Telegram також враховує env proxy процесу для транспорту Bot API, зокрема
HTTP_PROXY,HTTPS_PROXY,ALL_PROXYта їхні варіанти в нижньому регістрі.NO_PROXY/no_proxyусе ще можуть обходитиapi.telegram.org. - Якщо керований proxy OpenClaw налаштовано через
OPENCLAW_PROXY_URLдля сервісного середовища і стандартних env proxy немає, Telegram також використовує цю URL-адресу для транспорту Bot API. - На VPS-хостах із нестабільним прямим виходом/TLS маршрутизуйте виклики Telegram API через
channels.telegram.proxy:
- 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, примусово задайте вибір family:
- Відповіді з benchmark-діапазону RFC 2544 (
198.18.0.0/15) уже дозволені для завантаження медіа Telegram за замовчуванням. Якщо довірений fake-IP або прозорий proxy переписуєapi.telegram.orgна якусь іншу приватну/внутрішню/спеціального використання адресу під час завантаження медіа, можна ввімкнути обхід лише для Telegram:
- Те саме явне ввімкнення доступне для кожного облікового запису за адресою
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork. - Якщо ваш proxy розв’язує медіахости Telegram у
198.18.x.x, спершу залиште небезпечний прапорець вимкненим. Медіа Telegram уже дозволяє benchmark-діапазон RFC 2544 за замовчуванням.
- Перевизначення середовища (тимчасові):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- Перевірте DNS-відповіді:
Довідник конфігурації
Основний довідник: Довідник конфігурації - Telegram.Високосигнальні поля Telegram
Високосигнальні поля Telegram
- запуск/автентифікація:
enabled,botToken,tokenFile,accounts.*(tokenFileмає вказувати на звичайний файл; символічні посилання відхиляються) - контроль доступу:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, top-levelbindings[](type: "acp") - схвалення exec:
execApprovals,accounts.*.execApprovals - команди/меню:
commands.native,commands.nativeSkills,customCommands - потоки/відповіді:
replyToMode,dm.threadReplies,direct.*.threadReplies - streaming:
streaming(попередній перегляд),streaming.preview.toolProgress,blockStreaming - форматування/доставка:
textChunkLimit,chunkMode,linkPreview,responsePrefix - медіа/мережа:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - користувацький корінь API:
apiRoot(лише корінь Bot API; не додавайте/bot<TOKEN>) - webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - дії/можливості:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - reactions:
reactionNotifications,reactionLevel - помилки:
errorPolicy,errorCooldownMs - записи/історія:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
channels.telegram.defaultAccount (або додайте channels.telegram.accounts.default), щоб зробити маршрутизацію за замовчуванням явною. Інакше OpenClaw повертається до першого нормалізованого ID облікового запису, а openclaw doctor попереджає. Іменовані облікові записи успадковують channels.telegram.allowFrom / groupAllowFrom, але не значення accounts.default.*.