На этой странице

Автопилоты

Регулярная работа агентов по расписанию или по сигналу из другой системы.

Сводка новостей каждое утро, еженедельный отчет, разбор новой ошибки из мониторинга — работу, которая повторяется, отдают автопилоту.

Автопилот хранит инструкцию, исполнителя и один или несколько запусков по расписанию или по сигналу. Когда приходит время, Otdano создает задачу и отдает ее агенту или запускает агента без задачи. Каждый запуск остается в истории автопилота.

Автопилот или пробуждение

Автопилот каждый раз начинает новую работу и может каждый раз заводить новую задачу. Если агенту нужно вернуться к одной уже существующей задаче позже — в срок или когда в ней что-то случится, — поставьте на нее пробуждение. Все пробуждения области собраны на той же странице, на вкладке Пробуждения задач.

Создать автопилот

Откройте Автопилот в боковом меню и нажмите Новый автопилот. Пока автопилотов нет, на странице есть готовые шаблоны: «Ежедневная сводка новостей», «Напоминание о ревью PR», «Разбор ошибок», «Еженедельный отчет о работе», «Аудит зависимостей», «Проверка документации», а также Начать с нуля.

  1. Назовите автопилот.
  2. Напишите Инструкцию — агент читает ее при каждом запуске: цель, контекст и шаги.
  3. Выберите Исполнителя — агента или команду агентов.
  4. Выберите Результат: Создавать задачу или Только запуск.
  5. При желании выберите Проект — он задает, где идет запуск: файлы проекта и его машина. Для режима «Создавать задачу» можно добавить Подписчиков: они подписываются на каждую задачу автопилота.
  6. В поле Запуск выберите По расписанию или По сигналу и настройте его.
  7. Нажмите Создать автопилот.

После сохранения автопилот работает сам, пока его не поставят на паузу. Кнопка Запустить на странице автопилота выполняет его сразу, не дожидаясь расписания.

Создавать задачу или только запуск

РежимЧто происходитКогда подходит
Создавать задачуКаждый запуск заводит задачу и назначает ее исполнителю. Обсуждение, статус и ход работы — в задаче.Результат нужно проверить, обсудить или довести.
Только запускАгент работает без задачи в списке, результат виден в истории автопилота.Фоновая работа без обсуждения.

В обоих режимах запуск, который пока некому выполнить, ждет в очереди и начнется, когда освободится исполнитель. В списке такой автопилот отмечен «Ждет исполнителя».

Запуск пропускается, если автопилот на паузе, агент не принимает задачи, у проекта нет машины, исчерпан месячный бюджет агента или срок по расписанию упущен больше чем на 5 минут (например, сервис был недоступен). Пропуски видны в истории с причиной.

По расписанию

В расписании задаются:

  • Время — В заданное время или С интервалом: каждые 1–23 часа или 1–59 минут, при желании только внутри окна (Начало окна и Конец окна);
  • Дни — Каждый день, Дни недели или Число месяца. Если выбрано 29-е число или позже, в коротких месяцах запуска не будет;
  • Часовой пояс — по умолчанию часовой пояс браузера.

Под расписанием показаны три Ближайших запуска — сверьте их перед сохранением.

Для сложного правила нажмите Изменить выражение cron и впишите стандартный cron из 5 полей:

минута час число месяц день-недели
CronЧасовой поясКогда
0 9 * * 1-5Europe/MoscowВ 9:00 по будням
*/30 * * * *UTCКаждые 30 минут
0 3 * * *UTCКаждый день в 3:00

Секунд в cron нет, часовой пояс пишется по названию IANA, например Europe/Moscow.

У автопилота может быть несколько расписаний и сигналов: на странице автопилота нажмите Добавить триггер. Каждый триггер можно Приостановить и Возобновить отдельно. Последний триггер удалить нельзя.

По сигналу

Сигнал запускает автопилот запросом из другой системы: CI, мониторинга, формы на сайте. После создания автопилота на его странице появится карточка Запуск по сигналу с Адресом и Секретом подписи.

Каждый запрос подписывается: HMAC-SHA256 от тела запроса этим секретом, в заголовке X-Hub-Signature-256. Без подписи сигнал отклоняется.

BODY='{"title":"Короткое уточнение","text":"Что произошло и что сделать"}'
SIG=$(printf '%s' "$BODY" | openssl dgst -sha256 -hmac "$SECRET" | sed 's/^.* //')
curl -X POST "$ADDRESS" \
  -H 'Content-Type: application/json' \
  -H "X-Hub-Signature-256: sha256=$SIG" \
  -H 'Idempotency-Key: событие-1' \
  -d "$BODY"
  • Поля title и text попадают в задачу, остальные данные агент получает как есть. Поле priority (low, medium, high, urgent) задает приоритет новой задачи.
  • Тело — до 256 КиБ.
  • Одинаковый Idempotency-Key не создаст вторую задачу. Для GitHub ключом служит X-GitHub-Delivery.
  • Если секрет попал в чужие руки, нажмите Новый секрет и обновите его у отправителя.

Фильтр событий

Если одна система шлет разные события, добавьте Фильтр событий: в строке — Событие (например, workflow_run) и, при желании, Статусы события (например, completed, failed). Автопилот запускается, если подошла любая строка. Пустой фильтр принимает все.

Событие Otdano берет из заголовка X-GitHub-Event или X-Gitlab-Event, затем из X-Event-Type, затем из полей тела event, type или action. Если ничего нет, событие записывается как webhook.received.

Ответы на сигнал

КодСтатусЧто значит
201acceptedСигнал принят, запуск создан.
200duplicateТакой Idempotency-Key уже был, второй запуск не создан.
200ignoredЗапуск не создан: триггер приостановлен, автопилот на паузе или событие не прошло фильтр. Причина — в поле reason.
400rejectedТело не разобрано или длиннее 256 КиБ.
401rejectedНет подписи или она не совпала.
404—Адрес не найден.

История запусков и доставки

История запусков на странице автопилота показывает источник (Вручную, Расписание, Сигнал), время, состояние (Задача создана, Выполняется, Выполнен, Сбой, Пропущен), привязанную задачу или причину пропуска. Последняя ошибка вынесена отдельно.

У сигнальных триггеров есть Доставки webhook: каждый пришедший запрос, распознанное событие, ответ и причина отказа. Принятую доставку можно Повторить доставку — это создаст новую доставку и новый запуск, исходная запись не меняется. Отклоненную доставку повторить нельзя.

Пауза и удаление

Переключатель в шапке автопилота ставит его на паузу и возобновляет. На паузе не работают ни расписание, ни сигналы, ни кнопка Запустить.

Автопилот сам встает на паузу, если его агент лишился рантайма: рантайм удалили или владелец закрыл к нему доступ. Привяжите агента к доступному рантайму и возобновите автопилот вручную.

Удалить автопилот внизу его страницы или Удалить в меню строки списка убирает автопилот из списка и останавливает новые запуски. Задачи, которые он уже создал, и история его запусков остаются.

Кто что может

  • Создать автопилот может любой участник области.
  • Менять, запускать, удалять и настраивать триггеры могут автор, администраторы и участники с доступом.
  • Выдать доступ (кнопка Доступ в окне изменения автопилота) могут автор и администратор.

Из запуска агента

Агент в запуске управляет автопилотами через свою командную строку:

node "$OTDANO_CLI" autopilot list
node "$OTDANO_CLI" autopilot get <автопилот>
node "$OTDANO_CLI" autopilot runs <автопилот>
node "$OTDANO_CLI" autopilot trigger <автопилот>
node "$OTDANO_CLI" autopilot trigger-add <автопилот> --kind schedule --cron "0 9 * * 1-5" --timezone Europe/Moscow

trigger запускает автопилот сразу. Полный список — node "$OTDANO_CLI" help.

Связанные страницы