chore(i18n): refresh uk translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-04-29 14:50:00 +00:00
parent ff7a031afa
commit 278b39131b
2 changed files with 372 additions and 366 deletions

View File

@ -4,25 +4,25 @@ read_when:
summary: Стан підтримки бота Telegram, можливості та конфігурація
title: Telegram
x-i18n:
generated_at: "2026-04-29T12:15:20Z"
generated_at: "2026-04-29T14:47:18Z"
model: gpt-5.5
provider: openai
source_hash: 500f1282c7d6f7350b781a2413737b0e34b00ea8b042703341fd9ddb700ecfb4
source_hash: 1ffc0c1a6bb94fbab81ede0f08b0e3a165f06c599d4d06d4b9e70c8ba41121f7
source_path: channels/telegram.md
workflow: 16
---
Готово до production для DM ботів і груп через grammY. Довге опитування є режимом за замовчуванням; режим Webhook необов’язковий.
Готове до production-використання для DM ботів і груп через grammY. Long polling є режимом за замовчуванням; режим webhook необов’язковий.
<CardGroup cols={3}>
<Card title="Сполучення" icon="link" href="/uk/channels/pairing">
Типова політика DM для Telegram — сполучення.
Політика DM за замовчуванням для Telegram — сполучення.
</Card>
<Card title="Усунення неполадок каналу" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та плейбуки відновлення.
<Card title="Усунення несправностей каналу" icon="wrench" href="/uk/channels/troubleshooting">
Міжканальна діагностика та сценарії відновлення.
</Card>
<Card title="Конфігурація Gateway" icon="settings" href="/uk/gateway/configuration">
Повні шаблони й приклади конфігурації каналу.
Повні шаблони та приклади конфігурації каналів.
</Card>
</CardGroup>
@ -30,9 +30,9 @@ x-i18n:
<Steps>
<Step title="Створіть токен бота в BotFather">
Відкрийте Telegram і поспілкуйтеся з **@BotFather** (переконайтеся, що ім’я користувача точно `@BotFather`).
Відкрийте Telegram і поспілкуйтеся з **@BotFather** (переконайтеся, що handle точно `@BotFather`).
Виконайте `/newbot`, дотримуйтесь підказок і збережіть токен.
Запустіть `/newbot`, дотримуйтесь підказок і збережіть токен.
</Step>
@ -52,7 +52,7 @@ x-i18n:
```
Резервний варіант env: `TELEGRAM_BOT_TOKEN=...` (лише обліковий запис за замовчуванням).
Telegram **не** використовує `openclaw channels login telegram`; налаштуйте токен у config/env, а потім запустіть gateway.
Telegram **не** використовує `openclaw channels login telegram`; налаштуйте токен у config/env, потім запустіть gateway.
</Step>
@ -69,33 +69,33 @@ openclaw pairing approve telegram <CODE>
</Step>
<Step title="Додайте бота до групи">
Додайте бота до своєї групи, а потім налаштуйте `channels.telegram.groups` і `groupPolicy` відповідно до вашої моделі доступу.
Додайте бота до своєї групи, потім налаштуйте `channels.telegram.groups` і `groupPolicy` відповідно до вашої моделі доступу.
</Step>
</Steps>
<Note>
Порядок визначення токена враховує обліковий запис. На практиці значення config мають пріоритет над резервним env, а `TELEGRAM_BOT_TOKEN` застосовується лише до облікового запису за замовчуванням.
Порядок визначення токена враховує облікові записи. На практиці значення config мають пріоритет над резервним env, а `TELEGRAM_BOT_TOKEN` застосовується лише до облікового запису за замовчуванням.
</Note>
## Налаштування на боці Telegram
## Налаштування з боку Telegram
<AccordionGroup>
<Accordion title="Режим приватності та видимість у групах">
Боти Telegram за замовчуванням використовують **Privacy Mode**, який обмежує, які групові повідомлення вони отримують.
Якщо бот має бачити всі групові повідомлення, або:
Якщо бот має бачити всі групові повідомлення, зробіть одне з такого:
- вимкніть режим приватності через `/setprivacy`, або
- зробіть бота адміністратором групи.
Після перемикання режиму приватності видаліть і повторно додайте бота в кожній групі, щоб Telegram застосував зміну.
Після перемикання режиму приватності видаліть і знову додайте бота в кожну групу, щоб Telegram застосував зміну.
</Accordion>
<Accordion title="Дозволи групи">
Статус адміністратора керується в налаштуваннях групи Telegram.
Боти-адміністратори отримують усі групові повідомлення, що корисно для постійно активної поведінки в групі.
Боти-адміністратори отримують усі групові повідомлення, що корисно для постійної поведінки в групах.
</Accordion>
@ -114,32 +114,32 @@ openclaw pairing approve telegram <CODE>
`channels.telegram.dmPolicy` керує доступом через прямі повідомлення:
- `pairing` (за замовчуванням)
- `allowlist` (потребує принаймні один ID відправника в `allowFrom`)
- `allowlist` (потребує принаймні одного ID відправника в `allowFrom`)
- `open` (потребує, щоб `allowFrom` містив `"*"`)
- `disabled`
`dmPolicy: "open"` з `allowFrom: ["*"]` дає змогу будь-якому обліковому запису Telegram, який знайде або вгадає ім’я користувача бота, керувати ботом. Використовуйте це лише для навмисно публічних ботів із суворо обмеженими інструментами; боти з одним власником мають використовувати `allowlist` із числовими ID користувачів.
`dmPolicy: "open"` з `allowFrom: ["*"]` дозволяє будь-якому обліковому запису Telegram, який знайде або вгадає ім’я користувача бота, керувати ботом. Використовуйте це лише для навмисно публічних ботів із жорстко обмеженими інструментами; боти з одним власником мають використовувати `allowlist` із числовими ID користувачів.
`channels.telegram.allowFrom` приймає числові ID користувачів Telegram. Префікси `telegram:` / `tg:` приймаються й нормалізуються.
У конфігураціях із кількома обліковими записами обмежувальний `channels.telegram.allowFrom` верхнього рівня вважається межею безпеки: записи `allowFrom: ["*"]` на рівні облікового запису не роблять цей обліковий запис публічним, якщо ефективний allowlist облікового запису після злиття все ще не містить явного wildcard.
`channels.telegram.allowFrom` приймає числові ID користувачів Telegram. Префікси `telegram:` / `tg:` приймаються та нормалізуються.
У конфігураціях із кількома обліковими записами обмежувальний верхньорівневий `channels.telegram.allowFrom` вважається межею безпеки: записи `allowFrom: ["*"]` на рівні облікового запису не роблять цей обліковий запис публічним, якщо ефективний список дозволених для облікового запису після об’єднання не містить явний wildcard.
`dmPolicy: "allowlist"` з порожнім `allowFrom` блокує всі DM і відхиляється перевіркою конфігурації.
Налаштування запитує лише числові ID користувачів.
Якщо ви оновилися й ваша конфігурація містить записи allowlist `@username`, виконайте `openclaw doctor --fix`, щоб розв’язати їх (best-effort; потребує токен бота Telegram).
Якщо ви раніше покладалися на файли allowlist зі сховища сполучень, `openclaw doctor --fix` може відновити записи в `channels.telegram.allowFrom` у потоках allowlist (наприклад, коли `dmPolicy: "allowlist"` ще не має явних ID).
Якщо ви оновилися і ваша конфігурація містить записи списку дозволених `@username`, запустіть `openclaw doctor --fix`, щоб їх розв’язати (best-effort; потрібен токен бота Telegram).
Якщо раніше ви покладалися на файли списку дозволених зі сховища сполучень, `openclaw doctor --fix` може відновити записи в `channels.telegram.allowFrom` у потоках allowlist (наприклад, коли `dmPolicy: "allowlist"` ще не має явних ID).
Для ботів з одним власником надавайте перевагу `dmPolicy: "allowlist"` з явними числовими ID `allowFrom`, щоб політика доступу була стійкою в config (замість залежності від попередніх схвалень сполучення).
Для ботів з одним власником надавайте перевагу `dmPolicy: "allowlist"` з явними числовими ID `allowFrom`, щоб політика доступу була сталою в конфігурації (замість залежності від попередніх схвалень сполучення).
Типова плутанина: схвалення сполучення DM не означає «цей відправник авторизований скрізь».
Поширене непорозуміння: схвалення сполучення DM не означає «цей відправник авторизований усюди».
Сполучення надає доступ до DM. Якщо власника команд ще немає, перше схвалене сполучення також встановлює `commands.ownerAllowFrom`, щоб команди лише для власника та схвалення exec мали явний обліковий запис оператора.
Авторизація відправника в групі все одно походить з явних allowlist у конфігурації.
Якщо ви хочете «мене авторизовано один раз, і працюють і DM, і групові команди», додайте свій числовий ID користувача Telegram до `channels.telegram.allowFrom`; для команд лише для власника переконайтеся, що `commands.ownerAllowFrom` містить `telegram:<your user id>`.
Авторизація відправників у групах усе ще походить із явних списків дозволених у конфігурації.
Якщо ви хочете «я авторизований один раз, і працюють як DM, так і групові команди», додайте свій числовий ID користувача Telegram у `channels.telegram.allowFrom`; для команд лише для власника переконайтеся, що `commands.ownerAllowFrom` містить `telegram:<your user id>`.
### Як знайти свій ID користувача Telegram
### Пошук вашого ID користувача Telegram
Безпечніше (без стороннього бота):
1. Напишіть DM своєму боту.
2. Виконайте `openclaw logs --follow`.
1. Надішліть DM своєму боту.
2. Запустіть `openclaw logs --follow`.
3. Прочитайте `from.id`.
Офіційний метод Bot API:
@ -152,29 +152,29 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Tab>
<Tab title="Політика груп і allowlist">
<Tab title="Політика груп і списки дозволених">
Два елементи керування застосовуються разом:
1. **Які групи дозволені** (`channels.telegram.groups`)
- немає config `groups`:
- немає конфігурації `groups`:
- з `groupPolicy: "open"`: будь-яка група може пройти перевірки ID групи
- з `groupPolicy: "allowlist"` (за замовчуванням): групи заблоковані, доки ви не додасте записи `groups` (або `"*"`)
- `groups` налаштовано: діє як allowlist (явні ID або `"*"`)
- `groups` налаштовано: діє як список дозволених (явні ID або `"*"`)
2. **Які відправники дозволені в групах** (`channels.telegram.groupPolicy`)
- `open`
- `allowlist` (за замовчуванням)
- `disabled`
`groupAllowFrom` використовується для фільтрації відправників у групах. Якщо не встановлено, Telegram повертається до `allowFrom`.
`groupAllowFrom` використовується для фільтрації відправників у групах. Якщо не задано, Telegram повертається до `allowFrom`.
Записи `groupAllowFrom` мають бути числовими ID користувачів Telegram (префікси `telegram:` / `tg:` нормалізуються).
Не додавайте ID чатів груп або супергруп Telegram у `groupAllowFrom`. Від’ємні ID чатів належать до `channels.telegram.groups`.
Не додавайте ID чатів груп або супергруп Telegram у `groupAllowFrom`. Від’ємні ID чатів мають бути в `channels.telegram.groups`.
Нечислові записи ігноруються для авторизації відправника.
Межа безпеки (`2026.2.25+`): авторизація відправника в групі **не** успадковує схвалення зі сховища сполучень DM.
Сполучення залишається лише для DM. Для груп встановіть `groupAllowFrom` або `allowFrom` для окремої групи/теми.
Якщо `groupAllowFrom` не встановлено, Telegram повертається до config `allowFrom`, а не до сховища сполучень.
Практичний шаблон для ботів з одним власником: встановіть свій ID користувача в `channels.telegram.allowFrom`, залиште `groupAllowFrom` невстановленим і дозвольте цільові групи в `channels.telegram.groups`.
Примітка щодо runtime: якщо `channels.telegram` повністю відсутній, runtime за замовчуванням fail-closed з `groupPolicy="allowlist"`, якщо `channels.defaults.groupPolicy` не встановлено явно.
Межа безпеки (`2026.2.25+`): auth відправників у групах **не** успадковує схвалення зі сховища сполучень DM.
Сполучення лишається тільки для DM. Для груп задайте `groupAllowFrom` або `allowFrom` для окремої групи/теми.
Якщо `groupAllowFrom` не задано, Telegram повертається до конфігураційного `allowFrom`, а не до сховища сполучень.
Практичний шаблон для ботів з одним власником: задайте свій ID користувача в `channels.telegram.allowFrom`, лишіть `groupAllowFrom` незаданим і дозвольте цільові групи в `channels.telegram.groups`.
Примітка щодо runtime: якщо `channels.telegram` повністю відсутній, runtime за замовчуванням переходить у fail-closed `groupPolicy="allowlist"`, якщо `channels.defaults.groupPolicy` не задано явно.
Приклад: дозволити будь-якого учасника в одній конкретній групі:
@ -211,18 +211,18 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
```
<Warning>
Типова помилка: `groupAllowFrom` не є allowlist груп Telegram.
Поширена помилка: `groupAllowFrom` не є списком дозволених груп Telegram.
- Додавайте від’ємні ID чатів груп або супергруп Telegram, як-от `-1001234567890`, у `channels.telegram.groups`.
- Додавайте ID користувачів Telegram, як-от `8734062810`, у `groupAllowFrom`, коли хочете обмежити, які люди всередині дозволеної групи можуть запускати бота.
- Використовуйте `groupAllowFrom: ["*"]` лише тоді, коли хочете, щоб будь-який учасник дозволеної групи міг говорити з ботом.
- Використовуйте `groupAllowFrom: ["*"]` лише тоді, коли хочете, щоб будь-який учасник дозволеної групи міг спілкуватися з ботом.
</Warning>
</Tab>
<Tab title="Поведінка згадки">
Групові відповіді за замовчуванням потребують згадки.
<Tab title="Поведінка згадок">
Відповіді в групах за замовчуванням потребують згадки.
Згадка може надходити з:
@ -236,9 +236,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `/activation always`
- `/activation mention`
Вони оновлюють лише стан сесії. Використовуйте config для постійності.
Вони оновлюють лише стан сесії. Використовуйте конфігурацію для збереження.
Приклад постійної конфігурації:
Приклад сталої конфігурації:
```json5
{
@ -252,11 +252,11 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Як отримати ID групового чату:
Отримання ID групового чату:
- переслати групове повідомлення до `@userinfobot` / `@getidsbot`
- або прочитати `chat.id` з `openclaw logs --follow`
- або перевірити Bot API `getUpdates`
- перешліть групове повідомлення до `@userinfobot` / `@getidsbot`
- або прочитайте `chat.id` з `openclaw logs --follow`
- або перегляньте Bot API `getUpdates`
</Tab>
</Tabs>
@ -264,14 +264,14 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
## Поведінка runtime
- Telegram належить процесу gateway.
- Маршрутизація детермінована: вхідні повідомлення Telegram отримують відповідь у Telegram (модель не вибирає канали).
- Вхідні повідомлення нормалізуються в спільний конверт каналу з метаданими відповіді та placeholder для медіа.
- Групові сесії ізольовані за ID групи. Теми форуму додають `:topic:<threadId>`, щоб зберегти ізоляцію тем.
- DM-повідомлення можуть містити `message_thread_id`; OpenClaw маршрутизує їх із ключами сесії, що враховують тред, і зберігає ID треду для відповідей.
- Довге опитування використовує grammY runner із послідовністю на рівні чату/треду. Загальна конкуренція runner sink використовує `agents.defaults.maxConcurrent`.
- Довге опитування захищене всередині кожного процесу gateway, тож лише один активний poller може використовувати токен бота одночасно. Якщо ви все ще бачите конфлікти `getUpdates` 409, імовірно, інший gateway OpenClaw, скрипт або зовнішній poller використовує той самий токен.
- Перезапуски watchdog для long-polling запускаються після 120 секунд без завершеної liveness `getUpdates` за замовчуванням. Збільшуйте `channels.telegram.pollingStallThresholdMs` лише якщо ваше розгортання все ще бачить хибні перезапуски через polling-stall під час тривалої роботи. Значення в мілісекундах і дозволене від `30000` до `600000`; підтримуються перевизначення для окремих облікових записів.
- Telegram Bot API не підтримує підтвердження прочитання (`sendReadReceipts` не застосовується).
- Маршрутизація детермінована: вхідні повідомлення Telegram отримують відповіді назад у Telegram (модель не вибирає канали).
- Вхідні повідомлення нормалізуються у спільний channel envelope з метаданими відповіді та placeholders для медіа.
- Групові сесії ізольовані за ID групи. Теми форуму додають `:topic:<threadId>`, щоб теми лишалися ізольованими.
- Повідомлення DM можуть містити `message_thread_id`; OpenClaw маршрутизує їх із thread-aware ключами сесії та зберігає ID thread для відповідей.
- Long polling використовує grammY runner із послідовністю per-chat/per-thread. Загальна конкуренція runner sink використовує `agents.defaults.maxConcurrent`.
- Long polling захищений усередині кожного процесу gateway, тому лише один активний poller може використовувати токен бота одночасно. Якщо ви все ще бачите конфлікти `getUpdates` 409, імовірно, той самий токен використовує інший gateway OpenClaw, скрипт або зовнішній poller.
- Перезапуски watchdog для long-polling запускаються після 120 секунд без завершеної liveness `getUpdates` за замовчуванням. Збільшуйте `channels.telegram.pollingStallThresholdMs` лише якщо ваше розгортання все ще бачить хибні перезапуски через polling stall під час тривалої роботи. Значення вказується в мілісекундах і дозволене від `30000` до `600000`; підтримуються перевизначення для окремих облікових записів.
- Telegram Bot API не підтримує read receipts (`sendReadReceipts` не застосовується).
## Довідник функцій
@ -286,10 +286,10 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `channels.telegram.streaming` має значення `off | partial | block | progress` (за замовчуванням: `partial`)
- `progress` зіставляється з `partial` у Telegram (сумісність із міжканальним іменуванням)
- `streaming.preview.toolProgress` керує тим, чи оновлення інструментів/прогресу повторно використовують те саме редаговане повідомлення попереднього перегляду (за замовчуванням: `true`, коли streaming попереднього перегляду активний)
- застарілі `channels.telegram.streamMode` і булеві значення `streaming` виявляються; виконайте `openclaw doctor --fix`, щоб мігрувати їх до `channels.telegram.streaming.mode`
- `streaming.preview.toolProgress` керує тим, чи оновлення інструментів/прогресу повторно використовують те саме редаговане повідомлення попереднього перегляду (за замовчуванням: `true`, коли активний preview streaming)
- застарілі `channels.telegram.streamMode` і булеві значення `streaming` виявляються; запустіть `openclaw doctor --fix`, щоб мігрувати їх до `channels.telegram.streaming.mode`
Оновлення попереднього перегляду прогресу інструментів — це короткі рядки «Працюю...», які показуються під час роботи інструментів, наприклад виконання команд, читання файлів, оновлення планування або підсумки patch. Telegram залишає їх увімкненими за замовчуванням, щоб відповідати випущеній поведінці OpenClaw з `v2026.4.22` і пізніше. Щоб залишити редагований попередній перегляд для тексту відповіді, але приховати рядки прогресу інструментів, встановіть:
Оновлення попереднього перегляду tool-progress — це короткі рядки «Working...», які показуються під час роботи інструментів, наприклад виконання команд, читання файлів, оновлень планування або підсумків patch. Telegram лишає їх увімкненими за замовчуванням, щоб відповідати випущеній поведінці OpenClaw від `v2026.4.22` і пізніше. Щоб зберегти редагований попередній перегляд для тексту відповіді, але приховати рядки tool-progress, задайте:
```json
{
@ -306,18 +306,18 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Використовуйте `streaming.mode: "off"` лише тоді, коли хочете доставку тільки фінальної відповіді: редагування попереднього перегляду Telegram вимикаються, а загальний шум інструментів/прогресу пригнічується замість надсилання як окремі повідомлення «Працюю...». Запити схвалення, медіа payload і помилки все одно маршрутизуються через звичайну фінальну доставку. Використовуйте `streaming.preview.toolProgress: false`, коли хочете лише зберегти редагування попереднього перегляду відповіді, приховавши рядки статусу прогресу інструментів.
Використовуйте `streaming.mode: "off"` лише тоді, коли хочете доставку тільки фінальної відповіді: редагування попереднього перегляду Telegram вимикаються, а загальний службовий текст інструментів/прогресу приглушується замість надсилання як окремих повідомлень «Working...». Запити схвалення, медіа payloads і помилки все ще маршрутизуються через звичайну фінальну доставку. Використовуйте `streaming.preview.toolProgress: false`, коли хочете лише зберегти редагування попереднього перегляду відповіді, приховавши рядки статусу tool-progress.
Для відповідей лише з текстом:
- короткі попередні перегляди DM/груп/тем: OpenClaw зберігає те саме повідомлення попереднього перегляду та виконує фінальне редагування на місці
- попередні перегляди, старші приблизно за одну хвилину: OpenClaw надсилає завершену відповідь як нове фінальне повідомлення, а потім прибирає попередній перегляд, щоб видима позначка часу Telegram відображала час завершення, а не час створення попереднього перегляду
- короткі попередні перегляди DM/групи/теми: OpenClaw зберігає те саме повідомлення попереднього перегляду та виконує фінальне редагування на місці
- попередні перегляди, старші приблизно за одну хвилину: OpenClaw надсилає завершену відповідь як нове фінальне повідомлення, а потім очищає попередній перегляд, тож видима часова позначка Telegram відображає час завершення, а не час створення попереднього перегляду
Для складних відповідей (наприклад, медіанавантажень) OpenClaw повертається до звичайної фінальної доставки, а потім прибирає повідомлення попереднього перегляду.
Для складних відповідей (наприклад, медіа-навантажень) OpenClaw повертається до звичайної фінальної доставки, а потім очищає повідомлення попереднього перегляду.
Потокове передавання попереднього перегляду відокремлене від потокового передавання блоків. Коли потокове передавання блоків явно ввімкнено для Telegram, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання.
Потокове передавання попереднього перегляду відокремлене від потокового передавання блоків. Коли потокове передавання блоків явно ввімкнене для Telegram, OpenClaw пропускає потік попереднього перегляду, щоб уникнути подвійного потокового передавання.
Якщо нативний транспорт чернеток недоступний/відхилений, OpenClaw автоматично повертається до `sendMessage` + `editMessageText`.
Якщо нативний транспорт чернеток недоступний або відхилений, OpenClaw автоматично повертається до `sendMessage` + `editMessageText`.
Потік міркувань лише для Telegram:
@ -329,16 +329,16 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
<Accordion title="Форматування та резервний HTML">
Вихідний текст використовує Telegram `parse_mode: "HTML"`.
- Текст у стилі Markdown рендериться у безпечний для Telegram HTML.
- Сирий HTML моделі екранується, щоб зменшити помилки парсингу Telegram.
- Markdown-подібний текст відтворюється як безпечний для Telegram HTML.
- Сирий HTML моделі екранується, щоб зменшити збої парсингу Telegram.
- Якщо Telegram відхиляє розібраний HTML, OpenClaw повторює спробу як звичайний текст.
Попередні перегляди посилань увімкнено за замовчуванням, їх можна вимкнути за допомогою `channels.telegram.linkPreview: false`.
Попередні перегляди посилань увімкнені за замовчуванням і можуть бути вимкнені через `channels.telegram.linkPreview: false`.
</Accordion>
<Accordion title="Нативні команди та користувацькі команди">
Реєстрація меню команд Telegram виконується під час запуску за допомогою `setMyCommands`.
Реєстрація меню команд Telegram виконується під час запуску через `setMyCommands`.
Типові значення нативних команд:
@ -361,7 +361,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Правила:
- імена нормалізуються (видаляється початковий `/`, переводяться в нижній регістр)
- назви нормалізуються (прибирається початковий `/`, переводяться в нижній регістр)
- допустимий шаблон: `a-z`, `0-9`, `_`, довжина `1..32`
- користувацькі команди не можуть перевизначати нативні команди
- конфлікти/дублікати пропускаються та записуються в журнал
@ -369,39 +369,39 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Примітки:
- користувацькі команди є лише записами меню; вони не реалізують поведінку автоматично
- команди Plugin/Skills усе ще можуть працювати під час введення, навіть якщо їх не показано в меню Telegram
- команди Plugin/навичок можуть і далі працювати під час введення, навіть якщо їх не показано в меню Telegram
Якщо нативні команди вимкнено, вбудовані команди видаляються. Користувацькі команди/команди Plugin усе ще можуть реєструватися, якщо це налаштовано.
Якщо нативні команди вимкнені, вбудовані команди видаляються. Користувацькі команди/команди Plugin можуть усе ще реєструватися, якщо це налаштовано.
Поширені помилки налаштування:
Поширені збої налаштування:
- `setMyCommands failed` із `BOT_COMMANDS_TOO_MUCH` означає, що меню Telegram усе ще переповнене після обрізання; зменште кількість команд Plugin/Skills/користувацьких команд або вимкніть `channels.telegram.commands.native`.
- Помилка `deleteWebhook`, `deleteMyCommands` або `setMyCommands` із `404: Not Found`, коли прямі команди Bot API через curl працюють, може означати, що `channels.telegram.apiRoot` було задано як повну кінцеву точку `/bot<TOKEN>`. `apiRoot` має бути лише коренем Bot API, а `openclaw doctor --fix` видаляє випадковий кінцевий `/bot<TOKEN>`.
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що меню Telegram усе ще переповнене після обрізання; зменште кількість команд Plugin/навичок/користувацьких команд або вимкніть `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` із помилками мережі/fetch зазвичай означає, що вихідний DNS/HTTPS до `api.telegram.org` заблоковано.
- `setMyCommands failed` із помилками мережі/fetch зазвичай означає, що вихідні DNS/HTTPS-з’єднання до `api.telegram.org` заблоковані.
### Команди сполучення пристрою (Plugin `device-pair`)
Коли встановлено Plugin `device-pair`:
Коли Plugin `device-pair` встановлено:
1. `/pair` генерує код налаштування
2. вставте код у застосунок iOS
3. `/pair pending` показує очікувані запити (включно з роллю/областями)
3. `/pair pending` перелічує запити в очікуванні (зокрема роль/області дії)
4. схваліть запит:
- `/pair approve <requestId>` для явного схвалення
- `/pair approve`, коли є лише один очікуваний запит
- `/pair approve`, коли є лише один запит в очікуванні
- `/pair approve latest` для найновішого
Код налаштування містить короткочасний bootstrap-токен. Вбудована передача bootstrap зберігає токен основного вузла на `scopes: []`; будь-який переданий токен оператора залишається обмеженим `operator.approvals`, `operator.read`, `operator.talk.secrets` і `operator.write`. Перевірки областей bootstrap мають префікс ролі, тож цей allowlist оператора задовольняє лише запити оператора; неоператорські ролі все ще потребують областей під власним префіксом ролі.
Код налаштування переносить короткочасний bootstrap-токен. Вбудована передача bootstrap зберігає токен основного вузла на `scopes: []`; будь-який переданий токен оператора залишається обмеженим до `operator.approvals`, `operator.read`, `operator.talk.secrets` і `operator.write`. Перевірки bootstrap-областей дії мають префікс ролі, тому цей список дозволів оператора задовольняє лише запити оператора; неоператорським ролям усе ще потрібні області дії під власним префіксом ролі.
Якщо пристрій повторює спробу зі зміненими даними автентифікації (наприклад, роль/області/публічний ключ), попередній очікуваний запит замінюється, а новий запит використовує інший `requestId`. Повторно виконайте `/pair pending` перед схваленням.
Якщо пристрій повторює спробу зі зміненими деталями авторизації (наприклад, роль/області дії/публічний ключ), попередній запит в очікуванні замінюється, а новий запит використовує інший `requestId`. Повторно виконайте `/pair pending` перед схваленням.
Докладніше: [Сполучення](/uk/channels/pairing#pair-via-telegram-recommended-for-ios).
</Accordion>
<Accordion title="Вбудовані кнопки">
Налаштуйте область вбудованої клавіатури:
Налаштуйте область дії вбудованої клавіатури:
```json5
{
@ -433,7 +433,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Області:
Області дії:
- `off`
- `dm`
@ -477,24 +477,24 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Дії повідомлень каналу надають зручні псевдоніми (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`).
Елементи керування доступом:
Керування обмеженнями:
- `channels.telegram.actions.sendMessage`
- `channels.telegram.actions.deleteMessage`
- `channels.telegram.actions.reactions`
- `channels.telegram.actions.sticker` (за замовчуванням: вимкнено)
Примітка: `edit` і `topic-create` наразі ввімкнено за замовчуванням, і вони не мають окремих перемикачів `channels.telegram.actions.*`.
Надсилання під час виконання використовують активний знімок конфігурації/секретів (запуск/перезавантаження), тому шляхи дій не виконують ситуативне повторне розв’язання SecretRef для кожного надсилання.
Примітка: `edit` і `topic-create` наразі ввімкнені за замовчуванням і не мають окремих перемикачів `channels.telegram.actions.*`.
Надсилання під час виконання використовує активний знімок конфігурації/секретів (запуск/перезавантаження), тому шляхи дій не виконують ad-hoc повторне розв’язання SecretRef для кожного надсилання.
Семантика видалення реакції: [/tools/reactions](/uk/tools/reactions)
Семантика видалення реакцій: [/tools/reactions](/uk/tools/reactions)
</Accordion>
<Accordion title="Теги гілкування відповідей">
Telegram підтримує явні теги гілкування відповідей у згенерованому виводі:
<Accordion title="Теги гілок відповідей">
Telegram підтримує явні теги гілок відповідей у згенерованому виводі:
- `[[reply_to_current]]` відповідає на повідомлення, що ініціювало дію
- `[[reply_to_current]]` відповідає на повідомлення, яке спричинило запуск
- `[[reply_to:<id>]]` відповідає на конкретний ідентифікатор повідомлення Telegram
`channels.telegram.replyToMode` керує обробкою:
@ -503,29 +503,29 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `first`
- `all`
Коли гілкування відповідей увімкнено й оригінальний текст або підпис Telegram доступний, OpenClaw автоматично включає нативний уривок цитати Telegram. Telegram обмежує нативний текст цитати 1024 кодовими одиницями UTF-16, тому довші повідомлення цитуються від початку й повертаються до звичайної відповіді, якщо Telegram відхиляє цитату.
Коли гілкування відповідей увімкнене й доступний оригінальний текст або підпис Telegram, OpenClaw автоматично включає нативний фрагмент цитати Telegram. Telegram обмежує нативний текст цитати 1024 кодовими одиницями UTF-16, тому довші повідомлення цитуються від початку й повертаються до звичайної відповіді, якщо Telegram відхиляє цитату.
Примітка: `off` вимикає неявне гілкування відповідей. Явні теги `[[reply_to_*]]` усе одно враховуються.
Примітка: `off` вимикає неявне гілкування відповідей. Явні теги `[[reply_to_*]]` усе ще враховуються.
</Accordion>
<Accordion title="Теми форуму та поведінка гілок">
Форумні супергрупи:
- ключі сеансів теми додають `:topic:<threadId>`
- відповіді та індикатор набору спрямовуються в гілку теми
- ключі сесій теми додають `:topic:<threadId>`
- відповіді та індикатор набору спрямовуються до гілки теми
- шлях конфігурації теми:
`channels.telegram.groups.<chatId>.topics.<threadId>`
Особливий випадок загальної теми (`threadId=1`):
Спеціальний випадок загальної теми (`threadId=1`):
- надсилання повідомлень пропускають `message_thread_id` (Telegram відхиляє `sendMessage(...thread_id=1)`)
- дії набору все ще включають `message_thread_id`
- надсилання повідомлень пропускає `message_thread_id` (Telegram відхиляє `sendMessage(...thread_id=1)`)
- дії набору тексту все ще включають `message_thread_id`
Успадкування тем: записи тем успадковують налаштування групи, якщо їх не перевизначено (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` діє лише для теми й не успадковується з типових значень групи.
Успадкування теми: записи тем успадковують налаштування групи, якщо їх не перевизначено (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` застосовується лише до теми й не успадковується з типових значень групи.
**Маршрутизація агента для окремої теми**: кожна тема може маршрутизуватися до іншого агента через встановлення `agentId` у конфігурації теми. Це дає кожній темі власний ізольований робочий простір, пам’ять і сеанс. Приклад:
**Маршрутизація агента для окремої теми**: кожна тема може маршрутизуватися до іншого агента через налаштування `agentId` у конфігурації теми. Це надає кожній темі власний ізольований робочий простір, пам’ять і сесію. Приклад:
```json5
{
@ -545,13 +545,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Кожна тема тоді має власний ключ сеансу: `agent:zu:telegram:group:-1001234567890:topic:3`
Кожна тема потім має власний ключ сесії: `agent:zu:telegram:group:-1001234567890:topic:3`
**Постійне прив’язування теми ACP**: теми форуму можуть закріплювати сеанси harness ACP через типізовані прив’язування ACP верхнього рівня (`bindings[]` з `type: "acp"` і `match.channel: "telegram"`, `peer.kind: "group"` та ідентифікатором із кваліфікатором теми на кшталт `-1001234567890:topic:42`). Наразі обмежено темами форуму в групах/супергрупах. Див. [Агенти ACP](/uk/tools/acp-agents).
**Постійне прив’язування тем ACP**: теми форуму можуть закріплювати сесії ACP harness через типізовані ACP-прив’язки верхнього рівня (`bindings[]` з `type: "acp"` і `match.channel: "telegram"`, `peer.kind: "group"` та ідентифікатором із кваліфікатором теми на кшталт `-1001234567890:topic:42`). Наразі обмежено темами форуму в групах/супергрупах. Див. [Агенти ACP](/uk/tools/acp-agents).
**Прив’язаний до гілки spawn ACP із чату**: `/acp spawn <agent> --thread here|auto` прив’язує поточну тему до нового сеансу ACP; подальші повідомлення маршрутизуються туди напряму. OpenClaw закріплює підтвердження spawn у темі. Потребує `channels.telegram.threadBindings.spawnAcpSessions=true`.
**Запуск ACP, прив’язаний до гілки, з чату**: `/acp spawn <agent> --thread here|auto` прив’язує поточну тему до нової сесії ACP; подальші повідомлення маршрутизуються туди напряму. OpenClaw закріплює підтвердження запуску в темі. Потребує `channels.telegram.threadBindings.spawnAcpSessions=true`.
Контекст шаблону надає `MessageThreadId` і `IsForum`. DM-чати з `message_thread_id` зберігають маршрутизацію DM, але використовують ключі сеансів із підтримкою гілок.
Контекст шаблону надає `MessageThreadId` та `IsForum`. Чати DM з `message_thread_id` зберігають маршрутизацію DM, але використовують ключі сесій з урахуванням гілок.
</Accordion>
@ -564,7 +564,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- тег `[[audio_as_voice]]` у відповіді агента примусово надсилає голосову нотатку
- транскрипти вхідних голосових нотаток оформлюються як машинно згенерований,
ненадійний текст у контексті агента; виявлення згадок усе ще використовує сирий
транскрипт, тож голосові повідомлення з вимогою згадки продовжують працювати.
транскрипт, тому голосові повідомлення, обмежені згадками, продовжують працювати.
Приклад дії повідомлення:
@ -616,7 +616,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `~/.openclaw/telegram/sticker-cache.json`
Стікери описуються один раз (коли можливо) і кешуються, щоб зменшити повторні vision-виклики.
Стікери описуються один раз (коли можливо) і кешуються, щоб зменшити повторні виклики vision.
Увімкніть дії зі стікерами:
@ -670,30 +670,30 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Примітки:
- `own` означає реакції користувачів лише на повідомлення, надіслані ботом (за можливості через кеш надісланих повідомлень).
- Події реакцій усе одно враховують засоби контролю доступу Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); неавторизованих відправників відкидають.
- Telegram не надає ідентифікатори гілок у оновленнях реакцій.
- групи нефорумного типу спрямовуються до сеансу групового чату
- форумні групи спрямовуються до сеансу загальної теми групи (`:topic:1`), а не до точної початкової теми
- `own` означає лише реакції користувача на повідомлення, надіслані ботом (найкраща можлива спроба через кеш надісланих повідомлень).
- Події реакцій усе ще дотримуються контролів доступу Telegram (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); неавторизовані відправники відкидаються.
- Telegram не надає ідентифікатори гілок в оновленнях реакцій.
- групи без форуму спрямовуються до сесії групового чату
- форумні групи спрямовуються до сесії загальної теми групи (`:topic:1`), а не до точної початкової теми
`allowed_updates` для polling/webhook автоматично включає `message_reaction`.
</Accordion>
<Accordion title="Реакції підтвердження">
`ackReaction` надсилає emoji підтвердження, поки OpenClaw обробляє вхідне повідомлення.
<Accordion title="Підтверджувальні реакції">
`ackReaction` надсилає емодзі підтвердження, поки OpenClaw обробляє вхідне повідомлення.
Порядок розв’язання:
Порядок визначення:
- `channels.telegram.accounts.<accountId>.ackReaction`
- `channels.telegram.ackReaction`
- `messages.ackReaction`
- резервний emoji ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
- резервний емодзі ідентичності агента (`agents.list[].identity.emoji`, інакше "👀")
Примітки:
- Telegram очікує Unicode emoji (наприклад "👀").
- Використовуйте `""`, щоб вимкнути реакцію для каналу або облікового запису.
- Telegram очікує unicode-емодзі (наприклад, "👀").
- Використайте `""`, щоб вимкнути реакцію для каналу або облікового запису.
</Accordion>
@ -720,30 +720,30 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Long polling проти webhook">
Типово використовується long polling. Для режиму webhook задайте `channels.telegram.webhookUrl` і `channels.telegram.webhookSecret`; необов’язково `webhookPath`, `webhookHost`, `webhookPort` (типові значення `/telegram-webhook`, `127.0.0.1`, `8787`).
Типово використовується long polling. Для режиму webhook задайте `channels.telegram.webhookUrl` і `channels.telegram.webhookSecret`; необов’язкові `webhookPath`, `webhookHost`, `webhookPort` (типово `/telegram-webhook`, `127.0.0.1`, `8787`).
Локальний слухач прив’язується до `127.0.0.1:8787`. Для публічного входу або поставте reverse proxy перед локальним портом, або свідомо задайте `webhookHost: "0.0.0.0"`.
Локальний слухач прив’язується до `127.0.0.1:8787`. Для публічного входу або поставте reverse proxy перед локальним портом, або навмисно задайте `webhookHost: "0.0.0.0"`.
Режим webhook перевіряє захисти запиту, секретний токен Telegram і JSON-тіло перед поверненням `200` до Telegram.
Потім OpenClaw обробляє оновлення асинхронно через ті самі смуги бота для кожного чату/теми, що й long polling, тому повільні ходи агента не затримують ACK доставки Telegram.
Режим Webhook перевіряє захисти запиту, секретний токен Telegram і JSON-тіло перед поверненням `200` до Telegram.
Потім OpenClaw обробляє оновлення асинхронно через ті самі bot lanes для кожного чату/теми, що використовуються long polling, тому повільні ходи агента не утримують ACK доставки Telegram.
</Accordion>
<Accordion title="Ліміти, повторні спроби й цілі CLI">
<Accordion title="Ліміти, повторні спроби та цілі CLI">
- Типове значення `channels.telegram.textChunkLimit` — 4000.
- `channels.telegram.chunkMode="newline"` надає перевагу межам абзаців (порожнім рядкам) перед розбиттям за довжиною.
- `channels.telegram.chunkMode="newline"` надає перевагу межам абзаців (порожнім рядкам) перед розділенням за довжиною.
- `channels.telegram.mediaMaxMb` (типово 100) обмежує розмір вхідних і вихідних медіа Telegram.
- `channels.telegram.timeoutSeconds` перевизначає таймаут клієнта Telegram API (якщо не задано, застосовується типове значення grammY).
- Типове значення `channels.telegram.pollingStallThresholdMs` `120000`; налаштовуйте в межах від `30000` до `600000` лише для хибнопозитивних перезапусків через зависання polling.
- `channels.telegram.timeoutSeconds` перевизначає timeout клієнта Telegram API (якщо не задано, застосовується типове значення grammY).
- `channels.telegram.pollingStallThresholdMs` типово дорівнює `120000`; налаштовуйте в межах від `30000` до `600000` лише для хибнопозитивних перезапусків через зупинку polling.
- Історія контексту групи використовує `channels.telegram.historyLimit` або `messages.groupChat.historyLimit` (типово 50); `0` вимикає.
- Додатковий контекст відповіді/цитати/пересилання наразі передається як отримано.
- Allowlist Telegram насамперед обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту.
- Додатковий контекст відповіді/цитати/пересилання наразі передається як отриманий.
- Списки дозволених Telegram передусім обмежують, хто може запускати агента, а не є повною межею редагування додаткового контексту.
- Елементи керування історією DM:
- `channels.telegram.dmHistoryLimit`
- `channels.telegram.dms["<user_id>"].historyLimit`
- Конфігурація `channels.telegram.retry` застосовується до допоміжних засобів надсилання Telegram (CLI/інструменти/дії) для відновлюваних вихідних помилок API. Доставка фінальної відповіді для вхідних повідомлень також використовує обмежену безпечну повторну спробу надсилання для збоїв Telegram до підключення, але не повторює неоднозначні мережеві оболонки після надсилання, які можуть дублювати видимі повідомлення.
- Конфігурація `channels.telegram.retry` застосовується до helper-ів надсилання Telegram (CLI/tools/actions) для відновлюваних вихідних помилок API. Доставка фінальної відповіді для вхідних повідомлень також використовує обмежену безпечну повторну спробу надсилання для збоїв Telegram до підключення, але не повторює неоднозначні мережеві конверти після надсилання, які можуть дублювати видимі повідомлення.
Ціль надсилання CLI може бути числовим ID чату або іменем користувача:
Ціль надсилання CLI може бути числовим ідентифікатором чату або іменем користувача:
```bash
openclaw message send --channel telegram --target 123456789 --message "hi"
@ -765,13 +765,13 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
- `--poll-duration-seconds` (5-600)
- `--poll-anonymous`
- `--poll-public`
- `--thread-id` для форумних тем (або використовуйте ціль `:topic:`)
- `--thread-id` для форумних тем (або використайте ціль `:topic:`)
Надсилання Telegram також підтримує:
- `--presentation` з блоками `buttons` для inline keyboards, коли це дозволяє `channels.telegram.capabilities.inlineButtons`
- `--pin` або `--delivery '{"pin":true}'` для запиту закріпленої доставки, коли бот може закріплювати в цьому чаті
- `--force-document` для надсилання вихідних зображень і GIF як документів замість стиснених завантажень фото або анімованих медіа
- `--presentation` з блоками `buttons` для inline-клавіатур, коли `channels.telegram.capabilities.inlineButtons` це дозволяє
- `--pin` або `--delivery '{"pin":true}'`, щоб запросити закріплену доставку, коли бот може закріплювати в цьому чаті
- `--force-document`, щоб надсилати вихідні зображення та GIF як документи замість стиснених фото або завантажень анімованих медіа
Обмеження дій:
@ -781,20 +781,20 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
</Accordion>
<Accordion title="Підтвердження exec у Telegram">
Telegram підтримує підтвердження exec у DM затверджувачів і може необов’язково публікувати запити в початковому чаті або темі. Затверджувачі мають бути числовими ID користувачів Telegram.
Telegram підтримує підтвердження exec у DM затверджувачів і може необов’язково публікувати запити в початковому чаті або темі. Затверджувачі мають бути числовими ідентифікаторами користувачів Telegram.
Шлях конфігурації:
- `channels.telegram.execApprovals.enabled` (автоматично вмикається, коли можна розв’язати принаймні одного затверджувача)
- `channels.telegram.execApprovals.approvers` (повертається до числових ID власників із `commands.ownerAllowFrom`)
- `channels.telegram.execApprovals.enabled` (автоматично вмикається, коли можна визначити принаймні одного затверджувача)
- `channels.telegram.execApprovals.approvers` (повертається до числових ідентифікаторів власників із `commands.ownerAllowFrom`)
- `channels.telegram.execApprovals.target`: `dm` (типово) | `channel` | `both`
- `agentFilter`, `sessionFilter`
`channels.telegram.allowFrom`, `groupAllowFrom` і `defaultTo` контролюють, хто може говорити з ботом і куди він надсилає звичайні відповіді. Вони не роблять когось затверджувачем exec. Перше схвалене сполучення DM ініціалізує `commands.ownerAllowFrom`, коли власника команд ще немає, тому налаштування з одним власником усе одно працює без дублювання ID у `execApprovals.approvers`.
`channels.telegram.allowFrom`, `groupAllowFrom` і `defaultTo` керують тим, хто може спілкуватися з ботом і куди він надсилає звичайні відповіді. Вони не роблять когось затверджувачем exec. Перше затверджене спарення DM ініціалізує `commands.ownerAllowFrom`, коли власника команд ще немає, тож налаштування з одним власником усе ще працює без дублювання ідентифікаторів у `execApprovals.approvers`.
Доставка в канал показує текст команди в чаті; вмикайте `channel` або `both` лише в довірених групах/темах. Коли запит потрапляє у форумну тему, OpenClaw зберігає тему для запиту підтвердження та подальшого повідомлення. Підтвердження exec типово спливають через 30 хвилин.
Доставка в канал показує текст команди в чаті; вмикайте `channel` або `both` лише в довірених групах/темах. Коли запит потрапляє у форумну тему, OpenClaw зберігає тему для запиту підтвердження та подальшої відповіді. Підтвердження exec типово завершуються через 30 хвилин.
Inline-кнопки підтвердження також потребують, щоб `channels.telegram.capabilities.inlineButtons` дозволяв цільову поверхню (`dm`, `group` або `all`). ID підтверджень із префіксом `plugin:` розв’язуються через підтвердження plugin; інші спочатку розв’язуються через підтвердження exec.
Inline-кнопки підтвердження також потребують, щоб `channels.telegram.capabilities.inlineButtons` дозволяв цільову поверхню (`dm`, `group` або `all`). Ідентифікатори підтвердження з префіксом `plugin:` визначаються через підтвердження plugin; інші спершу визначаються через підтвердження exec.
Див. [Підтвердження exec](/uk/tools/exec-approvals).
@ -805,12 +805,12 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
Коли агент стикається з помилкою доставки або провайдера, Telegram може або відповісти текстом помилки, або придушити її. Цю поведінку контролюють два ключі конфігурації:
| Ключ | Значення | Типово | Опис |
| ----------------------------------- | ----------------- | ------- | ---------------------------------------------------------------------------------------------- |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` надсилає дружнє повідомлення про помилку в чат. `silent` повністю придушує відповіді про помилки. |
| `channels.telegram.errorCooldownMs` | number (ms) | `60000` | Мінімальний час між відповідями про помилки до того самого чату. Запобігає спаму помилками під час збоїв. |
| Ключ | Значення | Типово | Опис |
| ----------------------------------- | ----------------- | ------- | ------------------------------------------------------------------------------------------------ |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` надсилає дружнє повідомлення про помилку до чату. `silent` повністю придушує відповіді про помилки. |
| `channels.telegram.errorCooldownMs` | число (мс) | `60000` | Мінімальний час між відповідями про помилки до того самого чату. Запобігає спаму помилок під час збоїв. |
Підтримуються перевизначення для кожного облікового запису, групи й теми (таке саме наслідування, як для інших ключів конфігурації Telegram).
Підтримуються перевизначення для кожного облікового запису, групи та теми (те саме успадкування, що й для інших ключів конфігурації Telegram).
```json5
{
@ -835,50 +835,50 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
- Якщо `requireMention=false`, режим приватності Telegram має дозволяти повну видимість.
- BotFather: `/setprivacy` -> Disable
- потім видаліть і повторно додайте бота до групи
- потім видаліть і знову додайте бота до групи
- `openclaw channels status` попереджає, коли конфігурація очікує групові повідомлення без згадки.
- `openclaw channels status --probe` може перевірити явні числові ID груп; wildcard `"*"` не можна перевірити на членство.
- швидкий тест сеансу: `/activation always`.
- `openclaw channels status --probe` може перевіряти явні числові ідентифікатори груп; wildcard `"*"` не можна перевірити на членство.
- швидкий тест сесії: `/activation always`.
</Accordion>
<Accordion title="Бот узагалі не бачить групових повідомлень">
<Accordion title="Бот узагалі не бачить групові повідомлення">
- коли існує `channels.telegram.groups`, група має бути в списку (або включати `"*"`)
- перевірте членство бота в групі
- перегляньте журнали: `openclaw logs --follow` для причин пропуску
- перегляньте логи: `openclaw logs --follow` для причин пропуску
</Accordion>
<Accordion title="Команди працюють частково або не працюють узагалі">
- авторизуйте ідентичність свого відправника (сполучення та/або числовий `allowFrom`)
- авторизація команд усе одно застосовується, навіть коли політика групи — `open`
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що нативне меню має забагато записів; зменште кількість команд plugin/skill/користувацьких команд або вимкніть нативні меню
- Виклики запуску `deleteMyCommands` / `setMyCommands` обмежені й повторюються один раз через транспортний fallback Telegram у разі таймауту запиту. Постійні мережеві/fetch-помилки зазвичай вказують на проблеми досяжності DNS/HTTPS до `api.telegram.org`
- авторизуйте свою ідентичність відправника (спарення та/або числовий `allowFrom`)
- авторизація команд усе ще застосовується, навіть коли політика групи — `open`
- `setMyCommands failed` з `BOT_COMMANDS_TOO_MUCH` означає, що в нативному меню забагато записів; зменште кількість команд plugin/skill/custom або вимкніть нативні меню
- стартові виклики `deleteMyCommands` / `setMyCommands` обмежені та повторюються один раз через транспортний fallback Telegram у разі timeout запиту. Постійні помилки мережі/fetch зазвичай вказують на проблеми доступності DNS/HTTPS до `api.telegram.org`
</Accordion>
<Accordion title="Під час запуску повідомляється про неавторизований токен">
- `getMe returned 401` — це збій автентифікації Telegram для налаштованого токена бота.
- Повторно скопіюйте або згенеруйте токен бота в BotFather, потім оновіть `channels.telegram.botToken`, `channels.telegram.tokenFile`, `channels.telegram.accounts.<id>.botToken` або `TELEGRAM_BOT_TOKEN` для типового облікового запису.
- `deleteWebhook 401 Unauthorized` під час запуску також є збоєм автентифікації; трактування цього як "webhook не існує" лише відклало б той самий збій поганого токена до пізніших викликів API.
- Якщо `deleteWebhook` завершується помилкою через тимчасову мережеву помилку під час запуску polling, OpenClaw перевіряє `getWebhookInfo`; коли Telegram повідомляє про порожній URL webhook, polling продовжується, бо очищення вже виконано.
- Скопіюйте повторно або згенеруйте заново токен бота в BotFather, а потім оновіть `channels.telegram.botToken`, `channels.telegram.tokenFile`, `channels.telegram.accounts.<id>.botToken` або `TELEGRAM_BOT_TOKEN` для типового облікового запису.
- `deleteWebhook 401 Unauthorized` під час запуску також є збоєм автентифікації; трактування цього як "webhook не існує" лише відклало б той самий збій через поганий токен до пізніших викликів API.
- Якщо `deleteWebhook` завершується з тимчасовою мережевою помилкою під час запуску polling, OpenClaw перевіряє `getWebhookInfo`; коли Telegram повідомляє порожній URL webhook, polling продовжується, бо cleanup уже задоволений.
</Accordion>
<Accordion title="Нестабільність polling або мережі">
- Node 22+ + користувацький fetch/proxy може спричиняти негайне переривання, якщо типи AbortSignal не збігаються.
- Деякі хости спочатку розв’язують `api.telegram.org` в IPv6; несправний вихідний IPv6-трафік може спричиняти періодичні збої Telegram API.
- Якщо журнали містять `TypeError: fetch failed` або `Network request for 'getUpdates' failed!`, OpenClaw тепер повторює ці запити як відновлювані мережеві помилки.
- Якщо журнали містять `Polling stall detected`, OpenClaw перезапускає опитування та перебудовує Telegram transport після 120 секунд без завершеної перевірки життєздатності long-poll за замовчуванням.
- `openclaw channels status --probe` і `openclaw doctor` попереджають, коли запущений обліковий запис з опитуванням не завершив `getUpdates` після пільгового періоду запуску або коли його остання успішна активність polling transport застаріла.
- Збільшуйте `channels.telegram.pollingStallThresholdMs` лише тоді, коли довготривалі виклики `getUpdates` справні, але ваш хост усе ще повідомляє про хибні перезапуски через зависання опитування. Постійні зависання зазвичай вказують на проблеми proxy, DNS, IPv6 або вихідного TLS-трафіку між хостом і `api.telegram.org`.
- Telegram також враховує env proxy процесу для Bot API transport, зокрема `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` та їхні варіанти в нижньому регістрі. `NO_PROXY` / `no_proxy` усе ще можуть обходити `api.telegram.org`.
- Якщо керований proxy OpenClaw налаштовано через `OPENCLAW_PROXY_URL` для сервісного середовища і стандартні env proxy відсутні, Telegram також використовує цей URL для Bot API transport.
- На VPS-хостах із нестабільним прямим вихідним трафіком/TLS спрямовуйте виклики Telegram API через `channels.telegram.proxy`:
- Node 22+ + власний fetch/проксі можуть спричинити негайне переривання, якщо типи AbortSignal не збігаються.
- Деякі хости спершу резолвлять `api.telegram.org` в IPv6; зламаний вихідний IPv6-трафік може спричиняти періодичні збої Telegram API.
- Якщо журнали містять `TypeError: fetch failed` або `Network request for 'getUpdates' failed!`, OpenClaw тепер повторює ці операції як відновлювані мережеві помилки.
- Якщо журнали містять `Polling stall detected`, OpenClaw перезапускає polling і перебудовує транспорт Telegram після 120 секунд без завершеної перевірки життєздатності long-poll за замовчуванням.
- `openclaw channels status --probe` і `openclaw doctor` попереджають, коли запущений polling-акаунт не завершив `getUpdates` після пільгового періоду запуску, коли запущений webhook-акаунт не завершив `setWebhook` після пільгового періоду запуску, або коли остання успішна активність polling-транспорту застаріла.
- Збільшуйте `channels.telegram.pollingStallThresholdMs` лише тоді, коли довготривалі виклики `getUpdates` справні, але ваш хост усе ще повідомляє про хибні перезапуски через зупинку polling. Постійні зупинки зазвичай вказують на проблеми з проксі, DNS, IPv6 або вихідним TLS між хостом і `api.telegram.org`.
- Telegram також враховує process proxy env для транспорту Bot API, зокрема `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` та їхні варіанти в нижньому регістрі. `NO_PROXY` / `no_proxy` усе ще можуть обходити `api.telegram.org`.
- Якщо керований проксі OpenClaw налаштовано через `OPENCLAW_PROXY_URL` для сервісного середовища й стандартний proxy env відсутній, Telegram також використовує цю URL-адресу для транспорту Bot API.
- На VPS-хостах із нестабільним прямим вихідним трафіком/TLS маршрутизуйте виклики Telegram API через `channels.telegram.proxy`:
```yaml
channels:
@ -886,8 +886,8 @@ channels:
proxy: socks5://<user>:<password>@proxy-host:1080
```
- Node 22+ за замовчуванням використовує `autoSelectFamily=true` (крім WSL2) і `dnsResultOrder=ipv4first`.
- Якщо ваш хост є WSL2 або явно краще працює з поведінкою лише IPv4, примусово задайте вибір сімейства:
- Node 22+ за замовчуванням використовує `autoSelectFamily=true` (окрім WSL2) і `dnsResultOrder=ipv4first`.
- Якщо ваш хост — WSL2 або явно краще працює лише з IPv4, примусово задайте вибір сімейства:
```yaml
channels:
@ -896,10 +896,10 @@ channels:
autoSelectFamily: false
```
- Відповіді benchmark-діапазону RFC 2544 (`198.18.0.0/15`) уже дозволені
- Відповіді з benchmark-діапазону RFC 2544 (`198.18.0.0/15`) уже дозволені
для завантажень медіа Telegram за замовчуванням. Якщо довірений fake-IP або
transparent proxy переписує `api.telegram.org` на якусь іншу
приватну/внутрішню/спеціальну адресу під час завантаження медіа, ви можете
прозорий проксі переписує `api.telegram.org` на якусь іншу
приватну/внутрішню/спеціального призначення адресу під час завантажень медіа, ви можете
увімкнути обхід лише для Telegram:
```yaml
@ -909,25 +909,25 @@ channels:
dangerouslyAllowPrivateNetwork: true
```
- Така сама опція доступна для кожного облікового запису в
- Така сама можливість увімкнення доступна для кожного акаунта за адресою
`channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork`.
- Якщо ваш proxy розв’язує хости медіа Telegram у `198.18.x.x`, спочатку залиште
- Якщо ваш проксі резолвить медіахости Telegram у `198.18.x.x`, спершу залиште
небезпечний прапорець вимкненим. Медіа Telegram уже дозволяє benchmark-діапазон
RFC 2544 за замовчуванням.
<Warning>
`channels.telegram.network.dangerouslyAllowPrivateNetwork` послаблює захист Telegram
media SSRF. Використовуйте це лише для довірених, контрольованих оператором proxy
`channels.telegram.network.dangerouslyAllowPrivateNetwork` послаблює захист медіа Telegram
від SSRF. Використовуйте його лише для довірених, контрольованих оператором проксі-
середовищ, як-от маршрутизація fake-IP у Clash, Mihomo або Surge, коли вони
синтезують приватні або спеціальні відповіді поза benchmark-діапазоном
RFC 2544. Залишайте це вимкненим для звичайного доступу Telegram через публічний інтернет.
синтезують приватні або спеціального призначення відповіді поза benchmark-
діапазоном RFC 2544. Залишайте його вимкненим для звичайного доступу Telegram через публічний інтернет.
</Warning>
- Перевизначення середовища (тимчасові):
- `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first`
- Перевірте відповіді DNS:
- Перевірте DNS-відповіді:
```bash
dig +short api.telegram.org A
@ -937,23 +937,23 @@ dig +short api.telegram.org AAAA
</Accordion>
</AccordionGroup>
Додаткова допомога: [Усунення несправностей каналів](/uk/channels/troubleshooting).
Додаткова допомога: [усунення несправностей каналів](/uk/channels/troubleshooting).
## Довідник конфігурації
Основний довідник: [Довідник конфігурації - Telegram](/uk/gateway/config-channels#telegram).
Основний довідник: [довідник конфігурації - Telegram](/uk/gateway/config-channels#telegram).
<Accordion title="High-signal Telegram fields">
- запуск/auth: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` має вказувати на звичайний файл; symlinks відхиляються)
- керування доступом: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, top-level `bindings[]` (`type: "acp"`)
- схвалення exec: `execApprovals`, `accounts.*.execApprovals`
- запуск/автентифікація: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` має вказувати на звичайний файл; символічні посилання відхиляються)
- контроль доступу: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, верхньорівневий `bindings[]` (`type: "acp"`)
- схвалення виконання: `execApprovals`, `accounts.*.execApprovals`
- команда/меню: `commands.native`, `commands.nativeSkills`, `customCommands`
- потоки/відповіді: `replyToMode`
- streaming: `streaming` (preview), `streaming.preview.toolProgress`, `blockStreaming`
- ланцюжки/відповіді: `replyToMode`
- streaming: `streaming` (попередній перегляд), `streaming.preview.toolProgress`, `blockStreaming`
- форматування/доставка: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix`
- медіа/мережа: `mediaMaxMb`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy`
- користувацький корінь API: `apiRoot` (лише корінь Bot API; не включайте `/bot<TOKEN>`)
- власний корінь API: `apiRoot` (лише корінь Bot API; не включайте `/bot<TOKEN>`)
- webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`
- дії/можливості: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker`
- реакції: `reactionNotifications`, `reactionLevel`
@ -963,14 +963,14 @@ dig +short api.telegram.org AAAA
</Accordion>
<Note>
Пріоритетність кількох облікових записів: коли налаштовано два або більше ID облікових записів, задайте `channels.telegram.defaultAccount` (або включіть `channels.telegram.accounts.default`), щоб зробити маршрутизацію за замовчуванням явною. Інакше OpenClaw повертається до першого нормалізованого ID облікового запису, а `openclaw doctor` попереджає. Іменовані облікові записи успадковують `channels.telegram.allowFrom` / `groupAllowFrom`, але не значення `accounts.default.*`.
Пріоритет кількох акаунтів: коли налаштовано два або більше ID акаунтів, задайте `channels.telegram.defaultAccount` (або включіть `channels.telegram.accounts.default`), щоб зробити маршрутизацію за замовчуванням явною. Інакше OpenClaw повертається до першого нормалізованого ID акаунта, а `openclaw doctor` попереджає. Іменовані акаунти успадковують `channels.telegram.allowFrom` / `groupAllowFrom`, але не значення `accounts.default.*`.
</Note>
## Пов’язане
<CardGroup cols={2}>
<Card title="Pairing" icon="link" href="/uk/channels/pairing">
Зв’яжіть користувача Telegram із gateway.
Спаруйте користувача Telegram із Gateway.
</Card>
<Card title="Groups" icon="users" href="/uk/channels/groups">
Поведінка allowlist для груп і тем.
@ -985,6 +985,6 @@ dig +short api.telegram.org AAAA
Зіставляйте групи й теми з агентами.
</Card>
<Card title="Troubleshooting" icon="wrench" href="/uk/channels/troubleshooting">
Діагностика між каналами.
Міжканальна діагностика.
</Card>
</CardGroup>

File diff suppressed because one or more lines are too long