Ejemplos de triggers
Copiar enlace al artículo
Copiado

Contenido

  1. Ejemplos de triggers
  2. Expresiones útiles para triggers

En este artículo se muestran ejemplos de triggers que pueden crearse para automatizar distintos procesos, así como expresiones útiles para configurar sus condiciones y acciones. Los ajustes y fragmentos de código pueden copiarse y adaptarse a la configuración del sistema.

Para obtener información sobre la creación y el funcionamiento de los triggers, consulte los siguientes artículos:

Ejemplos de triggers

Crear un pedido tras una llamada perdida

Este trigger comprueba mediante el número entrante si el cliente ya tiene un pedido. Si la llamada no se ha vinculado a ningún pedido, crea uno nuevo.

  • Evento: llamada perdida.
  • Condición: nuevo pedido, «Sí».
  • Acción: crear un pedido.

Crear una tarea tras una llamada perdida cuando ya existe un pedido

Este trigger comprueba mediante el número entrante si el cliente ya tiene un pedido. Si existe, crea una tarea para el gestor.

  • Evento: llamada perdida.
  • Condición: nuevo pedido, «No».
  • Acción: crear una tarea y configurar su descripción.

Crear un cliente tras una llamada perdida

Este trigger comprueba si la llamada perdida pertenece a un cliente registrado. Si el cliente no existe, lo crea.

  • Evento: llamada perdida.
  • Condición: nuevo cliente, «Sí».
  • Acción: crear un cliente.

Crear un cliente tras una llamada atendida

Este trigger comprueba si una llamada entrante atendida pertenece a un cliente registrado. Si el cliente no existe, lo crea.

  • Evento: nueva llamada.
  • Condición: nuevo cliente, «Sí».
  • Acción: crear un cliente.

Acordar los detalles del pedido

Cuando un pedido cambia al estado «Disponibilidad confirmada», el trigger crea una tarea para el gestor. El estado de origen puede ser cualquiera.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Disponibilidad confirmada».
  • Acción: crear una tarea y configurar su descripción.

Notificar un pedido vencido en «Disponibilidad confirmada»

Este trigger notifica al gestor que un pedido con el estado «Disponibilidad confirmada» ha pasado a estar vencido.

  • Evento: cambio del pedido.
  • Condición: se configura mediante la expresión siguiente, no mediante el constructor.
  • Acción: enviar una notificación mediante una plantilla de notificación.

Código de la condición:

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

Iniciar la cadena de reserva automática

Cuando un pedido cambia al estado personalizado «Listo para esperar», este trigger inicia una cadena que comprueba la disponibilidad del producto al día siguiente y continúa con su reserva automática. Puede utilizarse otro estado personalizado equivalente.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Listo para esperar».
  • Acción: cambiar el dato «Nombre» del pedido. En la expresión de la acción se indica order.firstName para volver a asignar el nombre actual y generar el evento utilizado por el siguiente trigger.

Cambiar al estado que activa la reserva automática con un trigger diferido

Nota

Este trigger está vinculado directamente con el trigger anterior.

Este trigger continúa la cadena de reserva automática y cambia el pedido al estado que inicia la reserva automática de productos.

  • Evento: después de ejecutarse un trigger para el pedido.
  • Condición: en el campo «Después del trigger», seleccionar el trigger anterior; en «Después de», indicar 1 día.
  • Acción: cambiar el dato «Estado del pedido». En la expresión de la acción se indica el código simbólico del estado que activa la reserva automática.

Gestionar una devolución

Cuando un pedido cambia al estado «Devolución», el trigger informa al cliente de su cancelación.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Devolución».
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Enviar un enlace de pago

Este trigger envía al cliente un enlace para pagar el pedido.

¡Importante!

En lugar de codigo_tipo_pago, debe indicarse el código simbólico del tipo de pago de la integración.

  • Evento: cambio del pedido.
  • Condición: se configura mediante la expresión siguiente, no mediante el constructor.
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Código de la condición:

(changeSet.isCreate() and order.payments|contains(item => item.type.code == "codigo_tipo_pago")) or (changeSet | contains(item => item.fieldName == "payments" and item.oldValue == null and item.newValue.type.code == "codigo_tipo_pago"))

Procesar un pedido pagado

Cuando el estado del pago cambia a «Pagado», incluida una situación de pago parcial, el trigger cambia el estado del pedido a «Enviado a preparación» y crea una tarea.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pago desde cualquier estado a «Pagado».
  • Acciones: cambiar el dato «Estado del pedido», indicando "send-to-assembling" en la expresión, y crear una tarea.

Procesar un pedido preparado

Cuando el pedido cambia al estado «Preparado», el trigger lo transfiere al estado «Enviado a entrega».

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Preparado».
  • Acción: cambiar el dato «Estado del pedido» e indicar "send-to-delivery" en la expresión.

Gestionar una entrega reprogramada

Cuando el pedido cambia al estado personalizado «Entrega reprogramada», el trigger crea una tarea.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Entrega reprogramada».
  • Acción: crear una tarea.

Enviar el número de seguimiento

Cuando la entrega se gestiona mediante el módulo de una empresa de transporte, este trigger envía al cliente el número de seguimiento en cuanto se añade por primera vez al pedido.

  • Evento: cambio del pedido.
  • Condición: se configura mediante la expresión siguiente, no mediante el constructor.
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Código de la condición:

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

Notificar la llegada al punto de recogida

Cuando el pedido cambia al estado personalizado «Llegó al punto de recogida», el trigger informa al cliente.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Llegó al punto de recogida».
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Recordar la recogida después de cinco días

Nota

Este trigger está vinculado directamente con el trigger anterior.

Si el pedido continúa sin recogerse cinco días después de llegar al punto de recogida, este trigger envía un recordatorio al cliente.

  • Evento: después de ejecutarse un trigger para el pedido.
  • Condición: en «Después del trigger», seleccionar «Notificar la llegada al punto de recogida»; en «Después de», indicar 5 días. El estado del pedido debe ser distinto de «Completado».
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Crear una tarea si el pedido sigue sin recogerse

Nota

Este trigger está vinculado directamente con el trigger anterior.

Si el pedido sigue sin recogerse al sexto día, este trigger crea una tarea para que el gestor averigüe el motivo.

  • Evento: después de ejecutarse un trigger para el pedido.
  • Condición: en «Después del trigger», seleccionar «Recordar la recogida después de cinco días»; en «Después de», indicar 1 día. El estado del pedido debe ser distinto de «Completado».
  • Acción: crear una tarea.

Agradecer un pedido completado

Cuando el pedido cambia al estado «Completado», el trigger envía al cliente un mensaje de agradecimiento.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Completado».
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Solicitar una reseña

Nota

Este trigger está vinculado directamente con el trigger anterior.

Veinticuatro horas después de que el pedido cambie al estado «Completado», este trigger solicita al cliente que deje una reseña.

  • Evento: después de ejecutarse un trigger para el pedido.
  • Condición: en «Después del trigger», seleccionar «Agradecer un pedido completado»; en «Después de», indicar 1 día.
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Notificar que el pedido está listo para recogida en tienda

Cuando el pedido cambia al estado personalizado «Listo para recogida en tienda», el trigger envía al cliente la dirección de la tienda y el plazo de almacenamiento.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido desde cualquier estado a «Listo para recogida en tienda».
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Recordar la recogida en tienda después de dos días

Nota

Este trigger está vinculado directamente con el trigger anterior.

Si el pedido no se recoge en la tienda durante los dos días siguientes, este trigger informa al cliente de que el plazo de almacenamiento está a punto de finalizar.

  • Evento: después de ejecutarse un trigger para el pedido.
  • Condición: en «Después del trigger», seleccionar «Notificar que el pedido está listo para recogida en tienda»; en «Después de», indicar 2 días. El pedido debe conservar el estado «Listo para recogida en tienda».
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Notificar la asignación de un mensajero

Si la entrega la realiza un mensajero propio, este trigger envía al cliente información sobre el mensajero cuando se asigna al pedido.

  • Evento: cambio del pedido.
  • Condición: se configura mediante la expresión siguiente, no mediante el constructor.
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Código de la condición:

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

Repetir el proceso de reserva automática

Cuando el pedido cambia de «Pendiente de recepción» a «Proponer una sustitución», este trigger lo transfiere automáticamente a «Listo para esperar» para volver a ejecutar la reserva automática.

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido de «Pendiente de recepción» a «Proponer una sustitución».
  • Acción: cambiar el dato «Estado del pedido». En la expresión se indica el código simbólico del estado que activa la reserva automática de productos.

Proponer una sustitución

Si no hay existencias del producto y no se ejecuta la reserva automática, este trigger crea para el gestor una tarea denominada «Proponer una sustitución».

  • Evento: cambio del pedido.
  • Condición: cambio del estado del pedido de «Nuevo» a «Proponer una sustitución».
  • Acción: crear una tarea.

Notificar la recepción de un pedido

Cuando llega un pedido nuevo, este trigger envía al cliente su número por email y SMS.

  • Evento: cambio del pedido.
  • Condición: nuevo pedido.
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Notificar una entrega prevista para hoy o mañana

Si la entrega está prevista para hoy o mañana, este trigger envía una notificación al cliente.

  • Evento: cambio del pedido.
  • Condición: se configura mediante una de las expresiones siguientes, no mediante el constructor.
  • Acciones: enviar un email mediante una plantilla de email y un SMS mediante una plantilla de SMS creadas previamente.

Condición para una entrega prevista para hoy:

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

Condición para una entrega prevista para mañana:

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

Expresiones útiles para triggers

Las expresiones siguientes pueden utilizarse en las condiciones y acciones de los triggers. Los códigos simbólicos, identificadores de campos y valores de ejemplo deben sustituirse por los correspondientes a la configuración del sistema.

Trabajar con campos personalizados

Acceder a un elemento de un directorio personalizado

Código de la condición:

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

En este ejemplo, 'olesja' es el código simbólico del elemento del directorio.

Comprobar si un campo personalizado contiene artículos de productos

Código de la condición:

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

Redondear un valor a dos decimales

Código de la acción:

round(sum, 2)

Calcular la edad del cliente

Se necesitan dos triggers: uno para los clientes cuyo cumpleaños todavía no ha ocurrido durante el año actual y otro para los clientes cuyo cumpleaños ya ha ocurrido.

  1. Para un cumpleaños que todavía no ha ocurrido, utilice la siguiente condición:
(changeSet.isCreate() and customer.birthday != null) or (changeSet.isUpdate() and customer.birthday != null)
date("now").format("md") < customer.birthday.format("md")

Código de la acción que establece el valor del campo personalizado con la edad:

date("now").format("Y")-customer.birthday.format("Y")-1
  1. Para un cumpleaños que ya ha ocurrido, utilice la siguiente condición:
(changeSet.isCreate() and customer.birthday != null) or (changeSet.isUpdate() and customer.birthday != null)
date("now").format("md") >= customer.birthday.format("md")

Código de la acción que establece el valor del campo personalizado con la edad:

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

Trabajar con fechas y horas

Comprobar el horario laboral

Código de la condición:

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

Comprobar días laborables y fines de semana

Código de la condición:

(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 ))

Comparar la hora de entrega con la hora actual

Código de la condición:

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

Obtener la diferencia correspondiente a la zona horaria del cliente

Código de la acción:

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

Añadir días a un campo de tipo fecha

Código de la acción:

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

Obtener desde el teléfono la zona horaria del cliente o del pedido en formato +0300

Código de la acción:

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

Filtrar por el día de la semana

Por ejemplo, la condición siguiente comprueba que el pedido se creó un sábado o un domingo:

order.createdAt().format('w') in [0,6]

Trabajar con números de teléfono

Para utilizar las expresiones siguientes, consulte los operadores de expresiones regulares.

Comprobar si se ha introducido un teléfono fijo

Código de la acción:

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

Comprobar si se ha introducido un teléfono móvil

Código de la acción:

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

Comprobar si el teléfono no corresponde al formato +7 (XXX) XXX-XX-XX

Código de la acción:

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

Trabajar con el contenido del pedido, almacenes y productos

Sumar valores del contenido del pedido

La expresión tiene en cuenta la cantidad de unidades de cada posición.

Código de la acción:

order.availableOrderProducts | reduce( (sum, x) => sum + x.offer.properties.amount * x.quantity )

Obtener el mayor valor de la propiedad adicional «Peso»

Código de la acción:

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

Comprobar que todos los productos del pedido están reservados

Código de la condición:

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

Acceder mediante filtros pipe a una propiedad del producto añadida manualmente

El trigger comprueba que el pedido contiene productos con una propiedad y un valor determinados. La propiedad y su valor se indican mediante codigo_simbolico_propiedad y valor_propiedad.

Código de la condición:

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 == 'codigo_simbolico_propiedad' and item.value == 'valor_propiedad'))

Impedir que se añada un producto en una cantidad superior a las existencias disponibles

Código de la acción:

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

Impedir que la cantidad de un producto existente supere las existencias disponibles

Código de la acción:

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

Impedir un descuento manual de importe superior al 5 % en una posición

Código de la acción:

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

Comprobar si el pedido contiene un producto determinado

Código de la condición:

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

Email, SMS y mensajes en chats

Comprobar si se abrió al menos un email enviado por el trigger principal

Código de la condición:

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

Comprobar si no se abrió un email

Código de la condición:

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

Comprobar si se entregó un SMS

Código de la condición:

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

Comprobar si no se entregó un mensaje de chat

Código de la condición:

parent.actions | contains(action => action.mgMessages | contains(message => message.isFailed))

Trabajar con pagos

Comprobar el cambio de estado de un pago determinado

Código de la condición:

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")

Impedir que se elimine un pago concreto

Código de la condición:

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

Impedir que cambie el importe si existe un pago abonado

Código de la condición:

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

Comprobar el cambio de un pago concreto

Esta condición comprueba que el pedido contiene un pago de tipo cash con el estado paid.

Código de la condición:

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

Obtener el importe de un tipo de pago concreto

Código de la acción:

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

Comprobar la eliminación de un tipo de pago y la incorporación de otro

Código de la condición:

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")

Impedir que se elimine un pago con el estado «Pagado»

Código de la condición:

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

Impedir que cambie el importe de un pago

Código de la condición:

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"])

Comprobar que se ha añadido un pago con un estado determinado

Código de la acción:

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

Comprobar que se ha añadido un segundo pago de tipo cash

La condición comprueba que el pedido tiene al menos dos pagos de tipo cash y que acaba de añadirse uno de ellos.

Código de la condición:

((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")

Comprobar que se ha añadido un segundo pago del mismo tipo

Esta condición no está vinculada a un tipo concreto. El trigger se ejecuta si el pedido ya tenía un pago y se añade otro del mismo tipo.

Código de la condición:

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

Impedir cambios en los pagos después del pago completo

Además de este trigger, se necesitan dos triggers que activen y desactiven una casilla del campo cuando cambie la fecha del pago completo.

Código de la condición:

(((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('campo_con_casilla') == true

Otras expresiones

Añadir o eliminar una etiqueta

Los valores únicos de objetos, como una etiqueta, deben escribirse entre comillas dobles o simples:

"Nombre de la etiqueta"

Comprobar que el cliente se creó desde un chat

Código de la condición:

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

Utilizar operadores ternarios

Según se cumpla la condición a, b o c, la expresión escribe el valor 1, 2 o 3 en el campo correspondiente.

Código de la acción:

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

Asignar pedidos impares a un gestor

Código de la acción:

order.getId()%2 != 0

Comprobar que el valor de un campo no coincide con los valores indicados

Código de la condición:

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

Añadir varias correspondencias en un trigger

Código de la condición:

{
    "codigo_tipo_entrega_1": "valor_correspondiente_1",
    "codigo_tipo_entrega_2": "valor_correspondiente_2"
}[order.getDeliveryType().getCode()]

Calcular dinámicamente el valor de un campo

Código de la acción:

(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)))))

Comprobar que el cliente se creó hace menos de un mes

Código de la condición:

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

Comprobar el estado online del gestor responsable

Código de la condición:

user_online_status(order.getManager()) == true
Gracias por tus comentarios.
¿Te resultó útil este artículo
No
  • Рекомендации не помогли
  • Нет ответа на мой вопрос
  • Текст трудно понять
  • Не нравится описанный функционал
Si
Artículo anterior
Tabla de compatibilidad de eventos y acciones de disparos(triggers)
Los triggers imponen algunas restricciones sobre las acciones que se pueden realizar para determinados eventos. El artículo contiene una tabla de compatibilidad de eventos y acciones realizadas.