Условие
Сценарий без условий делает одно и то же с каждой записью. Но почти всегда нужно по-разному: крупный заказ — руководителю, мелкий — менеджеру; заявку без телефона — на проверку. Для этого есть условия.
Условие — блок с вопросом и двумя выходами: «да» и «нет». Запись идёт по одному из них. Вопрос — это сравнение поля со значением:
- равно — город равен «Москва»;
- больше, меньше — сумма больше 50 000 (только для чисел — урок 3);
- содержит — в теме письма есть слово «срочно»;
- пусто или нет — поле «телефон» пустое.
Главное правило условий: у каждого выхода есть судьба. Если выход «нет» никуда не ведёт, записи по нему просто исчезают — без ошибки, без следа. Иногда это и нужно (отфильтровать спам), но это должно быть решением, а не забывчивостью.
Названия условий пишут вопросом: «Сумма больше 50 000?», «Телефон пустой?». Тогда на схеме видно, какой выход что значит, и не нужно открывать блок, чтобы вспомнить.
Ветвление
Когда путей больше двух, условия не нанизывают одно на другое, а используют ветвление: один блок, одно поле, несколько выходов по значениям.
Ветвление удобно, когда запись нужно направить по типу: тема обращения, город, вид товара, статус заказа. Вместо лестницы из пяти условий «это заказ? нет — это возврат? нет — это…» — один блок с пятью ветками, который читается сразу.
Обязательная часть ветвления — ветка «иначе»: куда идут записи, не подошедшие ни под одно правило. Мир всегда пришлёт то, о чём никто не подумал: новую тему в форме, опечатку в городе, пустое значение. Без ветки «иначе» такие записи исчезают.
Хорошая судьба для «иначе» — передать человеку с пометкой: «не распознано, посмотрите». Так сценарий не теряет данные и заодно показывает, какие правила стоит добавить: если в «иначе» регулярно падает одно и то же, пора завести для этого свою ветку.
Несколько условий
Часто решение зависит от нескольких условий сразу: сумма и новизна клиента, город и вид товара. Их соединяют словами И и ИЛИ:
- И — должны выполниться все: сумма больше 10 000 и клиент новый;
- ИЛИ — хватит одного: тема «срочно» или сумма больше 100 000.
Когда условий становится три-четыре, в голове они путаются. Помогает таблица решений: выписать все сочетания и для каждого — что делать. Её составляют до сборки, на бумаге или в таблице.
| A | B | C | |
|---|---|---|---|
| 1 | Сумма заказа | Клиент новый? | Куда |
| 2 | больше 50 000 | любой | руководителю |
| 3 | до 50 000 | да | менеджеру + приветственное письмо |
| 4 | до 50 000 | нет | менеджеру |
| 5 | пусто | любой | на проверку человеку |
Таблица решений даёт три вещи. Видно, все ли случаи учтены — включая пустые значения. Видно, нет ли противоречий — один случай ведёт в два места. И по ней легко проверить готовый сценарий: прогнать по записи на каждую строку таблицы и убедиться, что каждая пришла куда надо.
Порядок проверки тоже важен: сначала ловят особые случаи (пустые поля, крупные суммы), потом обычные. Иначе обычное правило перехватит запись раньше, чем до неё дойдёт особое.
Повторы и круги
Последняя тема урока — повторы. Многие из них система делает сама: пришло двадцать записей — шаг выполнился двадцать раз (урок 3). Но бывают случаи, когда повтор нужно устроить явно.
Пакеты. Многие сервисы ограничивают, сколько запросов можно отправить за минуту. Если записей тысяча, их обрабатывают порциями: по пятьдесят, с паузой между порциями. Иначе сервис начнёт отказывать, и часть записей не дойдёт.
Ожидание. Иногда между шагами нужна пауза: напомнить клиенту через день после заказа, проверить оплату через час. Системы умеют «подождать» — но долгие ожидания лучше делать отдельным сценарием по расписанию, который находит всех, кому пора напомнить.
Повтор при неудаче. Сервис на минуту недоступен — шаг можно повторить через несколько секунд. Об этом подробнее в уроке об ошибках.
Главная опасность повторов — бесконечный круг. Сценарий пишет строку в таблицу, а триггер этого же сценария срабатывает на новую строку в той же таблице — и сценарий запускает сам себя снова и снова. Такие круги расходуют лимиты, засоряют таблицы и могут разослать сотни писем, пока их не остановят.
Простая защита от кругов и повторной обработки — отметка: после обработки записи ставить в ней «обработано» и в начале сценария пропускать такие записи. Она же спасает от дублей, если сценарий случайно запустится дважды.