Карта операционной среды намечена в прошлом уроке — начинаем строить первый слой: агент переходит с ручного запуска на реакцию на события — письмо, заявку, платёж, обращение. Разберёмся, что для этого нужно.
Каждый день в бизнес прилетает десяток разных сигналов: письмо от клиента, сообщение в корпоративном чате, платёж на счёт, новая заявка на сайте, сработавший датчик остатков на складе. Для человека это разные по природе вещи — на письмо реагируют иначе, чем на платёж. Для среды, которую мы строим, разницы между ними нет: всё это — события.
Представь приёмную большой компании, куда одновременно приходят курьер с посылкой, официальное письмо от контрагента и внутренняя докладная записка. Все три сначала попадают в один и тот же журнал регистрации: от кого, когда, что за документ. И только после регистрации содержимое расходится по нужным отделам. Так же устроена событийная модель: любой сигнал, прежде чем система начнёт с ним что-то делать, упаковывается в одинаковый конверт — единую схему полей вне зависимости от того, откуда сигнал пришёл. Тип события, источник, время, содержимое — эти поля заполняются всегда, письмо это было или показание датчика.
Именно единый конверт даёт масштаб. Если бы для каждого источника — почты, чата, CRM, банка — приходилось писать отдельную ветку логики «что делать, когда пришло вот это», добавление каждой новой системы удваивало бы сложность. А если агенту, читающему события, всё равно, что перед ним — письмо или сработавший таймер, — новый источник данных превращается в задачу «научить один переводчик заполнять уже существующий конверт». Как именно пишутся такие переводчики, разберём отдельно; здесь достаточно понимать, зачем конверт должен быть единым.
Попав в конверт, событие не разбредается куда попало — оно идёт по фиксированному маршруту, одному и тому же для любого типа события:
- Событие попадает в среду.
- Система определяет, какая роль отвечает за события такого типа.
- Роль находит плейбук события — инструкцию «как реагировать на такое».
- Роль выполняет действие в рамках своих прав.
- Каждый шаг записывается в журнал.
Это управляемый цикл, а не самодеятельность. Разница принципиальна: точечный скрипт-затычка из прошлого урока, который закрывает один процесс, обычно реагирует на событие в обход всякого маршрута — логика зашита прямо в код, никто, кроме автора, не помнит, почему она такая. Событийный маршрут делает то же самое воспроизводимым: любой человек в компании может увидеть, по какому пути прошло конкретное событие — не потому что кто-то удосужился записать вручную, а потому что маршрут…