Skip to content

Автодействия ​

При смене статуса проекта или за N дней до его даты система сама ставит задачу, добавляет пакет задач из шаблона, шлёт уведомление или пишет в чат проекта. Правила настраиваются без программиста (ТЗ «Шаблоны, этапы и Гант…», раздел 8).

Реализовано: этап 6 — миграция 0191 (automation_rules, automation_runs, project_status_history.automation_processed_at, tasks.automation_rule_id, начальный набор правил — выключен), модуль internal/modules/automations, служебная задача tasks.Service.CreateSystemTask, системное сообщение chats.Service.PostProjectSystemMessage, пакет задач projecttemplates.Service.ApplyTasksPackage.


Правило ​

ЧастьВарианты
Когда (trigger_kind)project_created; status_entered + trigger_status (один раз за жизнь проекта, repeat_each_entry — при каждом входе); date_offset + anchor (mount, event_start, event_end) + offset_days — для проектов «Подтверждён» и «В работе»
Для каких проектов (conditions)Дивизионы, типы мероприятий, шаблоны (проект создан по шаблону), источники заявки; внутри списка — ИЛИ, между списками — И
Что сделать (actions, до 10, по порядку)create_task — название и описание с подстановками, исполнитель (manager, role, user, division_head; нет такого — менеджер проекта), срок (from_trigger + дни или anchor + дни; в прошлом — сегодня), часы, чек-лист, этап по названию; add_template_tasks — этапы, задачи и вехи шаблона (этапы с тем же названием переиспользуются); notify — менеджеру, руководителю дивизиона, ролям команды, сотрудникам; chat_message — системное сообщение в чат проекта

Подстановки: {проект}, {клиент}, {дата мероприятия}, {монтаж}, {менеджер}, {причина} (причина проигрыша). Действий, меняющих статус проекта, нет — так исключены циклы.

Как выполняется ​

  1. Смена статуса и создание проекта попадают в project_status_history (триггер базы, см. продажи) — значит, ловятся любые пути, включая автоматические переходы по задачам.
  2. Обработчик в процессе API (APP_AUTOMATIONS_ENABLED, по умолчанию включён) каждые 5 секунд берёт необработанные строки старше 5 секунд (проект по шаблону успевает наполниться), подбирает включённые правила, проверяет условия и ставит запуски в automation_runs с ключом от повторов (created, status:<статус>[:<строка истории>], date:<дата якоря>). FOR UPDATE SKIP LOCKED позволяет держать несколько копий API.
  3. Правила по датам проверяются раз в день после 8:00 по часовому поясу компании с догоном двух пропущенных дней; новое или включённое правило проверяется в ближайший проход.
  4. Запуск выполняет действия по порядку; ошибка останавливает запуск (сделанное раньше остаётся в результате), автор правила (у начальных правил — тот, кто их включил) получает automation.failed не чаще раза в день по правилу. Задача, для которой не нашлось исполнителя даже среди запасных (нет менеджера), — тоже ошибка запуска, а не тихий пропуск.

Правила «от монтажа» у проекта без даты монтажа считают от начала мероприятия — и при отборе проектов, и в сроке задачи. 5. Выполненный запуск пишет в историю проекта событие project.automation_executed («Автодействие «…» поставило задачу «…» (Петров)»), рассылает живые обновления задач и плана проекта. Задачи помечены automation_rule_id — «Создано автоматически»; в шаблон и копию проекта они не переносятся.

Настройка ​

/automations — CRUD (не указано is_active — правило создаётся выключенным), PATCH /automations/:id/active, POST /automations/:id/dry-run {project_id} и POST /automations/dry-run {project_id, rule} для несохранённого правила (что сделало бы правило, ничего не создавая; учитываются условия, для правил по датам — статус проекта и наличие даты), GET /automations/runs — журнал. Право — capability automations_manage: администратор и генеральный директор.

Начальный набор ​

Миграция кладёт пять выключенных правил: «Подтверждён: подписать договор», «Подтверждён: заказать транспорт» (за 7 дней до монтажа), «За 3 дня до монтажа: проверить оборудование», «После мероприятия: фотоотчёт и документы», «Проигран: сообщить руководителю продаж». Стартовая задача менеджеру при создании проекта пока остаётся прежней (настройка APP_AUTO_CREATE_PROJECT_KICKOFF_TASK); перенести её в правило «Проект создан» можно, выключив флаг.

Загружаем документацию…