Сполучення
Усунення несправностей каналів
Конфігурація 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-адреси міні-застосунку.- Ваш числовий ідентифікатор користувача 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 захищає тривале опитування, щоб токен бота одночасно міг використовувати лише один активний опитувач. Постійні конфлікти
getUpdates409 указують на інший 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, якщо ваша конфігурація все ще містить ці ключі. Маршрутизація тем в особистих чатах тепер відповідає Telegram getMe.has_topics_enabled (керується режимом потоків 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 стовпців, замінюються блоком коду.За замовчуванням: вимкнено задля сумісності з клієнтами — деякі актуальні клієнти для комп’ютерів, вебу, Android і сторонні клієнти відображають прийняті розширені повідомлення як непідтримувані. Не вмикайте цю функцію, якщо не всі клієнти, що використовуються з ботом, можуть їх відтворювати. /status показує, чи ввімкнено розширені повідомлення в поточному сеансі.Попередні перегляди посилань увімкнено за замовчуванням. channels.telegram.linkPreview: false вимикає автоматичне виявлення сутностей у розширеному тексті.Нативні та власні команди
Нативні та власні команди
setMyCommands. commands.native: "auto" вмикає нативні команди для Telegram.Додавання власних пунктів меню команд:/ видаляється, літери переводяться в нижній регістр); допустимий шаблон a-z, 0-9, _, довжина 1-32; власні команди не можуть перевизначати нативні; конфлікти й дублікати пропускаються та записуються в журнал.Власні команди є лише пунктами меню — вони не реалізують поведінку автоматично. Команди Plugin/Skills можуть і далі працювати після введення, навіть якщо їх немає в меню Telegram. Якщо нативні команди вимкнено, вбудовані команди видаляються; власні команди й команди Plugin можуть усе одно реєструватися, якщо їх налаштовано.Поширені помилки налаштування:setMyCommands failedзBOT_COMMANDS_TOO_MUCHпісля повторної спроби зі скороченням означає, що меню все ще переповнене; зменште кількість команд Plugin/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заблоковано.
Команди сполучення пристроїв (Plugin 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_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 спостерігав батьківські повідомлення; кеш спостережених повідомлень зберігається у стані Plugin SQLite OpenClaw, а
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: визначаються через схвалення 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означає, що нативне меню містить забагато пунктів; скоротіть кількість команд Plugin/Skills/власних команд або вимкніть нативні меню.- Виклики запуску
deleteMyCommands/setMyCommandsі виклики індикації наборуsendChatActionобмежені в часі та в разі завершення часу очікування запиту повторюються один раз через резервний транспорт Telegram. Постійні помилки мережі/отримання зазвичай означають, що DNS/HTTPS-з’єднання зapi.telegram.orgнедоступне.
Під час запуску повідомляється про неавторизований токен
Під час запуску повідомляється про неавторизований токен
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 переходить до тривалого опитування замість ще одного виклику площини керування перед опитуванням. Якщо 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.*.