retailCRM Документация

Правила подготовки триггеров

Выражения в фильтре и условии триггера задаются в определенном синтаксисе, и должны возвращать логический результат.

В выражениях можно работать с объектами, которые передаются в событии. Перечень доступных в объектах методов см. в справочнике объектов.

В триггерах на события «Изменение заказа» и «Изменение клиента» доступен объект changeSet (тип Change\EntityChangeSet). В этом объекте в триггер передаются изменения, произведенные в заказе/клиенте в данный момент. В справочнике объектов можно увидеть доступные методы данного объекта. Подробнее о наборе изменений можно почитать в соответствующей статье.

Примеры выражений

1. Проверяем, что у заказа указан тип доставки «Почта России»:

order.getDeliveryType() and order.getDeliveryType().getCode() == "russian-post"

2. Проверяем, что изменилось поле статуса доставки отправления Почтой России или EMS

changeSet.hasChangedField("integration_delivery_data.status")

3. Проверяем, что статус заказа изменился на «Недозвон»

changeSet.hasChangedField("status") and changeSet.getNewValue("status").getCode() == "did-not-get-through"

4. Проверяем, что статус заказа перешел в группы статусов «Выполнен» либо «Отмена»

changeSet.hasChangedField("status") and changeSet.getNewValue("status").getGroupCode() in ["complete", "cancel"]

5. Проверяем, что заказ просрочен

changeSet.hasChangedField("expired") and changeSet.getNewValue("expired")

6. Проверяем, что в заказе указан телефон

order.getAnyPhone() != ""

7. Проверяем, что клиент не отписан от рассылки

not order.getCustomer().getEmailMarketingUnsubscribedAt()

8. Поступление нового заказа

changeSet.isCreate()

Проверка последнего запуска триггера

При помощи функции last_run возможно получать информацию о последнем запуске триггера, функция возвращает объект типа RuleExecution или null, если триггер еще не запускался. При этом возвращается последний запуск для контекста текущего события, например для события «Изменение заказа» будет возвращена информация о последнем срабатывании триггера для изменяемого в текущий момент заказа.

Функция принимает 3 аргумента, все они опциональные:

Пример запускаем триггер не чаще раза в день:

not last_run("1 day")

Пример проверяем запуска триггера по коду:

last_run(null, "send-email-1day")

Пример Условие для триггера на событие «Изменение заказа» для срабатывания, если пользователь оплачивает уже 2й заказ за неделю

changeSet.hasChangedField("payment_status") and changeSet.getChangedField("payment_status").isPaymentComplete() and
last_run("7 days", "order_pay", order.getCustomer())

Действия изменения данных заказа, клиента, менеджера

С помощью таких действий вы можете изменять информацию о заказе, клиенте или менеджере при срабатывании триггера.

Например, при оплате заказа больше чем на 50000 рублей, установить флаг "Важный клиент" у клиента:

Выражение имеет тот же синтаксис что и условие триггера, только его результатом должно быть соответствующее полю значение, т.е. для поля Фамилия строка, для пользовательского поля даты - объект DateTime, для Магазина - объект класса Site, для пользовательского поля типа список - соответствующий элемент.

Для этого в выражениях для задания значения справочника можно просто указывать его код (см. далее), также возможно использование функций.

Для использования в выражении доступны те же объекты, что и для условия триггера, например order, customer, changeSet

Автоматическое преобразование кода в элемент справочника
Задание даты

Особенности сегментных триггеров

Факт попадания клиента в сегмент и факт выхода клиента из сегмента фиксируется в истории клиента, а это значит, что эти события можно отлавливать в триггерах.

Пример условия триггера для определения, что клиент попал в определенный сегмент:

changeSet.hasChangedField('segments') and changeSet.getNewValue('segments') and changeSet.getNewValue('segments').getCode() == 'some-segment'

Пример условия триггера для определения, что клиент вышел из определенного сегмента:

changeSet.hasChangedField('segments') and changeSet.getOldValue('segments') and changeSet.getOldValue('segments').getCode() == 'some-segment'

Триггеры на пропущенные звонки

В триггеры на пропущенные звонки приходит объект Call. Описание доступных методов можно посмотреть в справочнике объектов. У звонка может быть указан пользователь, которому поступал звонок call.getManager(), заказ, с которым связан звонок call.getOrder(), и клиент, которому принадлежит номер телефона call.getCustomer(). Менеджер, заказ и клиент могут быть не указаны у звонка, и это необходимо предварительно проверять, если в условии триггера используются эти объекты.

При создании триггеров на пропущенные звонки можно не указывать фильтр и условие срабатывания триггера. В этом случае триггер будет срабатывать на все пропущенные звонки. Но могут быть ситуации, когда нужно обрабатывать только определенные категории пропущенных звонков. Ниже приведены примеры условий для некоторых категорий.

Звонок, пропущенный пользователем с email vasya@pupkin.ru:

call.getManager() and call.getManager().getEmailAddress() == "vasya@pupkin.ru"

Звонок, пропущенный пользователем из группы менеджеров:

call.getManager() and call.getManager().isManager()

Звонок, пропущенный пользователями из группы с символьным кодом call-center:

call.getManager() and call.getManager().hasGroup("call-center")

Звонок от VIP-клиента:

call.getCustomer() and call.getCustomer().getVip() == true

Звонок от клиента c общей суммой заказов более 10000 рублей:

call.getCustomer() and call.getCustomer().getTotalSumm() >= 10000

Звонок по заказу в статусе «Новый»:

call.getOrder() and call.getOrder().getStatus().getCode() == "new"

Редакция от 23.08.2017 09:58