Примеры триггеров
Скопировать ссылку на статью
Скопировано

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

Полезные выражения для триггеров:

О том, как создавать и работать с триггерами читайте в статьях:

Примеры триггеров

Создание заказа при пропущенном звонке (если он не привязался к существующему заказу)

Описание триггера: Проверяет наличие существующего заказа у клиента по входящему номеру телефона. Если заказа нет, то создается новый.

  • Событие: Пропущенный звонок
  • Условие: Новый заказ «Да»
  • Действие: Создать заказ

Создание задачи при пропущенном звонке, если заказ уже есть

Описание триггера: Проверяет наличие существующего заказа у клиента по входящему номеру телефона. Если заказ есть, то ставит задачу менеджеру.

  • Событие: Пропущенный звонок
  • Условие: Новый заказ «Нет»
  • Действие: Поставить задачу (настройте описание задачи)

Создание нового клиента по пропущенному звонку, если его нет в системе

Описание триггера: Проверяет наличие в системе клиента по пропущенному звонку. Если клиента нет, то создает нового.

  • Событие: Пропущенный звонок
  • Условие: Новый клиент «Да»
  • Действие: Создать клиента

Создание клиента по звонку, если его нет в системе

Описание триггера: Проверяет наличие в системе клиента по входящему принятому звонку. Если клиента нет, то создает нового.

  • Событие: Новый звонок
  • Условие: Новый клиент «Да»
  • Действие: Создать клиента

Согласование деталей заказа

Описание триггера: При переводе заказа в статус "Наличие подтверждено" ставит задачу менеджеру (статус заказа может быть любой)

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Наличие подтверждено»
  • Действие: Поставить задачу (настройте описание задачи)

Заказ был просрочен в статусе Наличие подтверждено

Описание триггера: Уведомляет менеджера о просроченном заказе

  • Событие: Изменение заказа
  • Условие: условие в конструкторе не настраивается, используйте представленный ниже код
  • Действие: Отправить оповещение (создайте шаблон оповещения)

((changeSet.hasChangedField("expired") and changeSet.getNewValue("expired")) and (order.status.code in ['availability-confirmed']))

Заказ был переведен в статус Готов ждать

Описание триггера: При переводе заказа в статус "Готов ждать" (кастомный статус. Может быть любым) запускает цепочку триггеров на проверку наличия товара через день и его дальнейшего автобронирования.

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Готов ждать»
  • Действие: Изменить данные заказа «Имя». В выражении действия указываем значение order.firstName, чтобы имя было изменено на то, которое уже указано в заказе (это необходимо, чтобы запустить событие следующего триггера)

Отложенный триггер для перевода в статус для автобронирования

Примечание

Данный триггер напрямую связан с триггером, который описан выше.

Описание триггера: Цепочка триггеров на автобронирование товаров. Переводит заказ в статус срабатывания автобронирования.

  • Событие: После срабатывания триггера для заказа
  • Условие: В поле «После триггера» выбираем триггер, который описан выше (Заказ был переведен в статус Готов ждать), в значении «Через» указываем 1 день.
  • Действие: Изменить данные заказа «Статус заказа». В выражении действия указываем символьный код статуса, который запускает автобронирование товаров.

Возврат

Описание триггера: При переводе заказа в статус "Возврат", отправляет клиенту сообщения об отмене заказа.

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Возврат»
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Отправка ссылки на оплату

Описание триггера: Отправляет клиенту ссылку на оплату заказа.

Важно!

Вместо код_типа_оплаты нужно вставить символьный код интеграционного типа оплаты

  • Событие: Изменение заказа
  • Условие: условие в конструкторе не настраивается, используйте представленный ниже код
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Код условия применения триггера:

(changeSet.isCreate() and order.payments|contains(item => item.type.code == "код_типа_оплаты")) or (changeSet | contains(item => item.fieldName == "payments" and item.oldValue == null and item.newValue.type.code == "код_типа_оплаты"))

Заказ был оплачен

Описание триггера: При изменении статуса оплаты на "Оплачен" (учитывается частичная оплата), меняет статус заказа на "Передано в комплектацию" и ставит задачу

  • Событие: Изменение заказа
  • Условие: Изменение статуса оплаты с Любой на = «Оплачен»
  • Действие: Изменить данные заказа «Статус заказа» (в выражении укажите "send-to-assembling") и Поставить задачу

Заказ был укомплектован

Описание триггера: Если статус заказа меняется на "Укомплектован", переводит заказ в статус "Передано в доставку"

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Укомплектован»
  • Действие: Изменить данные заказа «Статус заказа» (в выражении укажите "send-to-delivery")

Доставка была перенесена

Описание триггера: При переводе заказа в статус "Доставка перенесена" ставит задачу

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Доставка перенесена» (кастомный статус)
  • Действие: Поставить задачу

Пришёл трек-номер

Описание триггера: Отправляет клиенту трек-номер для отслеживания заказа при оформлении доставки через модуль транспортной компании в интерфейсе системы

  • Событие: Изменение заказа
  • Условие: условие в конструкторе не настраивается, используйте представленный ниже код
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Код условия применения триггера:

changeSet.hasChangedField("integration_delivery_data.track_number") and changeSet.getOldValue("integration_delivery_data.track_number") == null

Заказ прибыл в ПВЗ

Описание триггера: При переводе заказа в статус "Прибыл в ПВЗ", отправляет клиенту уведомление об этом

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Прибыл в ПВЗ» (кастомный статус)
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Заказ не выкуплен из ПВЗ 5 дней

Примечание

Данный триггер напрямую связан с триггером, который описан выше.

Описание триггера: Отправляет сообщение клиенту с необходимостью забрать заказ, если заказ не выкуплен из ПВЗ через 5 дней.

  • Событие: После срабатывания триггера для заказа
  • Условие: В поле «После триггера» выбираем триггер, который описан выше (Заказ прибыл в ПВЗ), в значении «Через» указываем 5 дней. Статус заказа не равняется «Выполнен».
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Задача менеджеру если заказ не выкуплен после 5 дней (ТК)

Примечание

Данный триггер напрямую связан с триггером, который описан выше.

Описание триггера: Если заказ не выкуплен из ПВЗ на 6й день, триггер ставить задачу менеджеру для уточнения причины

  • Событие: После срабатывания триггера для заказа
  • Условие: В поле «После триггера» выбираем триггер, который описан выше (Заказ не выкуплен из ПВЗ 5 дней), в значении «Через» указываем 1 день. Статус заказа не равняется «Выполнен».
  • Действие: Поставить задачу

Заказ выполнен, благодарность

Описание триггера: После перевода заказа в статус "Выполнен" отправляет клиенту уведомление с благодарностью

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Выполнен»
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Отзыв

Примечание

Данный триггер напрямую связан с триггером, который описан выше.

Описание триггера: Через 24 часа после перевода заказ в статус "Выполнен" отправляет клиенту сообщение с просьбой оставить отзыв.

  • Событие: После срабатывания триггера для заказа
  • Условие: В поле «После триггера» выбираем триггер, который описан выше (Заказ выполнен, благодарность), в значении «Через» указываем 1 день
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Заказ готов к самовывозу

Описание триггера: При переводе статуса заказа в "Готов к самовывозу" отправляет клиенту уведомление с адресом магазина и сроком хранения

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с Любой на = «Готов к самовывозу» (кастомный статус)
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Заказ готов к самовывозу уже 2 дня

Примечание

Данный триггер напрямую связан с триггером, который описан выше.

Описание триггера: Если заказ не забрали из магазина через 2 дня, отправляет сообщение с информацией, что срок хранения заканчивается.

  • Событие: После срабатывания триггера для заказа
  • Условие: В поле «После триггера» выбираем триггер, который описан выше (Заказ готов к самовывозу), в значении «Через» указываем 2 дня. Статус заказа = «Готов к самовывозу».
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

На заказ был назначен курьер

Описание триггера: Если доставка осуществляется собственным курьером, триггер отправляет клиенту сообщение с информацией о курьере

  • Событие: Изменение заказа
  • Условие: условие в конструкторе не настраивается, используйте представленный ниже код
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Код условия применения триггера:

changeSet.hasChangedField("integration_delivery_data.courier") and order.deliveryType.code == "courier"

Для повтора процесса автобронирования

Описание триггера: При переводе заказ из статуса "Ожидается поступление" в "Предложить замену", автоматически переводит заказ в статус "Готов ждать", для повторного срабатывания автобронирования

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с = «Ожидается поступление» на = «Предложить замену»
  • Действие: Изменить данные заказа «Статус заказа». В выражении действия указываем символьный код статуса, который запускает автобронирование товаров.

Предлагаем замену

Описание триггера: Если товара нет в наличии и не сработало автобронирование, ставит задачу менеджеру "Предложить замену"

  • Событие: Изменение заказа
  • Условие: Изменение статуса заказа с = «Новый» на = «Предложить замену»
  • Действие: Поставить задачу

Заказ поступил

Описание триггера: При поступлении нового заказа клиенту отправляется sms/email уведомление с номером заказа

  • Событие: Изменение заказа
  • Условие: Новый заказ
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Доставка заказа на сегодня или на завтра

Описание триггера: Если заказ планируется доставить сегодня или завтра, отправляется sms/email уведомление клиенту

  • Событие: Изменение заказа
  • Условие: условие в конструкторе не настраивается, используйте представленный ниже код
  • Действие: Отправить письмо (заранее созданный шаблон письма) и Отправить SMS (заранее созданный шаблон SMS)

Код условия применения триггера, если доставка на сегодня:

changeSet.getNewValue("delivery_date").format('d.m.Y') == date('today').format('d.m.Y')

Если доставка на завтра:

order.getDeliveryDate().format('d.m') == date("now + 1 day").format('d.m'))

Полезные выражения для триггеров

Работа с пользовательскими полями

Обращение к элементу кастомного справочника

Код условия применения триггера:

changeSet.hasChangedField('custom_otv_logist') and changeSet.getNewValue('custom_otv_logist') != null and order.getCustomField('otv_logist').getCode() == 'olesja'

'olesja'- символьный код справочника

Проверка на наличие артикулов в пользовательском поле

Код условия применения триггера:

order.availableOrderProducts | reduce( (sum, x) => sum or (order.getCustomField("dsa") matches '/'~x.offer.article~'/'), false)

Округление значения до копеек (работает только, если тип поля «строка»)

Код действия триггера:

( 0 | ( (sum * 1.04) * 100))/100

Определение возраста клиента

Необходимо два триггера:

1) Код условия применения триггера:

(changeSet.isCreate() and customer.birthday != null) or (changeSet.isUpdate() and customer.birthday != null)
date("now").format("md") < customer.birthday.format("md")

Значение пользовательского поля с возрастом

Код действия триггера:

date("now").format("Y")-customer.birthday.format("Y")-1

2) Код условия применения триггера:

(changeSet.isCreate() and customer.birthday != null) or (changeSet.isUpdate() and customer.birthday != null)
date("now").format("md") >= customer.birthday.format("md")

Значение пользовательского поля с возрастом

Код действия триггера:

date("now").format("Y")-customer.birthday.format("Y")

Работа с датой и временем

Проверка на рабочее время

Код условия применения триггера:

(date('now') < date("today 19:00") and date('now') > date("today 02:00"))

Проверка по рабочим и выходным дням в триггерах

Код условия применения триггера:

(date('today').format('w') in ['1','2','3','4','5'] and
(date('now').format('H') < 21 or date('now').format('H') > 10 )) or 
(date('today').format('w') in ['0','6'] and
(date('now').format('H') < 20 or date('now').format('H') > 12 ))

Сравнивание времени доставки с настоящим временем

Код условия применения триггера:

order.getDeliveryTime().getTo().format("H") == date("now - 4 hours").format("H")

Вывод разницы по временной зоне клиента

Код действия триггера:

((date(local_time(order.getPhone())).format("U")-date("now - 3hours").format("U"))/60)/60

Добавление дней к полю с типом дата

Код действия триггера:

date(order.deliveryDate.format('Y-m-d H:i:s') ~ '+10 days')

Получение часового пояса из номера телефона (клиента или заказа) в формате +0300

Код действия триггера:

date(local_time(order.customer.phone)).format('O')

Применение фильтра по дню недели, например, для отслеживания

Код условия применения триггера:

order.createdAt().format('w') in [0,6]  - заказ создан в субботу или в воскресенье

Работа с номером телефона

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

Код действия триггера:

'/((8|\\+7)[\\- ]?)?(\\(?\\[495|094|499]{3}\\)?[\\- ]?)?[\\d\\- ]{7,10}/'

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

Код действия триггера:

'/^(8|\\+7)[ \\-\\(\\)]+9[\\d \\-\\(\\)]+$/'

Проверка, что введен формат телефона +7 (ХХХ) ХХХ-ХХ-ХХ с использованием регулярных выражений

Код действия триггера:

not (order.getAnyPhone() matches '/\\+7\\s\\([0-9]{3}\\)\\s[0-9]{3}-[0-9]{2}-[0-9]{2}/')

Работа с составом заказа, складами, товарами

Суммирование в триггере значений из состава заказа

Код действия триггера:

order.availableOrderProducts | reduce( (sum, x) => sum + x.offer.properties.amount * x.quantity )  #Версия с учётом количества в каждой позиции.

Вывод наибольшего значения доп.свойства «вес»

Код действия триггера:

products | map ( x => x.weight ) | reduce ( (rez, x) => x > rez ? x : rez)

Проверка, что все товары в заказе забронированы

Код условия применения триггера:

not order.availableOrderProducts | every (item => item.packs | contains (p => p))

Обращение к добавленному вручную доп.свойству товара с помощью pipe фильтров

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

Код условия применения триггера:

order.orderProducts | map( x => x.properties ) | contains(item => item.bonus_spend_per_one.value matches "/-/" )

order.orderProducts | contains(item => item.properties | contains (item => item.code == 'символьный_код_свойства' and item.value == 'значение_свойства'))

Запрет на добавление товара в заказ с количеством больше, чем есть свободных остатков

Код действия триггера:

changeSet | contains (c => c.fieldName matches '#order_product#' and (c.newValue.offer.product.quantity < c.newValue.quantity))

Запрет на изменение количества имеющегося товара в заказе больше, чем есть свободных остатков

Код действия триггера:

changeSet | contains (c => c.fieldName matches '#order_product#' and (c.orderProduct.offer.quantity < c.orderProduct.quantity))

Запрет на установку рублевой скидки более 5% на 1 позицию

Код действия триггера:

changeSet | contains (c => c.fieldName == 'order_product.discount_manual_amount' and c.orderProduct.discountManualAmount > (c.orderProduct.price*0.05))

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

Условие применения триггера:

order_contains(order, entities_by_ids("ProductGroup", [214])

Email и sms

Условие позволяет триггеру запуститься, если хотя бы одно письмо, отправленное с помощью родительского триггера, было открыто

Код условия применения триггера:

parent.actions | contains( action => action.letters | contains (letter => letter.isOpened))

Если требуется проверка, что письмо не было открыто

Код условия применения триггера:

parent.actions | contains( action => action.letters | contains (letter => not letter.isOpened))

Если требуется проверка, что SMS было доставлено

Код условия применения триггера:

parent.actions | contains (action => action.sms.isDelivered)

Работа с оплатами

Изменение статуса оплаты у определенного платежа

Код условия применения триггера:

changeSet | contains(item => item.fieldName == "payments.status" and item.newValue.code == "paid") and
order.payments | contains(payment => payment.type.code == "bank-card" and payment.status.code == "paid")

Запрет на удаление конкретной оплаты

Код условия применения триггера:

(changeSet.getOldValue("payments") and changeSet|contains(item => item.fieldName == "payments" and item.oldValue.type.code != "bank-card"))

Запрет на изменение суммы платежа, если есть оплаченный платеж

Код условия применения триггера:

order.payments | contains(i => i.status.code == "paid") and changeSet | contains(item => item.fieldName == "payments.amount" and item.newValue)

Обращение к изменению конкретного платежа

Условие проверяет, что у оплаты в заказе с типом cash установлен оплаченный статус paid.

Код условия применения триггера:

changeSet | contains ( item => item.fieldName matches '#payment\.#' and item.payment.type.code == 'cash' and item.payment.status.code == "paid")

Вывод суммы конкретного платежа

Код действия триггера:

order.payments | filter(item => item.type.code == "bank-card") | reduce( (sum, x) => x.amount )

Проверка на удаление одного типа оплаты и добавления взамен другого типа

Код условия применения триггера:

changeSet | contains(item => item.fieldName == "payments" and item.oldValue.type.code == "cash" and item.newValue == null) and changeSet | contains(item => item.fieldName == "payments" and item.oldValue == null and item.newValue.type.code == "credit")

Запрет на удаление платежа со статусом «Оплачено»

Код условия применения триггера:

changeSet | contains(item => item.fieldName == "payments" and item.oldValue and item.oldValue.status.code == "paid" and item.newValue == null)

Запрет на изменение суммы платежа

Код условия применения триггера:

changeSet | contains(paym => paym.fieldName == "payments.amount" and paym.newValue != paym.oldValue and paym.oldValue != 0 and paym.type and paym.type.code in ["cash"])

Добавление платежа с указанным статусом

Код действия триггера:

changeSet | contains(item => item.fieldName == "payments" and item.oldValue == null and item.newValue.type.code == "cash" and item.newValue.status.code == "paid")

Проверка на добавление второго платежа с таким же типом

Условие проверяет, что добавили оплаты в заказ, и что среди добавленных оплат есть не менее 2-х оплат с типом cash

Код условия применения триггера:

((order.payments | filter(item => item.type.code == "cash")) | length) >= 2 and changeSet | contains(item => item.fieldName == "payments" and item.oldValue == null and item.newValue.type.code == "cash")

Проверка на добавление второго платежа с таким же типом

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

Код условия применения триггера:

order.payments | group ( p => p.type.code ) | contains ( pp => (pp | length) > 1)

Запрет на внесение изменений в платежи после полной оплаты

К данному триггеру дополнительно необходимы два триггера на постановку/снятие галочки в поле при изменении даты полной оплаты.

Код условия применения триггера:

(((changeSet.hasChangedField("payments") and changeSet.getOldValue("payments")) or (changeSet.hasChangedField("payments") and changeSet.getNewValue("payments"))) or (changeSet | contains ( item => item.fieldName matches '#payment\.#' or item.fieldName matches "/payments/"))) and order.customField('поле-с-галкой') == true

Прочее

Действие добавление/удаление тега

Уникальные значения объектов, например, тег, необходимо заключить в двойные или одинарные кавычки:

"Название тега"

Проверка, что клиент создан из чата

Код условия применения триггера:

changeSet.isCreate() and customer.getMgCustomers() | contains(item => item.dialogs | contains(item => item.createdAt != null))

Использование тернарных операторов

В зависимости от перечисленных условий (a, b или c) в заданное поле будет записываться нужное значение (1, 2 или 3)

Код действия триггера:

order.firstName == 'a' ? '1' : order.firstName == 'b' ? '2' : order.firstName == 'c' ? '3'

Простановка нечетных заказов на менеджера

Код действия триггера:

order.getId()%2 != 0

Условие несовпадения значения поля с указанными

Код условия применения триггера:

not (order.getCustomerComment() matches "/(C11)|(drop1)|(MPB)|(PN)|(OPN)/")

Добавление нескольких условий в одном триггере

Код условия применения триггера:

{

    "символьный код типа доставки": "символьный код соответствия другого нужного поля",
    "символьный код типа доставки": "символьный код соответствия другого нужного поля"
}[order.getDeliveryType().getCode()]

Динамическое значение поля в зависимости от условия

Код действия триггера:

(order.payments | contains (p => p.type.code == "sber-online") ? (order.getPrepaySum()*0.05) :
(order.payments | contains (p => p.type.code == "installments") ? (order.getPrepaySum()*0.025) :
(order.payments | contains (p => p.type.code == "robokassa") ? (order.getPrepaySum()*0.05) :
(order.payments | contains (p => p.type.code == "terminal") ? (order.getPrepaySum()*0.025)))))

Проверка в триггере, что клиент создан меньше месяца назад

Код условия применения триггера:

order.getCustomer().getCreatedAt() > date("30 days ago")`

Проверка на онлайн-статус ответственного менеджера

Код условия применения триггера:

user_online_status(order.getManager()) == true
Благодарим за отзыв.
Была ли статья полезна?
Нет
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Да
Предыдущая статья
Общая информация о триггерах
Триггеры — это событийное средство автоматизации процессов. Триггер срабатывает в момент совершения события, проверяет условия и выполняет действия, если условия выполняются.
Следующая статья
Особенности и распространенные ошибки при работе с триггерами
Особенности и распространенные ошибки при работе с триггерами.