Comenzando con el Salesbot

Para comenzar, necesitas conectar la integración con los chats en la columna izquierda del Pipeline digital. Encontrarás instrucciones para cada mensajero en la ventana de configuración. Después de conectar la integración de chat, podrás activar el Salesbot para gestionar los nuevos chats entrantes, así como configurar bots para etapas específicas.

Configurar el Salesbot

Puedes conectar el Salesbot de dos maneras::

  1. Dirígete a la sección Leads ➡️ Automatiza ➡️ selecciona una etapa ➡️ Agregar disparador ➡️ elige Salesbot.

Luego, selecciona Crear un nuevo bot. Cuando se abre la ventana modal, puedes elegir una plantilla estándar o crear un bot nuevo.

  1. Ve a la seccion Ajustes ➡️ pestaña Herramientas de comunicacion ➡️ Salesbots ➡️ Crear o importar un nuevo bot.

Al abrir la ventana modal con los pasos de Salesbot, puedes hacer clic en Ver fuente para ver el código del bot.

Los leads que ingresaron a la etapa antes de que la acción apareciera en el Pipeline digital serán ignorados, a menos que marques la opción Aplicar a todos los leads en esta etapa.

Idioma del Salesbot

El Salesbot utiliza un objeto JSON estructurado con claves específicas. El ejemplo a continuación hará la pregunta, "Por favor, ingresa tu número de teléfono y correo electrónico" y configurará la etiqueta "salesbot". Luego de que el usuario responda, se validarán los datos y se responderá con uno de los mensajes especificados. Para más detalles sobre los presets, por favor dirígete a la siguiente sección.

[
    {
        "question": [
            {
                "handler": "show",
                "params": {
                    "type": "text",
                    "value": "Por favor, ingresa tu número de teléfono y correo electrónico"
                }
            },
            {
                "handler": "action",
                "params": {
                    "name": "set_tag",
                    "params": {
                        "type": 2,
                        "value": "salesbot"
                    }
                }
            }
        ],
        "answer": [
            {
                "handler": "preset",
                "params": {
                    "name": "contacts.validate_base_info",
                    "params": {
                        "empty_email": "Por favor, ingresa tu correo electrónico",
                        "empty_phone": "Por favor, ingresa tu numero de teléfono",
                        "invalid_phone": "Parece que el número de teléfono puede ser incorrecto",
                        "success": "Gracias",
                        "empty_all": "Por favor, ingresa tu número de teléfono y correo electrónico"
                    }
                }
            }
        ]
    }
]

El objeto debe contener las claves "question", "answer", o "finish".

  • Los datos en el objeto "question" manejan las acciones que ocurrirán cuando se envíe un mensaje al usuario.
  • Los datos en el objeto "answer" gestionan las acciones que se llevarán a cabo cuando el usuario responda.
  • Los datos en el objeto "finish" definen las acciones que ocurrirán cuando el bot haya terminado.

📘

Pueden existir múltiples claves. Sin embargo, hay una limitación en el tamaño del JSON, que no puede exceder los 64KB.

En los objetos "question", "answer", y "finish", deberían haber handlers.

Antes de agregar el objeto JSON al bot, asegúrate de validarlo.

Manejador de errores de Salesbot

Si un mensaje del bot no puede ser entregado al cliente, por ejemplo, cuando el cliente ha bloqueado los mensajes de ese chat, el bot puede manejar el error y ejecutar manejadores específicos.

Ejemplo:

{
     "0":{
        "question":[
           ...
        ],
        "answer":[
           ...
        ]
     },
     "error":[
        {
           "handler":"action",
           "params":{
              "name":"change_status",
              "params":{
                 "value":142
              }
           }
        }
     ]
  }

Manejadores de Salesbot

CódigoDescripción
showEnvía un mensaje con texto
buttonsProcesamiento de la respuesta recibida desde los botones de los mensajeros instantáneos
actionAcción
metaProcesamiento de metadatos
conditionCondición
validationsValidación
presetProcesa datos para un algoritmo específico
gotoTransición del script a un paso determinado
wait_answerEspera la respuesta
findBúsqueda
filterFiltración
send_internalEnvía un mensaje interno
stopDetiene el bot

show

🚧

Este manejador acepta leads entrantes si está configurado en el Salesbot.

El manejador "show" envía un mensaje o botones al chat del cliente. Cualquier texto enviado actualmente soporta los siguientes placeholders:

PlaceholderDescripción
{{contact.name}}, {{name}}Nombre de contacto
{{lead.id}}ID del lead
{{contact.id}}ID de contacto
{{origin}}Fuente del lead (Telegram,Viber, Facebook)
{{lead.source_id}}ID de fuente del lead
{{message_text}}Mensaje recibido del cliente en el bloque lógico de la respuesta
{{lead.cf.#custom_field_id#}},
{{contact.cf.#custom_field_id#}}, {{company.cf.#custom_field_id#}}
El valor del campo personalizado de un lead/contacto/compañía. Reemplaza #custom_field_id# con el ID del campo adicional.
{{rand}}Cadena aleatoria
{{short_rand}}Cadena corta aleatoria
{{short_rand_num}}Número aleatorio de 1111 a 9999
{{message_text.email}}Correo electrónico (si está presente en el mensaje del cliente)
{{message_text.phone}}Número de teléfono (si está presente en el mensaje del cliente)
{{regexp./([1-9]+) things /}}El valor por expresión regular de la respuesta del usuario. El valor dentro del paréntesis será sustituido. Puede ser utilizado en el bloque de respuesta.
{{lead.price}}Valor de venta del lead
{{current_date}}Fecha actual
{{lead.status_id}}ID de la etapa del lead
{{cf.talk.nps}}Evaluación de la conversación
{{lead.responsible.id}}, {{contact.responsible.id}}, {{company.responsible.id}}ID del usuario responsable del lead/contacto/compañía
{{lead.responsible.name}}, {{contact.responsible.name}}, {{company.responsible.name}}Nombre del usuario responsable del lead/contacto/compañía
{{lead.responsible.email}}, {{contact.responsible.email}}, {{company.responsible.email}}Correo electrónico del usuario responsable del lead/contacto/compañía

Para los placeholders de contacto, se utiliza el contacto principal del lead o el contacto del chat en el que se está llevando a cabo la conversación con el cliente.

text

Parámetros del manejador para enviar texto.

{
  "handler": "show",
  "params": {
    "type": "text",
    "value": "Por favor, ingresa tu número de teléfono y tu correo electrónico.",
    "quick_replies": [
      "user_phone_number",
      "user_email"
    ]
  }
}
ParámetroTipo de datoDescripción
typestringDebe ser "text"
valuestringTexto a enviar al usuario
quick_repliesarrayUn arreglo de elementos (actualmente disponibles: "user_phone_number" y "user_email") envía botones de respuesta rápida. Esta funcionalidad está disponible solo para Facebook y muestra botones que contienen la información de la cuenta de Facebook del usuario (número de teléfono, correo electrónico).

buttons

Parámetros del manejador para enviar botones.

{
  "handler": "show",
  "params": {
    "type": "buttons",
    "value": "Por favor elige el tipo de participación:",
    "buttons": [
      "Presencia personal",
      "En línea"
    ]
  }
}
ParámetroTipo de datoDescripción
typestringDebe ser "buttons".
valuestringTexto que se enviará al usuario (En Messenger, los textos de más de 80 caracteres se recortarán).
buttonsarrayUn arreglo cuyos elementos son los textos de los botones que serán enviados.
accept_unsortedboolSe configura en falso si no necesitas analizar los leads entrantes en la primera respuesta.

buttons_url

Parámetros del manejador para enviar botones con enlaces a recursos externos.

{
    "handler": "show",
    "params": {
        "type": "buttons_url",
        "value": "Enlaces a recursos externos",
        "buttons": [
            {
                "text": "Bing",
                "url": "https://www.bing.com"
            },
            {
                "text": "Google",
                "url": "https://google.com"
            }
        ]
    }
}
ParámetroTipo de datoDescripción
typestringDebe ser "buttons_url". Envía botones con enlaces.
valuestringTexto que se enviará al usuario. (en Messenger, los textos más largos de 80 caracteres serán recortados).
buttonsarrayUn arreglo cuyos elementos son el texto de los botones que serán enviados.

Si quieres enviar enlaces a redes sociales y habilitar el autoenlace, los enlaces deben tener el siguiente formato:

Redes socialesEnlaceComentarios
Facebook Messengerhttps://m.me/123/?ref=VisitorUid_{{visitor_uid}}En el cual '123' es el ID del grupo
WhatsApphttps://wa.me/7895?text=ID:%20{{session_id}}En el cual '7895' es el número de teléfono de WhatsApp vinculado a la cuenta
Viberviber://pa?chatURI=bot&context=VisitorUid_{{visitor_uid}}En el cual 'bot' es el nombre de la cuenta pública
Telegramtg://resolve?domain=bot&start=VisitorUid_{{visitor_uid}}En el cual 'bot' es el nombre del bot

buttons

El manejador de botones está diseñado para insertarse en el bloque de lógica de respuestas y permite procesar las respuestas de los botones enviados o las respuestas de coincidencia exacta.

{
  "handler": "buttons",
  "params": [
    {
      "value": "Presencia personal",
      "params": [
        {
          "handler": "...",
          "params": {...}
        }
      ]
    },
    {
      "value": "En línea",
      "params": [
        {
          "handler": "...",
          "params": {...}
        }
      ]
    }
  ]
}

El manejador "buttons" espera un arreglo de objetos para ingresar en los parámetros, en el cual se puede llamar a cualquiera de los manejadores especificados en esta página.

goto

El manejador goto te permite saltar a un paso específico en el flujo, por ejemplo, si necesitas realizar ciertas acciones de manera repetida.

📘

El contador de pasos comienza desde 0.

{
    "handler": "goto",
    "params": {
        "type": "question",
        "step": 3
    }
}
ParámetroTipo de datoDescripción
typestringEl bloque al que se realizará el salto. Los valores posibles son:"question", "answer" y "finish".
stepintEl paso del bot al que se realizará el salto

wait_answer

Se utiliza para esperar una respuesta del usuario a una pregunta determinada. Permite hacer una pregunta al usuario y esperar su respuesta antes de continuar con las acciones siguientes.

{
  "handler": "wait_answer",
  "params": {
    "type": "question",
    "step": 2
  }
}
ParámetroTipo de datoDescripción
typestringEl bloque al que se realizará el salto. Los valores posibles son:"question" y "answer".
stepintEl paso del bot al que se realizará el salto

find

El manejador "find" permite ubicar una entidad y utilizar sus datos. Si se encuentra un elemento, puedes utilizar los siguientes placeholders:

  • {{founded_id}} – si se encuentra un elemento de la lista.
  • {{contact_double.*}} – si se encuentra un duplicado de contacto, lo que permite acceder a sus campos de manera similar a los placeholders de {{contact.*}}.
{
  "handler": "find",
  "params": {
    "type": "contact_double",
    "params":{
      "type": "name",
      "actions": [
        {
          "handler": "show",
          "params": {
            "type": "buttons",
            "value": "¿Es tu número {{contact_double.cf.3574}}?",
            "buttons": [
              "Si",
              "No"
            ]
          }
        }
      ]
    }
  }
}
{
  "handler": "find",
  "params": {
  "type": "catalog_elements",
    "params": {
      "value": "Salesbot",
      "catalog_id": "15123",
      "actions": [
        {
          "handler": "show",
          "params": {
            "type": "buttons",
            "value": "Se encontró un elemento con ID - {{founded_id}}",
            "buttons": [
                "Si",
                "No"
            ]
          }
        }
      ]
    }
  }
}
ParámetroTipo de datoDescripción
typestringcontact_double – buscar un duplicado del contacto actual,
catalog_elements – buscar un elemento de lista.
params[type]stringtype – puede ser "name" (búsqueda disponible por nombre; no es requerido para buscar por catálogo.)
params[actions]arrayAcciones que se realizarán si se encuentra una entidad
valuestringLa palabra que se busca, se pueden utilizar los placeholders del bloque "show". Para el tipo catalog_elements – el nombre del elemento del catálogo.
catalog_idintID de la lista donde estás buscando un elemento

filter

El manejador "filter" te permite encontrar una entidad y utilizar sus datos. Si se encuentra un elemento, puedes usar los placeholders para los campos personalizados external_lead y external_contact.

{
   "handler": "filter",
   "params": {
     "type": 2,
     "value": "{{lead.cf.111}}",
     "custom_fields_id": 222,
     "actions": [
       {
         "handler": "action",
         "params": {
           "name": "set_custom_fields",
           "params": {
             "type": 1,
             "value": "{{external_contact.cf.333}}",
             "custom_fields_id": 444,
             "enum": "WORK"
           }
         }
       }
     ]
   }
 }
ParámetroTipo de datoDescripción
typeintEl tipo de entidad para la cual se realiza el filtrado: 1 – contacto, 2 – lead.
valuestringLa palabra por la cual filtramos puede incluir placeholders del bloque"show".
custom_fields_idintEl ID del campo personalizado en el cual se aplicará el filtro.

action

El manejador "action" te permite realizar una de las acciones posibles:

AcciónDescripción
unsortedAcciones con los Leads Entrantes
change_statusCambiar de etapa
set_tagEstablecer la etiqueta
unset_tagEliminar la etiqueta
set_custom_fieldsEstablecer los valores de los campos del lead/contacto
subscribeSuscripción del usuario al chat en la entidad
unsubscribeDesuscripción del usuario del chat en la entidad
add_lead_contactAñadir un lead y un contacto que están vinculados entre sí
set_budgetEstablecer el presupuesto del lead (venta)
add_linked_companyAñadir compañía
add_noteAñadir una nota
linkEnlazar elementos
change_responsible_userCambiar de la persona responsable
link_to_unsortedCrear un contacto a partir del lead entrante y asociarlo con el lead

unsorted

La acción "unsorted" permite aceptar o rechazar un lead entrante.

{
  "handler": "action",
  "params": {
    "name": "unsorted",
    "params": {
      "value": "accept"
    }
  }
},
{
  "handler": "action",
  "params": {
    "name": "unsorted",
    "params": {
      "value": "decline"
    }
  }
}
ParámetroTipo de datoDescripción
valuestring"accept" / "decline" para aceptar / rechazar el lead entrante.

change_status

La acción "change_status" permite cambiar la etapa del lead.

{
  "handler": "action",
  "params": {
    "name": "change_status",
    "params": {
      "value": 142
    }
  }
}
ParámetroTipo de datoDescripción
valueintID de la etapa a la que se transferirá el lead
entityint or stringUn parámetro opcional que puede ser "double". Si el manejador "find" fue utilizado previamente, la etapa se actualizará para el lead del contacto encontrado, si existe.

set_tag

La acción "set_tag" asignará una etiqueta al lead o contacto y admite el placeholder {{origin}}, que especificará el origen del lead.

{
  "handler": "action",
  "params": {
    "name": "set_tag",
    "params": {
      "type": 2,
      "value": "Salesbot"
    }
  }
},
{
  "handler": "action",
  "params": {
    "name": "set_tag",
    "params": {
      "type": 2,
      "value": "{{origin}}"
    }
  }
}
ParámetroTipo de datoDescripción
typeintEl tipo de entidad a etiquetar (1-contacto, 2-lead)
valuestringNombre de la etiqueta

unset_tag

La acción "unset_tag" elimina la etiqueta de un lead o contacto.

{
  "handler": "action",
  "params": {
    "name": "unset_tag",
    "params": {
      "type": 2,
      "value": "Salesbot"
    }
  }
}
ParámetroTipo de datoDescripción
typeintEl tipo de entidad de donde se eliminará la etiqueta (1-contacto, 2-leads).
valuestringNombre de la etiqueta que se eliminará

set_custom_fields

La acción "set_custom_fields" establecerá los valores de los campos personalizados para un lead o contacto. Puedes encontrar los IDs de los campos en la sección de Configuración de un lead/contacto o utilizando el método para obtener la lista de los campos de entidad.. Puedes utilizar los placeholders descritos en la sección "show" como valores para los campos.

{
  "handler": "action",
  "params": {
    "name": "set_custom_fields",
    "params": {
      "type": 2,
      "value": "Value of the field",
      "custom_fields_id": 123,
      "option": "add"
    }
  }
},
{
  "handler": "action",
  "params": {
    "name": "set_custom_fields",
    "params": {
      "type": 2,
      "value": "{{message_text}}",
      "custom_fields_id": 987
    }
  }
},
{
  "handler": "action",
  "params": {
    "name": "set_custom_fields",
    "params": {
      "type": "lead",
      "value": "{{last_validation_result}}",
      "custom_field": "{{cf.talk.nps}}"
    }
  }
}
ParámetroTipo de datoDescripción
typeintEl tipo de entidad para la cual se establecerán los campos personalizados (1-contacto, 2-lead).
valuestringEl valor del campo que se establecerá puede utilizar placeholders del bloque "show" . Luego del manejador "validations", está permitido utilizar placeholder {{last_validation_result}}, que utilizará los datos reconocidos de la última condición true. Port ejemplo, si se utilizó la condición"contains email", el correo electrónico encontrado será sustituido como el valor.
custom_fields_idintEl ID del campo en el que se establecerá el valor.
custom_fieldstringEl identificador del campo que se está modificando puede incluir lo siguiente:
{{lead.price}} – la venta del lead.
{{lead.name}} – el nombre del lead.
{{contact.name}} – el nombre del contacto.
{{cf.talk.nps}} – la calificación de la conversación actual.
calculatedboolSi es necesario intentar calcular el valor de este campo personalizado utilizando la fórmula, por ejemplo{{lead.cf.123}} * {{lead.cf.456}}.
optionstringUtiliza la opción “add” para añadir un valor a un campo de tu elección. Tipos de campo disponibles: phone number, email, multiselect list.

subscribe

La acción "subscribe" suscribirá a un usuario/grupo de usuarios al chat.

{
  "handler": "action",
  "params": {
    "name": "subscribe",
    "params": {
      "type": "group",
      "value": 111
    }
  }
},
{
  "handler": "action",
  "params": {
    "name": "subscribe",
    "params": {
      "type": "user",
      "value": "{{lead.responsible_user_id}}"
    }
  }
}
ParámetroTipo de datoDescripción
typestring"group" o "user"
valueintEl ID del grupo de usuarios o el ID del usuario

unsubscribe

La acción "unsubscribe" dará de baja a un usuario/grupo de usuarios del chat.

{
  "handler": "action",
  "params": {
    "name": "unsubscribe",
    "params": {
      "type": "user",
      "value": "{{lead.responsible_user_id}}"
    }
  }
}
ParámetroTipo de datoDescripción
typestring"group" ,"user" o "all"
valueintEl ID del grupo de usuarios o el ID del usuario. Es opcional si has pasado"all" como "type".

add_lead_contact

La acción "add_lead_contact" Creará un lead y un contacto, y los vinculará. Todos los campos del lead y del contacto pueden ser configurados. Los valores de los campos personalizados admiten los mismos placeholders que en el manejador "show". La acción "preset" también se admite, lo que permite que el contacto y el lead se creen solo si se recibe un mensaje o un número de teléfono del cliente.

{
  "handler": "action",
  "params": {
      "name": "add_lead_contact",
      "params": {
          "preset": "contacts.require_email_or_phone",
          "lead": {
              "name": "Nombre del lead",
              "status_id": 142,
              "responsible_user_id": 123,
              "price": 2000,
              "tags": "",
              "custom_fields": [
                  {
                      "id": 77744111,
                      "values": [
                          {
                              "value": "{{contact.name}}"
                          }
                      ]
                  },
                  {
                      "id": 77744222,
                      "values": [
                          {
                              "value": "{{lead.cf.77744222}}"
                          }
                      ]
                  }
              ]
          },
          "contact": {
              "name": "Nombre del contacto",
              "responsible_user_id": 123,
              "tags": "",
              "custom_fields": [
                  {
                      "id": 77744444,
                      "values": [
                          {
                              "value": "{{message_text.email}}",
                              "enum": "WORK"
                          }
                      ]
                  },
                  {
                      "id": 77744555,
                      "values": [
                          {
                              "value": "{{message_text.phone}}",
                              "enum": "WORK"
                          }
                      ]
                  }
              ]
          }
      }
  }
}
ParámetroTipo de datoDescripción
leadobjectConjunto de campos del lead
contactobjectConjunto de campos de contacto
presetstringParámetro opcional. Se admite un ajuste preestablecido
contacts.require_email_or_phone , que verifica si se envió el teléfono o el correo electrónico en un mensaje del cliente.

set_budget

La acción "set_budget" establecerá la venta para el lead.

{
  "handler": "action",
  "params": {
    "name": "set_budget",
    "params": {
      "value": "{{lead.cf.555123}}*{{lead.cf.555321}}"
    }
  }
}
ParámetroTipo de datoDescripción
valuestringEl número que se registrará en la venta del lead. Este campo también puede ser calculado, permitiendo que se utilicen los placeholders del bloque "show" en el cálculo. Las operaciones disponibles incluyen +, -, _ y /. También puedes utilizar paréntesis, por ejemplo: ({{lead.cf.555123}} + 1){{lead.cf.555321}}.

add_linked_company

La acción "add_linked_company" añade una compañía vinculada a un lead y a un contacto.

{
  "handler": "action",
  "params": {
    "name": "add_linked_company",
    "params": {
      "name": "{{message_text}}"
    }
  }
}
ParámetroTipo de datoDescripción
namestringNombre de la compañía, se pueden usar los placeholders del bloque"show" .

add_note

La acción add_note añade una nota.

{
  "handler": "action",
  "params": {
    "name": "add_note",
    "params": {
      "element_type": 1,
      "note_type": 4,
      "text": "Texto de la nota"
    }
  }
}
ParámetroTipo de datoDescripción
element_typeintLa entidad a la que se adjuntará la nota: 1 – contacto, 2 – lead
note_typeintTipo de nota:
4 – Nota regular.
10 – Nota de llamada entrante.
11 – Nota de llamada saliente.
102 – Nota de mensaje de texto entrante.
103 – Nota de mensaje SMS saliente.
25 – Nota de servicio.
textstringTexto de la nota, se pueden utilizar los placeholders del bloque"show" .

link

La acción "link" vincula elementos.

{
  "handler": "action",
  "params": {
    "name": "link",
    "params": {
      "from": 2,
      "to": 11,
      "to_id": "{{founded_id}}",
      "to_catalog_id": 123
    }
  }
}
ParámetroTipo de datoDescripción
fromintLa entidad a la que se vinculará la segunda entidad ( 1 – contacto, 2 – lead).
from_idintParámetro opcional. El ID de la entidad a la que se vinculará la segunda entidad. Si no se especifica, se utilizará el ID de la entidad actual. También se pueden usar placeholders de la sección"show".
tointLa entidad que se vinculará: 1 – contacto, 2 – lead, 3 – compañía, 11 – elemento de lista.
to_idstringID del elemento que se vinculará, puedes utilizar los marcadores de posición de la sección `"show" .
to_catalog_idintParámetro opcional, ID de lista (si el elemento de la lista está vinculado).
quantityintUn parámetro opcional, el número de elementos de la lista que se adjuntarán a la entidad. Se pueden usar los placeholders de la sección "show".

change_responsible_user

La acción change_responsible_user cambia el usuario responsable de un lead o del contacto asociado.

{
  "handler": "action",
  "params": {
    "name": "change_responsible_user",
    "params": {
      "value": 123,
      "type": 2
    }
  }
}
ParámetroTipo de datoDescripción
valueintID del usuario que deseas asignar como responsable
typeintParámetro opcional, el tipo de entidad para la cual se está cambiando el usuario responsable: 1 – contacto, 2 – lead. Si no se proporciona, por defecto es 2.

link_to_unsorted

La acción "link_to_unsorted" vincula un chat de los leads entrantes con el contacto especificado en un lead. Si el contacto especificado no existe en el lead, la vinculación no se realizará. Si no se proporciona el contact_id se creará un contacto en el lead especificado.

{
  "handler": "action",
  "params": {
    "name": "link_to_unsorted",
    "params": {
      "entity_type": 2,
      "entity_id": "12345"
    }
  }
}
ParámetroTipo de datoDescripción
entity_typeintTipo de entidad (2-lead)
entity_idstringEl ID de la entidad a la que se debe vincular el contacto. Se pueden utilizar placeholders, por ejemplo, si se utilizó un manejador "filter" se puede utilizar {{external_lead.id}}.
contact_idstringParámetro opcional. El ID del contacto al que se debe vincular el chat. El contacto debe estar en el lead especificado. Se pueden utilizar los placeholders, por ej.: si se utilizó un manejador "filter" , puedes usar{{external_contact.id}}.

meta

El manejador "meta" está diseñado para manejar datos adicionales que se envían cuando se inicia el chat.

Para más información sobre el envío de metadatos, consulta la documentación del mensajero:

{
  "handler": "meta",
  "params": {
    "delimiter": "-",
    "values": [
      "lead.tags",
      "lead.custom_fields.123",
      "lead.custom_fields.124",
      "lead.tags"
    ]
  }
}
ParámetroTipo de datosDescripción
delimiterstringEl caracter que separará el contenido entrante en elementos.
valuesarrayUn arreglo de valores donde se almacenarán los elementos de la información entrante. Los valores pueden ser registrados en etiquetas o campos de lead.

condition

El manejador "condition" está diseñado para crear condiciones lógicas.

{
  "handler": "condition",
  "params": {
    "term1": "chat.origin",
    "term2": "telegram",
    "operation": "=",
    "result": [
      {
        "handler": "action",
        "params": {
          "name": "change_status",
          "params": {
            "value": 123
          }
        }
      }
    ]
  }
}
ParámetroTipo de datoDescripción
term1stringLa condición 1 puede ser:
lead.tags – que devuelve una lista de etiquetas,
chat.origin – que devuelve la fuente de la cual provino la solicitud (Facebook, Telegram, Viber), cualquier placeholder del bloque descrito en la sección del manejador "show", por ejemplo {{contact.name}}.
term2string/objLa condición 2: para el operador in_range, debes pasar un objeto con parámetros; de lo contrario, se debe proporcionar una cadena o placeholder de la sección "show" del manejador.
term2.fromintEl valor "from" del rango
term2.tointEl valor "to" del rango
operationstringEl operador de comparación: "=", "! =", "in", "not_in" o "in_range"
resultarraySi la comparación es exitosa, el arreglo de manejadores

Operadores

OperadoresDescripción
"="El operador "=" verifica si "term1" es igual a "term2"
"!="El operador "!=" verifica si "term1" no es igual a "term2"
"in"Toma cadenas de "term1" y "term2", las divide en valores con comas y busca ocurrencias de los valores de "term2" en "term1". Si hay al menos una coincidencia, se ejecutarán los manejadores de resultados.
"not_in"Toma cadenas de "term1" y "term2", las divide en valores con comas y busca ocurrencias de los valores de "term2" en "term1". Si no hay coincidencias, se ejecutarán los manejadores de resultados
"in_range"Encuentra todos los enteros en "term1". Si al menos uno de estos números cae dentro del rango especificado por"term2", se ejecutará el arreglo de manejadores de resultados.

validations

El manejador "validations" está diseñado para crear condiciones lógicas.

{
  "handler": "validations",
  "params": {
    "logic": "and",
    "conditions": [
      {
        "client_value": "{{message_text}}",
        "type": "regex",
        "condition_value": "/[0-9]+/",
        "operation": "contains"
      },
      {
        "client_value": "{{message_text}}",
        "type": "simple",
        "condition_value": "654",
        "operation": "equal"
      },
      {
        "client_value": "{{message_text}}",
        "type": "range_numbers",
        "condition_value": {
          "from": 123,
          "to": 321
        },
        "operation": "contains"
      },
      {
        "client_value": "{{message_text}}",
        "type": "email",
        "condition_value": "",
        "operation": "contains"
      }
    ],
    "result": [
      {
        "handler": "goto",
        "params": {
          "type": "question",
          "step": 3
        }
      }
    ]
  }
}
ParámetrosTipo de datoDescripción
logicstringLa lógica para verificar las condiciones es la siguiente: si se especifica "and", todas las condiciones deben ser verdaderas; si se especifica "or", al menos una de las condiciones debe ser verdadera.
conditionsarrayLa lista de condiciones para verificar se describe a continuación
resultarrayTras una validación exitosa, se ejecutará el arreglo de manejadores

Condición simple

La condición "simple" verifica la igualdad/desigualdad o compara la longitud

{
  "client_value": "{{message_text}}",
  "type": "simple",
  "condition_value": "654",
  "operation": "equal"
}
ParámetroTipo de datoDescripción
client_valuestringEl valor que se está verificando puede ser un placeholder de la sección del manejador "show", por ejemplo, "{{contact.name}}".
typestringDebe establecerse en "simple"
condition_valuestringPuede ser un placeholder de la sección del manejador "show" (por ej.: "{{contact.name}}") o un valor personalizado.
operationstringPuede ser "equal", "not_equal" o "length".
Si se selecciona el operador "equal", la condición será true si "client_value" es igual a "condition_value". Si se selecciona el operador "not_equal" , la condición será true si "client_value" no es igual a "condition_value". Si se selecciona el operador "length", la condición será true si la longitud de la cadena"client_value" es igual a "condition_value".

Condición email/phone

Las condiciones "email" y "phone" verifican si una cadena contiene un número de teléfono o un correo electrónico.

{
  "client_value": "{{message_text}}",
  "type": "email",
  "condition_value": "",
  "operation": "contains"
}
ParámetroTipo de datoDescripción
client_valuestringEl valor que se está verificando puede ser un placeholder de la sección del manejador "show" , por ejemplo, "{{contact.name}}".
typestringEl tipo de condición puede ser "email" para buscar un correo electrónico o "phone" para buscar un número de teléfono.
condition_valuestringDebe ser una cadena vacía ("")
operationstringPuede ser "contains" o "not_contains". Si se selecciona el operador "contains" , la condición será true si "client_value" contiene un correo electrónico o un número de teléfono. Si se selecciona el operador "not_contains" , la condición será true si "client_value" no contiene un correo electrónico o un número de teléfono.

Condición regex

Una condición "regex" verifica si una cadena contiene una expresión regular.

{
  "client_value": "{{message_text}}",
  "type": "regex",
  "condition_value": "/[0-9]+/",
  "operation": "contains"
}
ParámetroTipo de datoDescripción
client_valuestringEl valor que se está verificando puede ser un placeholder de la sección del manejador "show" , por ejemplo, "{{contact.name}}".
typestringDebe ser "regex"
condition_valuestringTexto de la condición
operationstringPuede ser "contains" o "not_contains". Si se selecciona el operador "contains", la condición será true si "client_value" contiene la expresión regular. Si se selecciona el operador "not_contains" , la condición será true si "client_value" no contiene la expresión regular.

Condición range_numbers

Una condición "range_numbers" verifica si una cadena contiene un número dentro de un rango especificado.

{
  "client_value": "{{message_text}}",
  "type": "range_numbers",
  "condition_value": {
    "from": 123,
    "to": 321
  },
  "operation": "contains"
}
ParámetroTipo de datoDescripción
client_valuestringEl valor que se está verificando puede ser un placeholder de la sección del manejador "show", por ejemplo, "{{contact.name}}".
typestringDebe ser “range_numbers”
condition_valueobjEl rango en el que verificamos todos los números en "client_value".
condition_value.fromstring, numberEl valor del rango "from" se puede especificar como un placeholder de la sección del manejador "show" (por ejemplo, "{{lead.price}}") o como un valor personalizado.
condition_value.tostring, numberEl valor del rango "to" se puede especificar como un placeholder de la sección del manejador "show" (por ejemplo, "{{lead.price}}") o como un valor personalizado.
operationstringPuede se "contains" o "not_contains". Si se selecciona el operador "contains", la condición será true si "client_value" contiene un número dentro del rango especificado. Si se selecciona el operador "not_contains", la condición serátrue si "client_value" no contiene un número dentro del rango especificado.

preset

El manejador "preset" está diseñado para procesar mensajes entrantes utilizando plantillas predefinidas.

ParámetroTipoDescripción
namestringNombre del manejador
paramsarrayParámetros del manejador

contacts.validate_base_info

La plantilla "contacts.validate_base_info" te permite obtener y verificar la información del usuario, y luego solicitar cualquier información faltante.

{
  "handler": "preset",
  "params": {
    "name": "contacts.validate_base_info",
    "params": {
      "empty_email": "Por favor, proporciona tu correo electrónico.",
      "empty_phone": "Por favor, proporciona tu número de teléfono.",
      "invalid_phone": "Parece que hay un error en el número de teléfono.",
      "success": "Gracias",
      "empty_all": "Por favor, proporciona tu correo electrónico y número de teléfono",
      "check_doubles": true,
      "phone_doubles": "Este número de teléfono ya está en uso. Por favor, ingresa un número diferente.",
      "email_doubles": "Este correo electrónico ya está en uso. Por favor, ingresa un correo electrónico diferente.",
      "all_doubles": "Este número de teléfono y correo electrónico ya están en uso. Por favor, ingresa información de contacto diferente.",
      "use_quick_replies": true
    }
  }
}
ParámetroTipoDescripción
empty_emailstringMensaje en ausencia de correo electrónico del contacto
empty_phonestringMensaje en ausencia de un número de teléfono del contacto
invalid_phonestringMensaje al recibir un número de teléfono inválido
successstringMensaje después de recibir todos los datos
empty_allstringMensaje en ausencia de todos los datos
check_doublesboolUn parámetro que determina si se habilita la búsqueda de contactos duplicados basados en el correo electrónico y el número de teléfono. Si está habilitado, cuando se encuentre un contacto duplicado, se solicitará nuevamente la información del contacto.true significa habilitado, mientras que false o la ausencia del parámetro significa deshabilitado.
phone_doublesstringEl mensaje que se mostrará si se encuentra un contacto duplicado basado en el número de teléfono.
email_doublesstringEl mensaje que se mostrará si se encuentra un contacto duplicado basado en el correo electrónico.
all_doublesstringEl mensaje que se mostrará si se encuentran duplicados para el contacto basados tanto en el número de teléfono como en el correo electrónico.
use_quick_repliesstringUn parámetro que envía botones de respuesta rápida cuando al contacto le falta un correo electrónico y/o número de teléfono. Esto solo está disponible para Facebook y muestra botones con la información de cuenta de Facebook del usuario (teléfono, correo electrónico). Para habilitar esta función, establece el valor en true.

contacts.get_base_info

La plantilla "contacts.get_base_info" te permite obtener información sin hacer preguntas adicionales.

{
  "handler": "preset",
  "params": {
    "name": "contacts.get_base_info"
  }
}

send_internal

El manejador "send_internal" te permite enviar un mensaje interno en el chat del lead.

🚧

Si se especifican tanto group_id como user_id simultáneamente, el mensaje se enviará al grupo de usuarios.

{
  "handler": "send_internal",
  "params": {
    "entity_id": "{{lead.id}}",
    "entity_type": 2,
    "message": "¡Hola!"
  }
}
ParámetroTipo de datoDescripción
entity_idint or stringEl ID del lead al que se enviará el mensaje. Se puede utilizar un placeholder como "{{lead.id}}".
entity_typeintUn tipo de entidad al que se enviará el mensaje. Solo 2 (lead) está disponible.
messagestringUna cadena con un mensaje
group_idintUn parámetro opcional, el ID del grupo de usuarios al que se debe enviar el mensaje.
user_idintUn parámetro opcional, el ID del usuario al que se debe enviar el mensaje.

widget_request

El manejador "widget_request: está diseñado para enviar webhooks a URLs externas desde Salesbot.

🚧

Este manejador solo se puede utilizar desde el paso Widget del Salesbot. Encuentra información adicional sobre el widget del Salesbot aquí.

{
  "handler": "widget_request",
  "params": {
    "url": "https://example.com/endpoint",
    "data": {
      "contact": "{{contact.name}}",
      "from": "widget"
    }
  }
}
onSalesbotDesignerSave: function (handler_code, params) {
  var request_data = {
    message: params.message,
  };

  if (APP.getBaseEntity() === 'lead') {
    request_data.lead = '{{lead.id}}';
  };

  return JSON.stringify([
    {
      question: [
        {
          handler: 'widget_request',
          params: {
            url: 'https://example.com/webhook',
            data: request_data,
          },
        },
        {
          handler: 'goto',
          params: {
            type: 'question',
            step: 1,
          },
        },
      ],
    },
    {
      question: [
        {
          handler: 'conditions',
          params: {
            logic: 'and',
            conditions: [
              {
                term1: '{{json.status}}',
                term2: 'success',
                operation: '=',
              },
            ],
            result: [
              {
                handler: 'exits',
                params: {
                  value: 'success',
                },
              },
            ],
          },
        },
        {
          handler: 'exits',
          params: {
            value: 'fail',
          },
        },
      ],
    },
  ]);
},

ParámetroTipo de datoDescripción
urlstringEl punto de enlace URL del servidor externo
dataarrayUn arreglo de cualquier dato que contenga cadenas y/o placeholders de la sección del manejador "show" , por ejemplo, "{{contact.name}}".

El punto de enlace recibirá una solicitud POST. Para confirmar que el webhook ha sido recibido, debes responder dentro de los 2 segundos con un código de estado HTTP 200.

{
      "token": "JWT_TOKEN",
      "data": {
          "contact": "Nombre del contacto",
          "from": "widget"
      },
      "return_url": "https://subdomain.kommo.com/api/v4/salesbot/321/continue/123"
    }

El token JWT se necesita para validar los datos enviados en la solicitud. Está autenticado con la clave secreta del cliente.

Respuesta del widget y reanudación de las operaciones del bot

Para reanudar la operación del bot, necesitas realizar una solicitud con los datos. El bot actual no continuará su operación hasta que reciba la solicitud. Además, no podrás continuar con la ejecución del bot si otro bot para la misma entidad ya se encuentra en funcionamiento.

stop

El manejador "stop" está destinado a realizar acciones cuando el bot haya terminado.

{
  "finish": [
    {
      "handler": "stop",
      "params": {
        "action": "talk-close"
      }
    },
    {
      "handler": "stop",
      "params": {
        "action": "salesbot-start",
        "bot": 1234
      }
    }
  ]
}
ParámetroTipo de datoDescripción
actionstringPuede ser "talk-close" o "salesbot-start". "talk-close" termina la conversación. Si esto se ejecuta dentro del bot de NPS, la conversación se cerrará; de lo contrario, se iniciará el bot de NPS."salesbot-start" inicia otro bot.
botintEl parámetro es obligatorio si la acción seleccionada es "salesbot-start". Especifica el ID del bot que debe ser iniciado.

Ejemplos

Suscribir a un grupo de usuarios al chat:

[
    {
        "question": [
            {
                "handler": "action",
                "params": {
                    "name": "subscribe",
                    "params": {
                        "type": "group",
                        "value": 111
                    }
                }
            }
        ]
    }
]

Mover el lead a otra etapa:

[
    {
        "question": [
            {
                "handler": "action",
                "params": {
                    "name": "change_status",
                    "params": {
                        "value": 142
                    }
                }
            }
        ]
    }
]

Enviar cualquier texto al cliente:

[
    {
        "question": [
            {
                "handler": "show",
                "params": {
                    "type": "text",
                    "value": "Hola"
                }
            }
        ]
    }
]

Enviar un mensaje con los botones de selección:

[
    {
        "question": [
            {
                "handler": "show",
                "params": {
                    "type": "buttons",
                    "value": "Por favor, elige el tipo de participación:",
                    "buttons": [
                        "Fuera de línea",
                        "En línea"
                    ]
                }
            }
        ],
        "answer": [
            {
                "handler": "buttons",
                "params": [{
                    "regex": "/offline/iu",
                    "params": [{
                        "handler": "action",
                        "params": {
                            "name": "set_custom_fields",
                            "params": {
                                "type": 2,
                                "value": "Fuera de línea",
                                "custom_fields_id": 4242
                            }
                        }
                    }]
                },
                    {
                    "regex": "/online/iu",
                    "params": [{
                        "handler": "action",
                        "params": {
                            "name": "set_custom_fields",
                            "params": {
                                "type": 2,
                                "value": "En línea",
                                "custom_fields_id": 4242
                            }
                        }
                    }]
                }]
            }]
    }
]

Establecer una etiqueta para un lead:

[
    {
        "question": [
            {
                "handler": "action",
                "params": {
                    "name": "set_tag",
                    "params": {
                        "type": 2,
                        "value": "salesbot"
                    }
                }
            }
        ]
    }
]

Establecer un valor para un campo personalizado:

[
    {
        "question": [
            {
                "handler": "action",
                "params": {
                    "name": "set_custom_fields",
                    "params": {
                        "type": 2,
                        "custom_fields_id": 123,
                        "value": "Valor de campo"
                    }
                }
            }
        ]
    }
]

Guardar metadatos en la tarjeta del lead:

[
    {
        "question": [
            {
                "handler": "meta",
                "params": {
                    "delimiter": "-",
                    "values": [
                        "lead.tags",
                        "lead.custom_fields.123",
                        "lead.custom_fields.124",
                        "lead.tags"
                    ]
                }
            }
        ]
    }
]

Solicitar correo electrónico y número de teléfono, registrándolos en la tarjeta del lead solo con la primera respuesta:

[
    {
        "question": [
            {
                "handler": "show",
                "params": {
                    "type": "text",
                    "value": "Por favor, proporciona tu número de teléfono y correo electrónico."
                }
            }
        ],
        "answer": [
            {
                "handler": "preset",
                "params": {
                    "name": "contacts.get_base_info"
                }
            }
        ]
    }
]