Робот в Битрикс24 срабатывает через раз: где искать причину
«Робот иногда не срабатывает» — одна из самых частых жалоб на Битрикс24. Слово «иногда» здесь ключевое: оно означает, что условие выполняется не всегда, а не что портал глючит.
Почему «иногда» — это не случайность
Робот выполняется по условию. Если он срабатывает через раз, значит условие истинно через раз, и задача сводится к тому, чтобы поймать состояние, при котором оно ложно. Случайных сбоев здесь почти не бывает.
Разбирая один такой робот, мы нашли три отдельные причины сразу — и каждая по отдельности ломала уведомление клиенту.
Причина первая: проверка окружения в асинхронном контексте
В коде стояла проверка признака окружения, которая в фоновом выполнении бизнес-процесса никогда не была истинной. На странице портала условие срабатывало, в фоне — нет. Отсюда и «иногда»: вручную запускаешь — работает, само по себе — нет.
Если что-то работает при ручном запуске и не работает автоматически — ищите зависимость от контекста: текущего пользователя, сайта, сессии или переменных окружения. В фоне их может не быть.
Причина вторая: ссылка на несуществующий шаг
Внутри шаблона была ссылка на действие, которого в шаблоне больше нет — его удалили при одной из правок. Процесс доходил до этого места и тихо обрывался. В интерфейсе это выглядит как «ничего не произошло».
Причина третья: перепутанные ветки условия
Условие ветвления было составлено так, что в рабочем сценарии выполнялась не та ветка. Логика при этом выглядела правдоподобно — такое находится только сверкой с реальными значениями полей, а не чтением схемы.
Как искать самому
- Смотреть журнал выполнения бизнес-процесса — на каком шаге он остановился
- Проверять значения полей у конкретного элемента, а не в общем виде
- Сравнивать ручной запуск с автоматическим: разница укажет на зависимость от контекста
- Проверять, что все шаги, на которые ссылается шаблон, ещё существуют
И отдельно: если робот шлёт клиентам сообщения, любые массовые правки данных стоит проводить так, чтобы роботы не запускались. Иначе разбор одной поломки обернётся рассылкой по всей базе.
Робот важный, а разбираться некогда
Разбираем чужие бизнес-процессы и роботов: находим, на каком шаге обрывается ветка, и чиним так, чтобы отладка осталась возможной и дальше.