Автоматизации
Автоматизации выполняют инструкцию по расписанию и доставляют результат как обычный чат. Ежедневная сводка новостей, недельный обзор, месячный отчёт — каждое выполнение работает на сервере без интерфейса, появляется в списке чатов и продолжается как любой диалог.
Структура
У автоматизации есть имя, свободные инструкции, до пяти триггеров, необязательная модель (пусто означает Auto: модель чата пользователя во время выполнения), цель и настройка уведомлений (в приложении или выкл.). Цель определяет результат: Chat session по умолчанию ставит инструкцию в очередь разговора, а Work task запускает изолированную песочницу Work с инструкцией как первым сообщением, при необходимости по выбранной именованной политике. При включённых уведомлениях ошибка также попадает в центр уведомлений, даже если Automations закрыта. Имена и инструкции зашифрованы в покое. Автоматизация принадлежит создателю.
Триггеры используют модель календаря — once, hourly, daily, weekly, monthly, yearly. Следующее выполнение — самое раннее из будущих событий, вычисленное в локальной зоне сервера.
Выполнение
Планировщик с координационной арендой срабатывает каждую минуту, поэтому расписания продвигает одна реплика. При наступлении срока он записывает выполнение, ставит постоянное задание automation.run.v1 и обновляет next_run_at через compare-and-set, чтобы событие сработало максимум раз. Задание создаёт чат с названием автоматизации и передаёт инструкцию по той же постоянной цепочке генерации, включая маршрутизацию, персону и сохранение.
Если сервер был выключен, следующий тик выполняет последнее пропущенное событие раз и пропускает более старые. Приостановка очищает расписание; возобновление или правка пересчитывает его от текущего времени. Удаление каскадно удаляет историю.
Состояние берётся из постоянного журнала: успех после генерации, ошибка после dead-letter и stalled, если выполнение не началось за 30 минут.
Цель Work использует жизненный цикл Work вместо чат-задачи: запись связывается с созданной задачей, Runs ведёт к ней, успех наступает после завершения агента или запроса ввода, ошибка — при сбое или отмене. Доступ проверяется при срабатывании, поэтому его отзыв отключает автоматизации Work; выполнение честно завершается как work-access-denied. Политика проверяется при сохранении, а сеть и лимиты применяются ко всем задачам. В Work работают только прямые поставщики, модель должна поддерживать инструменты.
Процедуры агентов
Автоматизация Work может связаться с существующей задачей через workTaskId — это основа Routines в панели агента. Она не создаёт новую задачу: каждое событие запускается в её области и диалоге с моделью, поставщиком и политикой задачи, поэтому поля автоматизации не действуют, а переданная политика удаляется. Связь проверяется при сохранении. Удалённая задача даёт work-task-missing, занятая или с живым предпросмотром — work-task-busy, а не очередь.
Триггеры веб-хуков
Кроме расписания, автоматизацию может запустить внешняя система — конвейер CI, служба cron, домашняя автоматика. В окне редактирования автоматизации Триггер веб-хука → Включить создаёт секрет для этой автоматизации; хранится только его SHA-256, поэтому открытый текст показывается ровно один раз. Смена секрета немедленно аннулирует предыдущий, а отключение веб-хука снова закрывает эндпоинт.
Внешняя система запускает автоматизацию так:
curl -X POST https://your-host/api/automations/<automationId>/webhook \
-H "Authorization: Bearer lwh_..."
(X-Libre-Webhook-Secret: lwh_... работает как альтернативный заголовок.) Ответ — 202 с идентификатором поставленного в очередь выполнения: это тот же путь ручного запуска, что и Запустить сейчас, поэтому выполнения завершаются, уведомляют и попадают в историю одинаково. Сравнение секрета выполняется за постоянное время, отсутствующая автоматизация и неверный секрет отвечают одинаково (нет оракула по идентификаторам автоматизаций), а приостановленная автоматизация отвечает 409: в отличие от «Запустить сейчас» владельца, внешний вызывающий не может пробиться через паузу.
API
Все эндпоинты, кроме запуска веб-хуком, требуют аутентификации и работают только с автоматизациями вызывающего; запуск веб-хуком аутентифицируется секретом самой автоматизации.
| Метод | Путь | Назначение |
|---|---|---|
GET | /api/automations | Список |
POST | /api/automations | Создание |
GET | /api/automations/occurrences?from=&to= | Будущие события |
GET | /api/automations/runs | История (фильтруемая) |
GET | /api/automations/runs/summary | Непросмотренные + периоды 30 дней |
POST | /api/automations/runs/seen | Отметить завершённые просмотренными |
GET | /api/automations/:automationId | Прочитать одну |
PUT | /api/automations/:automationId | Обновить |
DELETE | /api/automations/:automationId | Удалить |
POST | /api/automations/:automationId/pause | Приостановить |
POST | /api/automations/:automationId/resume | Возобновить |
POST | /api/automations/:automationId/run | Запустить сейчас (202 с ID) |
POST | /api/automations/:automationId/webhook | Запуск по секрету (202) |
POST | /api/automations/:automationId/webhook-secret | Создание или смена секрета |
DELETE | /api/automations/:automationId/webhook-secret | Отключение веб-хука |
Пользователь может хранить до 50 автоматизаций; имя ограничено 200 символами, инструкция — 20 000.