diff --git a/docs/uk/automation/cron-jobs.md b/docs/uk/automation/cron-jobs.md index c41e66121..375a3e7a6 100644 --- a/docs/uk/automation/cron-jobs.md +++ b/docs/uk/automation/cron-jobs.md @@ -1,26 +1,26 @@ --- read_when: - Планування фонових завдань або пробуджень - - Підключення зовнішніх тригерів (Webhook, Gmail) до OpenClaw + - Підключення зовнішніх тригерів (вебхуків, Gmail) до OpenClaw - Вибір між Heartbeat і Cron для запланованих завдань sidebarTitle: Scheduled tasks -summary: Заплановані завдання, Webhook-и та тригери Gmail PubSub для планувальника Gateway +summary: Заплановані завдання, Webhook і тригери Gmail PubSub для планувальника Gateway title: Заплановані завдання x-i18n: - generated_at: "2026-04-28T11:04:12Z" + generated_at: "2026-04-29T08:22:12Z" model: gpt-5.5 provider: openai - source_hash: 4e2a62f73c0ed071eb36b93caf569b7df1bb3c6fd7e4cbef437aaecc57e0a70b + source_hash: 0a3df95ee8680e49fa97373f8325eb348a817aad49ceae6c73547ae3fd294cf2 source_path: automation/cron-jobs.md workflow: 16 --- -Cron — це вбудований планувальник Gateway. Він зберігає завдання, пробуджує агента в потрібний час і може доставляти вивід назад у канал чату або кінцеву точку Webhook. +Cron — це вбудований планувальник Gateway. Він зберігає завдання, пробуджує агента в потрібний час і може доставляти результат назад у канал чату або кінцеву точку Webhook. ## Швидкий старт - + ```bash openclaw cron add \ --name "Reminder" \ @@ -31,13 +31,13 @@ Cron — це вбудований планувальник Gateway. Він зб --delete-after-run ``` - + ```bash openclaw cron list openclaw cron show ``` - + ```bash openclaw cron runs --id ``` @@ -49,36 +49,37 @@ Cron — це вбудований планувальник Gateway. Він зб - Cron працює **всередині процесу Gateway** (не всередині моделі). - Визначення завдань зберігаються в `~/.openclaw/cron/jobs.json`, тому розклади не втрачаються після перезапусків. - Стан виконання під час роботи зберігається поруч у `~/.openclaw/cron/jobs-state.json`. Якщо ви відстежуєте визначення cron у git, відстежуйте `jobs.json` і додайте `jobs-state.json` до gitignore. -- Після розділення старіші версії OpenClaw можуть читати `jobs.json`, але можуть вважати завдання новими, оскільки поля стану виконання тепер містяться в `jobs-state.json`. -- Коли `jobs.json` редагується під час роботи або зупинки Gateway, OpenClaw порівнює змінені поля розкладу з метаданими очікуваного слота виконання й очищає застарілі значення `nextRunAtMs`. Переписування лише форматування або порядку ключів зберігає очікуваний слот. -- Усі виконання cron створюють записи [фонових завдань](/uk/automation/tasks). +- Після розділення старіші версії OpenClaw можуть читати `jobs.json`, але можуть вважати завдання новими, оскільки поля виконання тепер містяться в `jobs-state.json`. +- Коли `jobs.json` редагується під час роботи Gateway або коли його зупинено, OpenClaw порівнює змінені поля розкладу з метаданими очікуваного слота виконання й очищає застарілі значення `nextRunAtMs`. Суто форматувальні переписування або переписування лише з іншим порядком ключів зберігають очікуваний слот. +- Усі виконання cron створюють записи [фонового завдання](/uk/automation/tasks). +- Під час запуску Gateway прострочені ізольовані завдання ходу агента переплановуються за межі вікна підключення каналу замість негайного повторного відтворення, тому запуск Discord/Telegram і налаштування нативних команд залишаються чутливими після перезапусків. - Одноразові завдання (`--at`) за замовчуванням автоматично видаляються після успішного виконання. -- Ізольовані запуски cron за можливості закривають відстежувані вкладки браузера/процеси для свого сеансу `cron:` після завершення запуску, щоб від’єднана браузерна автоматизація не залишала після себе осиротілі процеси. -- Ізольовані запуски cron також захищають від застарілих підтверджувальних відповідей. Якщо перший результат — це лише проміжне оновлення стану (`on it`, `pulling everything together` і подібні підказки), а жоден дочірній запуск субагента більше не відповідає за фінальну відповідь, OpenClaw один раз повторно запитує фактичний результат перед доставкою. -- Ізольовані запуски cron спочатку віддають перевагу структурованим метаданим відмови у виконанні з вбудованого запуску, а потім повертаються до відомих фінальних маркерів підсумку/виводу, таких як `SYSTEM_RUN_DENIED` і `INVALID_REQUEST`, щоб заблокована команда не відображалася як успішний запуск. -- Ізольовані запуски cron також трактують помилки агента на рівні запуску як помилки завдання, навіть коли корисне навантаження відповіді не створено, тому збої моделі/провайдера збільшують лічильники помилок і запускають сповіщення про збій замість того, щоб очищати завдання як успішне. +- Ізольовані запуски cron за можливості закривають відстежувані вкладки браузера/процеси для свого сеансу `cron:` після завершення запуску, щоб від’єднана автоматизація браузера не залишала осиротілі процеси. +- Ізольовані запуски cron також захищають від застарілих відповідей-підтверджень. Якщо перший результат — це лише проміжне оновлення стану (`on it`, `pulling everything together` і подібні підказки), а жоден дочірній субагентський запуск більше не відповідає за фінальну відповідь, OpenClaw один раз повторно запитує фактичний результат перед доставкою. +- Ізольовані запуски cron надають перевагу структурованим метаданим відмови у виконанні з вбудованого запуску, а потім повертаються до відомих маркерів фінального підсумку/виводу, як-от `SYSTEM_RUN_DENIED` і `INVALID_REQUEST`, щоб заблоковану команду не було повідомлено як успішний запуск. +- Ізольовані запуски cron також трактують помилки агента на рівні запуску як помилки завдання, навіть коли корисне навантаження відповіді не створено, тому збої моделі/провайдера збільшують лічильники помилок і запускають сповіщення про збій замість очищення завдання як успішного. -Узгодження завдань для cron насамперед належить середовищу виконання, а вже потім спирається на довговічну історію: активне завдання cron лишається активним, доки середовище виконання cron все ще відстежує це завдання як запущене, навіть якщо старий рядок дочірнього сеансу все ще існує. Коли середовище виконання перестає володіти завданням і спливає 5-хвилинне пільгове вікно, обслуговування перевіряє збережені журнали запусків і стан завдання для відповідного запуску `cron::`. Якщо ця довговічна історія показує термінальний результат, журнал завдань фіналізується з нього; інакше обслуговування, яким володіє Gateway, може позначити завдання як `lost`. Офлайн-аудит CLI може відновитися з довговічної історії, але не трактує власний порожній внутрішньопроцесний набір активних завдань як доказ того, що запуск cron, яким володіє Gateway, зник. +Узгодження завдань для cron спочатку належить середовищу виконання, а вже потім спирається на довготривалу історію: активне завдання cron залишається активним, доки середовище виконання cron все ще відстежує це завдання як таке, що виконується, навіть якщо старий рядок дочірнього сеансу все ще існує. Коли середовище виконання перестає володіти завданням і 5-хвилинне вікно відстрочки спливає, перевірки обслуговування переглядають збережені журнали запусків і стан завдання для відповідного запуску `cron::`. Якщо ця довготривала історія показує термінальний результат, реєстр завдань фіналізується на її основі; інакше обслуговування, що належить Gateway, може позначити завдання як `lost`. Офлайн-аудит CLI може відновитися з довготривалої історії, але він не трактує власний порожній набір активних завдань у процесі як доказ того, що запуск cron, який належить Gateway, зник. ## Типи розкладів | Тип | Прапорець CLI | Опис | | ------- | ------------- | ------------------------------------------------------- | -| `at` | `--at` | Одноразова мітка часу (ISO 8601 або відносна, як `20m`) | +| `at` | `--at` | Одноразова часова позначка (ISO 8601 або відносна, як `20m`) | | `every` | `--every` | Фіксований інтервал | | `cron` | `--cron` | 5-польовий або 6-польовий вираз cron з необов’язковим `--tz` | -Мітки часу без часового поясу трактуються як UTC. Додайте `--tz America/New_York` для планування за місцевим настінним часом. +Часові позначки без часового поясу трактуються як UTC. Додайте `--tz America/New_York` для планування за локальним настінним часом. -Повторювані вирази на початку години автоматично розносяться в межах до 5 хвилин, щоб зменшити сплески навантаження. Використовуйте `--exact`, щоб примусово задати точний час, або `--stagger 30s` для явного вікна. +Повторювані вирази на початку години автоматично розносяться в межах до 5 хвилин, щоб зменшити піки навантаження. Використовуйте `--exact`, щоб примусово задати точний час, або `--stagger 30s` для явного вікна. ### День місяця і день тижня використовують логіку OR -Вирази Cron розбираються за допомогою [croner](https://github.com/Hexagon/croner). Коли поля дня місяця і дня тижня обидва не є шаблонами, croner збігається, коли збігається **будь-яке** з полів, а не обидва. Це стандартна поведінка Vixie cron. +Вирази Cron аналізуються за допомогою [croner](https://github.com/Hexagon/croner). Коли поля дня місяця і дня тижня обидва не є шаблонами, croner збігається, коли збігається **будь-яке** з полів, а не обидва. Це стандартна поведінка Vixie cron. ``` # Intended: "9 AM on the 15th, only if it's a Monday" @@ -86,94 +87,94 @@ Cron — це вбудований планувальник Gateway. Він зб 0 9 15 * 1 ``` -Це спрацьовує приблизно 5-6 разів на місяць замість 0-1 разу на місяць. OpenClaw тут використовує стандартну OR-поведінку Croner. Щоб вимагати обидві умови, використовуйте модифікатор дня тижня Croner `+` (`0 9 15 * +1`) або плануйте за одним полем і перевіряйте інше в промпті чи команді свого завдання. +Це спрацьовує приблизно 5-6 разів на місяць замість 0-1 разу на місяць. OpenClaw тут використовує стандартну поведінку OR від Croner. Щоб вимагати обидві умови, використовуйте модифікатор дня тижня `+` від Croner (`0 9 15 * +1`) або плануйте за одним полем і перевіряйте інше в підказці чи команді вашого завдання. ## Стилі виконання -| Стиль | Значення `--session` | Де запускається | Найкраще для | -| --------------- | -------------------- | ---------------------- | -------------------------------------- | -| Основний сеанс | `main` | Наступний Heartbeat | Нагадування, системні події | -| Ізольований | `isolated` | Виділений `cron:` | Звіти, фонові роботи | -| Поточний сеанс | `current` | Прив’язаний під час створення | Повторювана робота з урахуванням контексту | +| Стиль | Значення `--session` | Виконується в | Найкраще для | +| --------------- | -------------------- | -------------------------- | ------------------------------- | +| Основний сеанс | `main` | Наступний хід Heartbeat | Нагадування, системні події | +| Ізольований | `isolated` | Виділений `cron:` | Звіти, фонові справи | +| Поточний сеанс | `current` | Прив’язується під час створення | Періодична робота з урахуванням контексту | | Користувацький сеанс | `session:custom-id` | Постійний іменований сеанс | Робочі процеси, що спираються на історію | - - Завдання **основного сеансу** ставлять системну подію в чергу і необов’язково пробуджують Heartbeat (`--wake now` або `--wake next-heartbeat`). Ці системні події не подовжують свіжість щоденного/неактивного скидання для цільового сеансу. **Ізольовані** завдання запускають виділений хід агента зі свіжим сеансом. **Користувацькі сеанси** (`session:xxx`) зберігають контекст між запусками, вмикаючи робочі процеси на кшталт щоденних стендапів, що спираються на попередні підсумки. + + Завдання **основного сеансу** ставлять у чергу системну подію та необов’язково пробуджують Heartbeat (`--wake now` або `--wake next-heartbeat`). Ці системні події не подовжують свіжість щоденного/неактивного скидання для цільового сеансу. **Ізольовані** завдання виконують виділений хід агента зі свіжим сеансом. **Користувацькі сеанси** (`session:xxx`) зберігають контекст між запусками, уможливлюючи робочі процеси на кшталт щоденних стендапів, що спираються на попередні підсумки. - - Для ізольованих завдань "свіжий сеанс" означає новий transcript/session id для кожного запуску. OpenClaw може переносити безпечні вподобання, як-от налаштування thinking/fast/verbose, мітки та явні вибрані користувачем перевизначення моделі/auth, але не успадковує навколишній контекст розмови зі старішого рядка cron: маршрутизацію каналу/групи, політику надсилання або черги, elevation, origin чи прив’язку середовища виконання ACP. Використовуйте `current` або `session:`, коли повторюване завдання має навмисно спиратися на той самий контекст розмови. + + Для ізольованих завдань «свіжий сеанс» означає новий ідентифікатор стенограми/сеансу для кожного запуску. OpenClaw може переносити безпечні налаштування, як-от параметри thinking/fast/verbose, мітки та явно вибрані користувачем перевизначення моделі/автентифікації, але не успадковує навколишній контекст розмови зі старішого рядка cron: маршрутизацію каналу/групи, політику надсилання або черги, підвищення прав, походження чи прив’язку середовища виконання ACP. Використовуйте `current` або `session:`, коли періодичне завдання має навмисно спиратися на той самий контекст розмови. - - Для ізольованих завдань демонтаж середовища виконання тепер включає найкраще можливе очищення браузера для цього сеансу cron. Помилки очищення ігноруються, щоб фактичний результат cron залишався пріоритетним. + + Для ізольованих завдань завершення середовища виконання тепер включає best-effort очищення браузера для цього сеансу cron. Помилки очищення ігноруються, щоб фактичний результат cron усе одно мав пріоритет. - Ізольовані запуски cron також звільняють будь-які вбудовані екземпляри середовища виконання MCP, створені для завдання, через спільний шлях очищення середовища виконання. Це відповідає тому, як розбираються MCP-клієнти основного сеансу і користувацького сеансу, тому ізольовані завдання cron не залишають процеси-нащадки stdio або довготривалі MCP-з’єднання між запусками. + Ізольовані запуски cron також звільняють усі вбудовані екземпляри середовища виконання MCP, створені для завдання, через спільний шлях очищення середовища виконання. Це відповідає тому, як завершуються MCP-клієнти основного сеансу та користувацького сеансу, тож ізольовані завдання cron не залишають stdio дочірні процеси або довготривалі MCP-з’єднання між запусками. - - Коли ізольовані запуски cron оркеструють субагентів, доставка також віддає перевагу фінальному виводу нащадка над застарілим проміжним текстом батьківського запуску. Якщо нащадки все ще працюють, OpenClaw пригнічує це часткове оновлення батьківського запуску замість оголошення його. + + Коли ізольовані запуски cron оркеструють субагентів, доставка також надає перевагу фінальному виводу нащадка над застарілим проміжним текстом батьківського запуску. Якщо нащадки все ще виконуються, OpenClaw пригнічує це часткове батьківське оновлення замість того, щоб оголошувати його. - Для текстових цілей оголошення Discord OpenClaw надсилає канонічний фінальний текст асистента один раз замість повторного відтворення і потокових/проміжних текстових payload, і фінальної відповіді. Медіа та структуровані payload Discord усе ще доставляються як окремі payload, щоб вкладення й компоненти не відкидалися. + Для текстових цілей оголошень Discord OpenClaw надсилає канонічний фінальний текст асистента один раз замість повторного відтворення і потокових/проміжних текстових корисних навантажень, і фінальної відповіді. Медіа та структуровані корисні навантаження Discord усе ще доставляються як окремі корисні навантаження, щоб вкладення й компоненти не було втрачено. -### Параметри payload для ізольованих завдань +### Параметри корисного навантаження для ізольованих завдань - Текст промпта (обов’язковий для ізольованого запуску). + Текст підказки (обов’язковий для ізольованих). Перевизначення моделі; використовує вибрану дозволену модель для завдання. - Перевизначення рівня мислення. + Перевизначення рівня thinking. - Пропустити ін’єкцію bootstrap-файла робочої області. + Пропустити впровадження файлів початкового налаштування робочої області. Обмежити, які інструменти може використовувати завдання, наприклад `--tools exec,read`. -`--model` використовує вибрану дозволену модель як основну модель цього завдання. Це не те саме, що перевизначення `/model` у чат-сеансі: налаштовані ланцюжки fallback усе ще застосовуються, коли основна модель завдання не спрацьовує. Якщо запитана модель не дозволена або її неможливо розв’язати, cron завершує запуск невдачею з явною помилкою валідації замість мовчазного повернення до вибору агента/типової моделі завдання. +`--model` використовує вибрану дозволену модель як основну модель цього завдання. Це не те саме, що перевизначення `/model` у чат-сеансі: налаштовані ланцюжки резервних варіантів усе ще застосовуються, коли основна модель завдання зазнає збою. Якщо запитана модель не дозволена або її неможливо визначити, cron завершує запуск помилкою з явною помилкою валідації замість тихого повернення до вибору моделі агента/стандартної моделі завдання. -Завдання Cron також можуть містити `fallbacks` на рівні payload. Коли вони наявні, цей список замінює налаштований ланцюжок fallback для завдання. Використовуйте `fallbacks: []` у payload/API завдання, коли потрібен строгий запуск cron, який пробує лише вибрану модель. Якщо завдання має `--model`, але не має ані payload, ані налаштованих fallback, OpenClaw передає явне порожнє перевизначення fallback, щоб основна модель агента не додавалася як прихована додаткова ціль повторної спроби. +Завдання Cron також можуть містити `fallbacks` на рівні корисного навантаження. Якщо вони присутні, цей список замінює налаштований ланцюжок резервних варіантів для завдання. Використовуйте `fallbacks: []` у корисному навантаженні/API завдання, коли потрібен строгий запуск cron, який пробує лише вибрану модель. Якщо завдання має `--model`, але не має ні резервних варіантів у корисному навантаженні, ні налаштованих резервних варіантів, OpenClaw передає явне порожнє перевизначення резервних варіантів, щоб основна модель агента не додавалася як прихована додаткова ціль повторної спроби. Пріоритет вибору моделі для ізольованих завдань: -1. Перевизначення моделі хука Gmail (коли запуск надійшов із Gmail і це перевизначення дозволене) -2. `model` у payload конкретного завдання -3. Збережене перевизначення моделі cron-сеансу, вибране користувачем -4. Вибір агента/типової моделі +1. Перевизначення моделі Gmail-хука (коли запуск прийшов із Gmail і це перевизначення дозволене) +2. `model` у корисному навантаженні окремого завдання +3. Збережене користувачем перевизначення моделі сеансу cron +4. Вибір моделі агента/стандартної моделі -Швидкий режим також наслідує розв’язаний живий вибір. Якщо конфіг вибраної моделі має `params.fastMode`, ізольований cron використовує це за замовчуванням. Збережене перевизначення сеансу `fastMode` усе ще має пріоритет над конфігом в обох напрямках. +Швидкий режим також відповідає визначеному живому вибору. Якщо конфігурація вибраної моделі має `params.fastMode`, ізольований cron використовує це за замовчуванням. Збережене перевизначення `fastMode` сеансу все ще має пріоритет над конфігурацією в будь-якому напрямку. -Якщо ізольований запуск потрапляє на live model-switch handoff, cron повторює спробу з перемкненим провайдером/моделлю і зберігає цей live-вибір для активного запуску перед повторною спробою. Коли перемикання також несе новий auth profile, cron також зберігає це перевизначення auth profile для активного запуску. Повторні спроби обмежені: після початкової спроби плюс 2 повторні спроби перемикання cron переривається замість нескінченного циклу. +Якщо ізольований запуск натрапляє на живу передачу перемикання моделі, cron повторює спробу з перемкненим провайдером/моделлю та зберігає цей живий вибір для активного запуску перед повторною спробою. Коли перемикання також містить новий профіль автентифікації, cron також зберігає це перевизначення профілю автентифікації для активного запуску. Повторні спроби обмежені: після початкової спроби плюс 2 повторні спроби перемикання cron переривається замість безкінечного циклу. -Перш ніж ізольований запуск cron увійде в runner агента, OpenClaw перевіряє доступні локальні кінцеві точки провайдера для налаштованих провайдерів `api: "ollama"` і `api: "openai-completions"`, у яких `baseUrl` є local loopback, приватною мережею або `.local`. Якщо ця кінцева точка недоступна, запуск записується як `skipped` з чіткою помилкою провайдера/моделі замість запуску виклику моделі. Результат кінцевої точки кешується на 5 хвилин, тому багато запланованих завдань, які використовують той самий недоступний локальний сервер Ollama, vLLM, SGLang або LM Studio, ділять один невеликий probe замість створення шторму запитів. Пропущені provider-preflight-запуски не збільшують backoff помилок виконання; увімкніть `failureAlert.includeSkipped`, коли потрібні повторні сповіщення про пропуск. +Перш ніж ізольований запуск cron увійде в runner агента, OpenClaw перевіряє досяжні локальні кінцеві точки провайдерів для налаштованих провайдерів `api: "ollama"` і `api: "openai-completions"`, чий `baseUrl` є local loopback, приватною мережею або `.local`. Якщо ця кінцева точка недоступна, запуск записується як `skipped` із чіткою помилкою провайдера/моделі замість запуску виклику моделі. Результат кінцевої точки кешується на 5 хвилин, тому багато належних до виконання завдань, які використовують той самий недоступний локальний сервер Ollama, vLLM, SGLang або LM Studio, ділять один малий зонд замість створення шквалу запитів. Пропущені запуски передперевірки провайдера не збільшують backoff помилок виконання; увімкніть `failureAlert.includeSkipped`, коли потрібні повторні сповіщення про пропуски. ## Доставка і вивід | Режим | Що відбувається | | ---------- | ----------------------------------------------------------------- | -| `announce` | Fallback-доставка фінального тексту до цілі, якщо агент не надіслав | -| `webhook` | POST payload завершеної події на URL | -| `none` | Немає fallback-доставки runner | +| `announce` | Резервно доставляє фінальний текст до цілі, якщо агент не надіслав | +| `webhook` | POST корисне навантаження завершеної події на URL | +| `none` | Немає резервної доставки runner | -Використовуйте `--announce --channel telegram --to "-1001234567890"` для доставки в канал. Для тем форуму Telegram використовуйте `-1001234567890:topic:123`; прямі викликачі RPC/конфігу також можуть передавати `delivery.threadId` як рядок або число. Цілі Slack/Discord/Mattermost мають використовувати явні префікси (`channel:`, `user:`). Ідентифікатори кімнат Matrix чутливі до регістру; використовуйте точний ідентифікатор кімнати або форму `room:!room:server` з Matrix. +Використовуйте `--announce --channel telegram --to "-1001234567890"` для доставки в канал. Для тем форуму Telegram використовуйте `-1001234567890:topic:123`; прямі RPC/конфігураційні виклики також можуть передавати `delivery.threadId` як рядок або число. Цілі Slack/Discord/Mattermost мають використовувати явні префікси (`channel:`, `user:`). Ідентифікатори кімнат Matrix чутливі до регістру; використовуйте точний ідентифікатор кімнати або форму `room:!room:server` з Matrix. -Для ізольованих завдань доставка в чат є спільною. Якщо маршрут чату доступний, агент може використовувати інструмент `message`, навіть коли завдання використовує `--no-deliver`. Якщо агент надсилає до налаштованої/поточної цілі, OpenClaw пропускає fallback-оголошення. Інакше `announce`, `webhook` і `none` керують лише тим, що runner робить із фінальною відповіддю після ходу агента. +Для ізольованих завдань доставлення в чат є спільним. Якщо маршрут чату доступний, агент може використовувати інструмент `message`, навіть коли завдання використовує `--no-deliver`. Якщо агент надсилає до налаштованої/поточної цілі, OpenClaw пропускає резервне оголошення. Інакше `announce`, `webhook` і `none` керують лише тим, що runner робить із фінальною відповіддю після ходу агента. -Коли агент створює ізольоване нагадування з активного чату, OpenClaw зберігає збережену ціль живої доставки для резервного маршруту оголошення. Внутрішні ключі сеансів можуть бути в нижньому регістрі; цілі доставки провайдера не відтворюються з цих ключів, коли доступний поточний контекст чату. +Коли агент створює ізольоване нагадування з активного чату, OpenClaw зберігає чинну ціль живого доставлення для резервного маршруту оголошення. Внутрішні ключі сеансів можуть бути в нижньому регістрі; цілі доставлення провайдерів не реконструюються з цих ключів, коли доступний поточний контекст чату. Сповіщення про помилки використовують окремий шлях призначення: -- `cron.failureDestination` задає глобальне типове місце призначення для сповіщень про помилки. +- `cron.failureDestination` задає глобальне значення за замовчуванням для сповіщень про помилки. - `job.delivery.failureDestination` перевизначає його для окремого завдання. -- Якщо жодне з них не задано, а завдання вже доставляє через `announce`, сповіщення про помилки тепер повертаються до цієї основної цілі оголошення. -- `delivery.failureDestination` підтримується лише для завдань `sessionTarget="isolated"`, якщо основний режим доставки не є `webhook`. -- `failureAlert.includeSkipped: true` вмикає для завдання або глобальної політики cron-сповіщень повторювані сповіщення про пропущені запуски. Пропущені запуски ведуть окремий лічильник послідовних пропусків, тому вони не впливають на відступ після помилок виконання. +- Якщо не задано жодного з них, а завдання вже доставляється через `announce`, сповіщення про помилки тепер повертаються до цієї основної цілі оголошення. +- `delivery.failureDestination` підтримується лише для завдань із `sessionTarget="isolated"`, якщо основний режим доставлення не `webhook`. +- `failureAlert.includeSkipped: true` вмикає для завдання або глобальної політики сповіщень cron повторювані сповіщення про пропущені запуски. Пропущені запуски зберігають окремий лічильник послідовних пропусків, тому вони не впливають на backoff помилок виконання. ## Приклади CLI @@ -218,7 +219,7 @@ Cron — це вбудований планувальник Gateway. Він зб ## Webhook-и -Gateway може відкривати HTTP Webhook-ендпоінти для зовнішніх тригерів. Увімкніть у конфігурації: +Gateway може надавати HTTP-ендпоїнти Webhook для зовнішніх тригерів. Увімкніть у конфігурації: ```json5 { @@ -232,7 +233,7 @@ Gateway може відкривати HTTP Webhook-ендпоінти для з ### Автентифікація -Кожен запит має містити токен hook-а через заголовок: +Кожен запит має містити токен hook через заголовок: - `Authorization: Bearer ` (рекомендовано) - `x-openclaw-token: ` @@ -241,7 +242,7 @@ Gateway може відкривати HTTP Webhook-ендпоінти для з - Поставити системну подію в чергу для основного сеансу: + Додати системну подію в чергу для основного сеансу: ```bash curl -X POST http://127.0.0.1:18789/hooks/wake \ @@ -271,20 +272,20 @@ Gateway може відкривати HTTP Webhook-ендпоінти для з Поля: `message` (обов’язкове), `name`, `agentId`, `wakeMode`, `deliver`, `channel`, `to`, `model`, `fallbacks`, `thinking`, `timeoutSeconds`. - - Власні назви hook-ів розв’язуються через `hooks.mappings` у конфігурації. Зіставлення можуть перетворювати довільні payload-и на дії `wake` або `agent` за допомогою шаблонів чи перетворень коду. + + Користувацькі імена hook розв’язуються через `hooks.mappings` у конфігурації. Зіставлення можуть перетворювати довільні payload-и на дії `wake` або `agent` за допомогою шаблонів чи перетворень коду. -Тримайте hook-ендпоінти за loopback, tailnet або довіреним reverse proxy. +Тримайте ендпоїнти hook за loopback, tailnet або довіреним reverse proxy. -- Використовуйте окремий токен hook-а; не використовуйте повторно токени автентифікації Gateway. +- Використовуйте окремий токен hook; не використовуйте повторно токени автентифікації gateway. - Тримайте `hooks.path` на окремому підшляху; `/` відхиляється. - Задайте `hooks.allowedAgentIds`, щоб обмежити явну маршрутизацію `agentId`. - Тримайте `hooks.allowRequestSessionKey=false`, якщо вам не потрібні сеанси, вибрані викликачем. -- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити допустимі форми ключів сеансів. -- Payload-и hook-ів типово обгортаються межами безпеки. +- Якщо ви вмикаєте `hooks.allowRequestSessionKey`, також задайте `hooks.allowedSessionKeyPrefixes`, щоб обмежити дозволені форми ключів сеансів. +- Payload-и hook типово обгортаються межами безпеки. @@ -293,20 +294,20 @@ Gateway може відкривати HTTP Webhook-ендпоінти для з Під’єднайте тригери вхідної пошти Gmail до OpenClaw через Google PubSub. -**Передумови:** CLI `gcloud`, `gog` (gogcli), увімкнені hook-и OpenClaw, Tailscale для публічного HTTPS-ендпоінта. +**Передумови:** CLI `gcloud`, `gog` (gogcli), увімкнені hooks OpenClaw, Tailscale для публічного HTTPS-ендпоїнта. -### Налаштування майстром (рекомендовано) +### Налаштування через майстер (рекомендовано) ```bash openclaw webhooks gmail setup --account openclaw@gmail.com ``` -Це записує конфігурацію `hooks.gmail`, вмикає пресет Gmail і використовує Tailscale Funnel для push-ендпоінта. +Це записує конфігурацію `hooks.gmail`, вмикає preset Gmail і використовує Tailscale Funnel для push-ендпоїнта. ### Автозапуск Gateway -Коли `hooks.enabled=true` і задано `hooks.gmail.account`, Gateway запускає `gog gmail watch serve` під час запуску й автоматично поновлює watch. Задайте `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб відмовитися. +Коли `hooks.enabled=true` і задано `hooks.gmail.account`, Gateway під час запуску запускає `gog gmail watch serve` і автоматично поновлює watch. Задайте `OPENCLAW_SKIP_GMAIL_WATCHER=1`, щоб відмовитися. ### Ручне одноразове налаштування @@ -321,7 +322,7 @@ openclaw webhooks gmail setup --account openclaw@gmail.com ``` - + ```bash gcloud pubsub topics create gog-gmail-watch gcloud pubsub topics add-iam-policy-binding gog-gmail-watch \ @@ -385,11 +386,11 @@ openclaw cron edit --clear-agent Примітка щодо перевизначення моделі: - `openclaw cron add|edit --model ...` змінює вибрану модель завдання. -- Якщо модель дозволена, цей точний провайдер/модель потрапляє до ізольованого запуску агента. -- Якщо її не дозволено або неможливо розв’язати, cron завершує запуск помилкою з явною помилкою валідації. -- Налаштовані ланцюжки fallback-ів усе ще застосовуються, бо cron `--model` є основною моделлю завдання, а не перевизначенням `/model` сеансу. -- Payload `fallbacks` замінює налаштовані fallback-и для цього завдання; `fallbacks: []` вимикає fallback і робить запуск суворим. -- Звичайний `--model` без явного або налаштованого списку fallback-ів не переходить до основної моделі агента як мовчазної додаткової цілі повторної спроби. +- Якщо модель дозволена, цей точний провайдер/модель доходить до ізольованого запуску агента. +- Якщо вона не дозволена або її неможливо розв’язати, cron завершує запуск помилкою з явною помилкою валідації. +- Налаштовані ланцюжки fallback і далі застосовуються, бо cron `--model` є основною моделлю завдання, а не перевизначенням `/model` сеансу. +- Payload `fallbacks` замінює налаштовані fallback-и для цього завдання; `fallbacks: []` вимикає fallback і робить запуск строгим. +- Простий `--model` без явного або налаштованого списку fallback не переходить до основної моделі агента як мовчазної додаткової цілі повторної спроби. @@ -413,23 +414,23 @@ openclaw cron edit --clear-agent } ``` -`maxConcurrentRuns` обмежує як заплановану dispatch-обробку cron, так і виконання ізольованих ходів агента. Ізольовані ходи cron-агента внутрішньо використовують виділену смугу виконання `cron-nested` черги, тому збільшення цього значення дає змогу незалежним LLM-запускам cron просуватися паралельно, а не лише запускати їхні зовнішні cron-обгортки. Спільна не-cron смуга `nested` цим налаштуванням не розширюється. +`maxConcurrentRuns` обмежує як заплановане dispatch cron, так і виконання ізольованих ходів агента. Ізольовані ходи cron-агента внутрішньо використовують виділену смугу виконання черги `cron-nested`, тому збільшення цього значення дає незалежним cron-запускам LLM просуватися паралельно, а не лише запускати їхні зовнішні cron-обгортки. Спільна не-cron смуга `nested` цим налаштуванням не розширюється. -Стан runtime sidecar виводиться з `cron.store`: сховище `.json`, як-от `~/clawd/cron/jobs.json`, використовує `~/clawd/cron/jobs-state.json`, тоді як шлях сховища без суфікса `.json` додає `-state.json`. +Допоміжний файл стану runtime виводиться з `cron.store`: сховище `.json`, як-от `~/clawd/cron/jobs.json`, використовує `~/clawd/cron/jobs-state.json`, тоді як шлях сховища без суфікса `.json` додає `-state.json`. -Якщо ви вручну редагуєте `jobs.json`, не додавайте `jobs-state.json` до системи контролю версій. OpenClaw використовує цей sidecar для очікуваних слотів, активних маркерів, метаданих останнього запуску та ідентичності розкладу, яка повідомляє планувальнику, коли зовні відредагованому завданню потрібен свіжий `nextRunAtMs`. +Якщо ви вручну редагуєте `jobs.json`, не додавайте `jobs-state.json` до системи контролю версій. OpenClaw використовує цей допоміжний файл для pending slots, активних маркерів, метаданих останнього запуску та ідентичності розкладу, яка повідомляє scheduler, коли зовнішньо відредагованому завданню потрібен новий `nextRunAtMs`. Вимкнути cron: `cron.enabled: false` або `OPENCLAW_SKIP_CRON=1`. - **Повторна спроба для одноразового завдання**: тимчасові помилки (обмеження частоти, перевантаження, мережа, помилка сервера) повторюються до 3 разів з експоненційним відступом. Постійні помилки вимикають негайно. + **Повторна спроба one-shot**: тимчасові помилки (ліміт частоти, перевантаження, мережа, помилка сервера) повторюються до 3 разів з експоненційним backoff. Постійні помилки вимикають негайно. - **Повторна спроба для повторюваного завдання**: експоненційний відступ (від 30 с до 60 хв) між повторними спробами. Відступ скидається після наступного успішного запуску. + **Повторна спроба recurring**: експоненційний backoff (від 30 с до 60 хв) між повторними спробами. Backoff скидається після наступного успішного запуску. - `cron.sessionRetention` (типово `24h`) обрізає записи ізольованих сеансів запуску. `cron.runLog.maxBytes` / `cron.runLog.keepLines` автоматично обрізають файли журналу запусків. + `cron.sessionRetention` (типово `24h`) очищає записи ізольованих сеансів запуску. `cron.runLog.maxBytes` / `cron.runLog.keepLines` автоматично очищають файли журналів запусків. @@ -453,26 +454,26 @@ openclaw doctor - Перевірте `cron.enabled` і змінну середовища `OPENCLAW_SKIP_CRON`. - Переконайтеся, що Gateway працює безперервно. - Для розкладів `cron` перевірте часовий пояс (`--tz`) порівняно з часовим поясом хоста. - - `reason: not-due` у виводі запуску означає, що ручний запуск було перевірено через `openclaw cron run --due`, і час завдання ще не настав. + - `reason: not-due` у виводі запуску означає, що ручний запуск було перевірено командою `openclaw cron run --due`, і строк виконання завдання ще не настав. - - - Режим доставки `none` означає, що резервне надсилання runner-а не очікується. Агент усе ще може надсилати напряму через інструмент `message`, коли доступний маршрут чату. - - Відсутня або недійсна ціль доставки (`channel`/`to`) означає, що вихідну доставку було пропущено. - - Для Matrix скопійовані або застарілі завдання з ідентифікаторами кімнат `delivery.to` у нижньому регістрі можуть завершуватися помилкою, бо ідентифікатори кімнат Matrix чутливі до регістру. Відредагуйте завдання до точного значення `!room:server` або `room:!room:server` з Matrix. - - Помилки автентифікації каналу (`unauthorized`, `Forbidden`) означають, що доставку заблоковано обліковими даними. - - Якщо ізольований запуск повертає лише тихий токен (`NO_REPLY` / `no_reply`), OpenClaw пригнічує пряму вихідну доставку, а також пригнічує резервний шлях підсумку в черзі, тому в чат нічого не публікується. - - Якщо агент має сам надіслати повідомлення користувачу, перевірте, що завдання має придатний маршрут (`channel: "last"` з попереднім чатом або явний канал/ціль). + + - Режим доставлення `none` означає, що резервне надсилання runner не очікується. Агент усе ще може надсилати напряму за допомогою інструмента `message`, коли доступний маршрут чату. + - Відсутня/недійсна ціль доставлення (`channel`/`to`) означає, що вихідне повідомлення було пропущено. + - Для Matrix скопійовані або legacy завдання з ідентифікаторами кімнат `delivery.to` у нижньому регістрі можуть не спрацювати, бо ідентифікатори кімнат Matrix чутливі до регістру. Відредагуйте завдання до точного значення `!room:server` або `room:!room:server` з Matrix. + - Помилки автентифікації каналу (`unauthorized`, `Forbidden`) означають, що доставлення заблоковано обліковими даними. + - Якщо ізольований запуск повертає лише silent token (`NO_REPLY` / `no_reply`), OpenClaw пригнічує пряме вихідне доставлення, а також пригнічує резервний шлях queued summary, тому нічого не надсилається назад у чат. + - Якщо агент має сам надіслати повідомлення користувачу, перевірте, що завдання має придатний маршрут (`channel: "last"` із попереднім чатом або явний канал/ціль). - - - Свіжість щоденного й idle-скидання не базується на `updatedAt`; див. [Керування сеансами](/uk/concepts/session#session-lifecycle). - - Cron wakeup-и, heartbeat-запуски, exec-сповіщення та службове ведення Gateway можуть оновлювати рядок сеансу для маршрутизації/статусу, але вони не подовжують `sessionStartedAt` або `lastInteractionAt`. - - Для застарілих рядків, створених до появи цих полів, OpenClaw може відновити `sessionStartedAt` із заголовка сеансу transcript JSONL, якщо файл усе ще доступний. Застарілі idle-рядки без `lastInteractionAt` використовують цей відновлений час початку як свою idle-базу. + + - Актуальність щоденного та idle reset не базується на `updatedAt`; див. [Керування сеансами](/uk/concepts/session#session-lifecycle). + - Wakeup-и cron, запуски heartbeat, exec-сповіщення та службові записи gateway можуть оновлювати рядок сеансу для маршрутизації/статусу, але вони не подовжують `sessionStartedAt` або `lastInteractionAt`. + - Для legacy рядків, створених до появи цих полів, OpenClaw може відновити `sessionStartedAt` із заголовка сеансу transcript JSONL, коли файл ще доступний. Legacy idle rows без `lastInteractionAt` використовують цей відновлений час початку як свій idle baseline. - - Cron без `--tz` використовує часовий пояс хоста Gateway. + - Cron без `--tz` використовує часовий пояс хоста gateway. - Розклади `at` без часового поясу трактуються як UTC. - Heartbeat `activeHours` використовує налаштоване розв’язання часового поясу. @@ -481,7 +482,7 @@ openclaw doctor ## Пов’язане -- [Автоматизація та завдання](/uk/automation) — усі механізми автоматизації з першого погляду -- [Фонові завдання](/uk/automation/tasks) — журнал завдань для виконань cron +- [Автоматизація й завдання](/uk/automation) — короткий огляд усіх механізмів автоматизації +- [Фонові завдання](/uk/automation/tasks) — журнал завдань для виконань Cron - [Heartbeat](/uk/gateway/heartbeat) — періодичні ходи основного сеансу -- [Часовий пояс](/uk/concepts/timezone) — конфігурація часового поясу +- [Часовий пояс](/uk/concepts/timezone) — налаштування часового поясу