Skip to content

Автоматизации

Что такое автоматизация

Автоматизация — это правило вида «когда происходит X с записью этой сущности — выполнить Y», которое срабатывает автоматически на сервере, без участия человека. Это самый простой по сравнению с бизнес-процессами механизм: автоматизация не показывает пользователю никаких задач и не ждёт его действий, она просто выполняет заданную логику в момент события.

Настраиваются автоматизации в редакторе сущности, на вкладке Автоматизация (доступна после того, как сущность сохранена хотя бы раз). Список правил представлен раскрывающимися блоками; кнопка Add Rule добавляет новое правило, а в пустом состоянии есть ссылка Create your first rule.

Каждое правило состоит из:

  • названия (поле «Rule Name»),
  • триггера — события, при котором правило срабатывает,
  • необязательного условия,
  • одного или нескольких действий, которые выполняются при срабатывании.

Триггеры

Доступны полные события жизненного цикла записи плюс отдельный тип для запуска по расписанию:

ТриггерКогда срабатывает
Before CreateДо создания записи — подходит для проверок и подстановки значений по умолчанию
After CreateПосле создания записи — подходит для уведомлений и логирования
Before UpdateДо сохранения изменений записи — подходит для вычислений и проверок
After UpdateПосле сохранения изменений — подходит для синхронизации с другими данными и аудита
Before DeleteДо удаления записи — подходит для проверок, можно ли удалять
After DeleteПосле удаления записи — подходит для зачистки связанных данных
Scheduled (Cron)По расписанию, без привязки к событию над конкретной записью — см. раздел Автоматизации по расписанию ниже

На триггерах «Before» можно изменить данные записи перед сохранением (в скрипте действия доступен массив данных записи на запись/изменение). На триггерах «Before Create» и «Before Delete» можно прервать операцию — выбросив исключение в скрипте действия, что отменяет создание/удаление записи с сообщением об ошибке.

Условие

Для триггеров Before Update и After Update доступен флажок Выполнять только если поле изменилось. При включении нужно выбрать конкретное поле из списка полей сущности — правило сработает только если значение именно этого поля действительно изменилось при сохранении. Для других триггеров условие не показывается (оно неприменимо — например, на создании ещё нет «старого» значения для сравнения).

Других типов условий (несколько условий, операторы сравнения, AND/OR) на уровне самого правила нет — более сложная фильтрация (например, «поле изменилось и новое значение равно X») реализуется внутри скрипта действия на основе переданных данных.

Действия

В одном правиле может быть несколько действий, выполняемых последовательно. Доступно три типа:

Script Block (PHP) — выполнить скрипт

Произвольный PHP-скрипт, который выполняется в защищённой песочнице (запрещены опасные операции — выполнение команд, прямой доступ к файловой системе, работа с БД/Artisan напрямую и т.п.). Внутри скрипта доступны:

  • $data — данные записи. Изменение этого массива на before-триггерах сохраняется вместе с записью.
  • $user — текущий пользователь (id, имя, email) или null, если действие вызвано системой (например, по расписанию).
  • $oldData — данные записи до изменения (доступно только на триггерах update).
  • $api — вспомогательный объект с методами для работы с данными:
    • $api->get('table', $id), $api->find('table', 'field', 'value'), $api->query('table', $conditions, $limit) — чтение записей (включая выборку по условиям — единственный способ найти нужные записи в скриптах по расписанию);
    • $api->updateRecord('table', $id, $data) — обновление другой записи;
    • $api->getRelatedByTable(...), $api->addRelatedByTable(...), $api->unlinkRelatedByTable(...) — работа со связанными записями;
    • $api->sendTelegram(...), $api->sendEmail(...), $api->sendPushNotification(...) — отправка уведомлений;
    • $api->now(), $api->parseDate(...), $api->log(...) — служебные хелперы;
    • $api->categoryPath(...), $api->categoryAncestors(...), $api->categoryIsDescendantOf(...), $api->categoryChildren(...), $api->categoryFindByName(...), $api->categoryFindByPath(...) — работа с древовидными справочниками категорий.

Для остановки сохранения записи скрипт должен выбросить исключение (throw new \Exception("текст ошибки")).

Set Category (no-code) — проставить категорию без кода

Действие без программирования: автоматически устанавливает значение в поле типа Category (см. Типы полей). Настраивается:

  • Целевое поле — какое поле-категорию заполнять;
  • РежимСтатическое значение (всегда один и тот же узел справочника) или Из другого поля (найти узел по значению текстового поля записи);
  • при поиске из поля — искать По имени узла или По полному пути (с настраиваемым разделителем, например «Электроника/Телефоны»), с возможностью ограничить поиск конкретной родительской веткой;
  • Если узел не найден — оставить поле как было, очистить поле, или прервать сохранение с ошибкой.

Если на это же поле также пишет какой-то бизнес-процесс, конструктор показывает предупреждение о потенциальном конфликте порядка выполнения.

Start Process (BPMN) — запустить бизнес-процесс

Запускает выбранный шаблон бизнес-процесса, передавая текущую запись как входные данные. Требует уже существующую запись, поэтому на триггере Before Create это действие не выполняет ничего (записи с id ещё не существует).

Действия Set Category и Start Process недоступны для триггера Scheduled (Cron) — для него можно использовать только Script Block (PHP).

Автоматизации по расписанию

Автоматизации с триггером Scheduled (Cron) — самый недавно добавленный механизм платформы. Они отличаются от остальных триггеров тем, что не привязаны к событию над одной записью, а запускаются по расписанию глобально для всей сущности. Это удобно для регулярных пакетных операций: проверка просроченных дедлайнов, расчёт SLA, периодическая очистка, синхронизация с внешними системами.

Как настроить

  1. Откройте вкладку Автоматизация сущности, создайте правило (Add Rule) или откройте существующее.
  2. В поле Trigger Event выберите Scheduled (Cron).
  3. Заполните Cron-выражение — стандартное cron-выражение из 5 полей (минута, час, день месяца, месяц, день недели). Рядом есть кнопки-пресеты для быстрой подстановки: Каждые 5 мин (*/5 * * * *), Каждые 15 мин (*/15 * * * *), Ежечасно (0 * * * *), Ежедневно в 09:00 (0 9 * * *).
  4. Флажком Активно правило можно временно приостановить без удаления (подпись в интерфейсе: «снимите галочку, чтобы приостановить без удаления»).
  5. Добавьте действие Script Block (PHP) — единственный поддерживаемый тип действия для расписаний. Поскольку расписание не привязано к конкретной записи, в скрипте нет готовых $data/$oldData — нужные записи нужно самостоятельно найти через $api->query('table', $conditions, $limit), например выбрать все просроченные заявки и обновить их через $api->updateRecord(...).
  6. Рядом с настройками расписания есть кнопка ▶ Запустить сейчас — она выполняет правило немедленно, не дожидаясь расписания, и сразу показывает результат («Выполнено успешно» или текст ошибки).

Как это работает технически

Расписания не требуют отдельной настройки на сервере — Laravel-планировщик каждую минуту запускает системную команду, которая проверяет cron-выражения всех включённых scheduled-правил по всем сущностям и определяет, какое из них «пора выполнить» (сравнивая cron-выражение с моментом последнего фактического запуска правила). Те правила, которые наступили, выполняются автоматически.

Где смотреть статус и историю запусков

Все scheduled-правила по всем сущностям сразу собраны на отдельном экране Cron-задачи (Управление приложением → Система → Cron-задачи, адрес /cron-jobs). Таблица показывает:

КолонкаСодержание
СущностьК какой сущности относится правило
ПравилоНазвание автоматизации
РасписаниеCron-выражение
АктивноАктивно / Приостановлено
Последний запускДата и время последнего фактического выполнения
СтатусУспешно / Ошибка (при ошибке — текст ошибки во всплывающей подсказке) / Ещё не запускалось
Следующий запускРасчётное время следующего срабатывания по cron-выражению
ДействияКнопки Запустить сейчас и Открыть сущность (переход в редактор сущности к этому правилу)

Важно: для каждого правила хранится только последний результат выполнения (время, статус, текст ошибки при сбое), а не полная история всех прошлых запусков — экран показывает текущее состояние расписаний, а не журнал. Если правило выполняется несколько раз, более старые результаты не сохраняются — каждый новый запуск перезаписывает предыдущий результат для этого правила.

Чем автоматизация отличается от бизнес-процесса

Автоматизация и бизнес-процесс решают разные задачи, и в редакторе сущности это два отдельных механизма (вкладки Автоматизация и Процессы):

  • Автоматизация — это серверная логика без участия человека: «если случилось X — сделай Y» или «по расписанию делай Y». Нет ни задач, ни ожидания чьего-либо решения. Подходит для проверок, вычислений, проставления значений, уведомлений и периодических операций.
  • Бизнес-процесс — это BPMN-схема с явными задачами для людей: запрос на согласование, ожидание выполнения работы, ветвление по решению пользователя. Подходит, когда в цепочке обработки записи есть шаг, требующий чьего-то осознанного решения.

Обе системы могут изменять одни и те же поля записи (например, и автоматизация, и процесс способны сменить статус или заполнить поле категории) — именно поэтому редактор показывает предупреждение о потенциальном конфликте, если одно и то же поле пишут оба механизма. На практике для одной сущности часто используют оба: автоматизации — для рутинных проверок и расчётов, бизнес-процесс — для шагов, где нужно действие человека.

Документация Orbita ITSM