Кейсы
Кастомный робот Битрикс24: приостановка БП до внешнего HTTP-события
Собственный робот для коробочного Битрикс24, которая останавливает бизнес-процесс, ждёт внешний callback или таймаут, а после сигнала продолжает выполнение и передаёт результат дальше по процессу.
Задача
В бизнес-процессе иногда недостаточно просто вызвать внешний API и получить ответ в рамках одного HTTP-запроса. Внешняя система может завершить работу через несколько минут, часов или после ручного подтверждения.
Для такого сценария я сделал собственного робота, которая приостанавливает выполнение бизнес-процесса и переводит его в ожидание. Процесс продолжится только после внешнего HTTP-сигнала либо после заданного таймаута.
бизнес-процесс
↓
кастомный робот
↓
ожидание внешнего события
↓
HTTP callback или таймаут
↓
продолжение бизнес-процесса Как работает ожидание
При запуске действие создаёт запись ожидания и оставляет робота в выполняющемся состоянии. Бизнес-процесс при этом не завершается, но и не переходит к следующему шагу.
Для каждого запуска создаётся отдельное ожидание. Внешний сервис завершает именно нужный экземпляр процесса по секретному токену.
Execute
↓
создание ожидания
↓
подписка на внешнее событие
↓
статус Executing
↓
процесс ждёт
↓
внешний callback
↓
OnExternalEvent
↓
робот завершается
↓
процесс идёт дальше Таймаут работает как альтернативная ветка завершения ожидания: если внешний сигнал не пришёл вовремя, робот завершается по таймеру и бизнес-процесс также может продолжить работу.
Настройка действия
В дизайнере бизнес-процессов действие настраивается так же, как обычные штатные блоки. Для теста достаточно указать название ожидания, токен и таймаут. Токен можно сгенерировать в переменной и передать её в поле.
Завершение ожидания через callback
Чтобы продолжить бизнес-процесс, внешняя система отправляет HTTP POST на callback с токеном нужного ожидания.
Например:
curl -X POST \
-H "Content-Type: application/json" \
--data '{"result":"approved"}' \
"$CALLBACK_URL" В ответ callback подтверждает, что ожидание найдено и внешний сигнал принят. После этого событие передаётся в конкретный экземпляр бизнес-процесса, а робот завершает работу.
Строковый результат внешнего события можно сохранить в переменную бизнес-процесса и затем передать через эту переменную в следующий робот или другое действие процесса.
Продолжение бизнес-процесса
До получения callback процесс остаётся в списке активных и имеет статус выполнения.
После получения callback робот завершается, и процесс переходит к следующим действиям шаблона.
Журнал ожиданий
Для диагностики я добавил отдельный журнал последних ожиданий. В нём видно, какой экземпляр был создан, его статус, часть токена, связанный бизнес-процесс и полученный результат.
Где это применять
Механика подходит для сценариев, где результат появляется асинхронно:
- ожидание ответа внешней информационной системы;
- ручное согласование в стороннем сервисе;
- ожидание завершения расчёта или фоновой задачи;
- подтверждение оплаты;
- получение статуса доставки;
- обработка документа внешним сервисом;
- любая интеграция, где ответ нельзя получить в исходном HTTP-запросе.
Вместо постоянного опроса внешней системы бизнес-процесс просто ждёт события и продолжает выполнение тогда, когда результат действительно готов.