Javascript

Aquí tienes la posibilidad de manipular la información en el contexto de la conversación y su base de datos utilizando JavaScript. Es ideal para definir reglas más avanzadas que no serían posibles utilizar el paso "Filtro".

Mencionamos mucho aquí sobre bases de datos, objetos personalizados y registros. Así que si quieres entender mejor, ve a la sección Datos.

Vamos a mencionar debajo de los recursos disponibles cuando se utiliza código:

Variables de contexto de la conversación

Durante el flujo de conversación, la información sobre el contexto de conversación se puede guardar en cualquiera de estos pasos o acciones:

Mensaje de texto o tarjeta:

    • Cuando "guarda respuesta", la información puede ser un campo del objeto de usuario o algún otro objeto personalizado. Si es del usuario, la información se guardará directamente en la base de datos, de lo contrario, se almacenará temporalmente como la variable de contexto de la conversación, que se puede acceder a través del nombre del objeto seguido del nombre del campo, como ejemplo: direccion.codigopostal

Intenciones:

    • En el caso de la PNL, teniendo alguna intención coincidente, las entidades de esta intención se almacenarán temporalmente como variables del contexto de conversación. Se puede accederlas agregando 'context.obejcts' antes del nombre de la variable de las intenciones, por ejemplo: context.objects.comida

Registros de consulta y actualización de objetos

Tu tienes la opción aquí de hacer las consultas de registros de objetos personalizados para que estén disponibles durante la ejecución del código. El resultado se devolverá como tipo de matriz. Para acceder al resultado de una consulta basta añadir '__s' en el lado derecho del nombre del objeto, por ejemplo: pedido__s

Por ahora, las opciones de ejecución de la consulta son:

  • Límite de registros: Responsable de limitar la cantidad de registros devueltos por la consulta.

  • Condición de tiempo: Si el número de registros de consulta es mayor que el límite, establece un orden de devolución de los registros: por más reciente o más antiguo.

Además de los campos personalizados, cada registro de consulta tendrá los siguientes campos de sistema disponibles:

  • id: ID de registro

  • obj_id: ID del objeto del registro

  • parents: objeto controlador del objeto actual (O padre del objeto actual)

    • parents.id: ID del objeto controlador

    • parents.name: Nombre del objeto controlador

  • grandparents: objeto controlador del objeto controlador del objeto actual (o abuelo del objeto actual)

    • grandparents.id: ID del objeto controlador

    • grandparents.name: Nombre del objeto controlador

  • createdAt: horario (en milissegundos) desde el momento en que se creó el registro.

  • updatedAt: horario (en milissegundos) de cuándo se actualizó el registro.

A continuación, se muestra un ejemplo de cómo controlar la devolución de la consulta:

// Suma el total del valor de los últimos pedidos del usuario actual
var total = 0;
for (var x in pedido__s){
  // Accede a una orden a la vez
  var pedido = pedido__s[x];

  // Dentro de cada orden, accede el campo valor y añade al total
  total += pedido.valor;
}

Por estándar, el registro del objeto User, que se refiere al usuario actual, y las variables de Contexto de la Conversación estarán siempre disponibles. Por lo tanto, no es necesario consultar el objeto User. Para acceder el campo del sistema ID del usuário actual, basta usar: user.id. y para acceder, por ejemplo, a una variable de contexto denominada producto_atual basta usar: context.objetcs.produto_atual

Cualquier cambio de valor de los campos personalizados de estos objetos se reflejará en la base de datos después de que se haya ejecutado el código.

Creación de registros

También puedes crear nuevos registros de objetos personalizados. Sólo tienes que establecer estos registros como tipo de objeto JavaScript (formato JSON). Recordando rellenar los campos requeridos. Y cuando esté listo, agregarlos al objeto respectivo que puedes utilizar de la siguiente manera: Nombre del Objeto + '__c', por ejemplo: item_del_pedido__c

Aquí tenemos un ejemplo de cómo crear un registro:

// Declara la variable que tendrá la nueva información de artículo de pedido
var nuevo_item_pedido = {}

// Rellena los campos del nuevo registro
nuevo_item_pedido.numero = '12345';
nuevo_item_pedido.producto = context.objetcs.producto_id;
nuevo_item_pedido.cantidade = context.objetcs.producto_cantidade;
nuevo_item_pedido.valor = context.objetcs.producto_valor;

// Rellene el campo Controller que procedía de la consulta en este caso el ID de orden
if (pedido__s[0]){
  nuevo_item_pedido.pedido = pedido__s[0].id;

  // Agrega el nuevo registro que se creará
  item_del_pedido__c.push(nuevo_item_pedido);
}

Si estás creando un registro de un objeto que tiene un objeto Controlador (es decir, tiene una relación de 1 a N), debes informar el ID de este registro de controlador en su respectivo campo. De lo contrario, este registro no se creará.

Eliminación de registros

También tienes la opción de eliminar registros de objetos personalizados. Simplemente haz la query como se mencionó anteriormente, obteniendo el identificador de los registros que se deben eliminar y agregarlos al objeto respectivo que se puede utilizar de la siguiente manera: Nombre del Objeto + '__d', por ejemplo: pedido__d

A continuación, se muestra un ejemplo de cómo eliminar un registro:

// Recorre todas las solicitudes devueltas por la query
for (var i in pedido__s){

  // Identifica el pedido con Status Incompleto
  if (pedido__s[i].status === 'incompleto'){

     // Agrega el identificador del registro que se eliminará
     pedido__d.push( pedido__s[i].id );
  }
}

Si estás eliminando un registro de un objeto que tiene debajo de él algún objeto controlado (es decir, tiene una relación de 1 a N), todos los registros controlados por él se eliminarán también.

Envío de mensajes de texto

Hay una alternativa para enviar mensajes al usuario mediante código JavaScript. Es importante para los casos, por ejemplo, donde el envío de mensajes depende de la información disponible después de que se haya realizado una query. A continuación se muestra un ejemplo de cómo enviar un mensaje:

// Establece una variable con la información requerida para enviar el mensaje
var message_1 = {
  type: 'text',
  text: ' El total de su orden actual es US$ ' + context.objetcs.orden_total,
  quick_replies: [{
     caption: 'Confirmar',
     type: 'context_variable',
     value: {orden_confirmada: context.objetcs.orden}
  }]
};

// Agrega el mensaje que se enviará
send_message.push(message_1);

La siguiente es la información que debe proporcionarse para crear un mensaje de texto. Cuando se utiliza en el código debe estar con el tipo de objeto de JavaScript (formato JSON).

  • type: Siempre pongas 'text'. Obligatorio.

  • text: Coloca el texto que desees enviar aquí. Obligatorio y límite de 320 caracteres.

  • quick_replies: Array con información de cada respuesta rápida. No es obligatorio y limita hasta 10 respuestas.

      • caption: Texto que aparece visible para el usuario. Obligatorio y límite de hasta 20 caracteres.

      • type: puede ser 'url' o 'context_variable' representando un tipo objeto de Javascript conteniendo informaciones que puede accederse durante el tiempo del contexto de conversación actual. Obligatorio.

      • value: depende del type de arriba, si es 'url', llenar aquí la url válida. Se es 'context_variable' llenar aquí el objeto en formato JSON. Obligatorio.

Envío de tarjetas de mensaje

Aquí tenemos la opción de enviar mensajes que contengan tarjetas.

// Establece una variable con la información requerida para enviar el mensaje
var message_2 = {
  type: 'cards',
  cards: [{
     title: 'Opção 1',
     subtitle: 'Detalles de la opción',
     image_url: '
https://cosmobots.io/static/media/testing.png
',
     buttons: [{
        caption: 'Seleccionar',
        type: 'context_variable',
        value: {producto_seleccionado: producto__s[0].id}
     },{
        caption: 'Acceder Detalles',
        type: 'url',
        value: '
www.teste.com
'
     }]
  }],
};

// Adiciona a mensagem para ser enviada
send_message.push(message_2);

La siguiente es la información que debe proporcionarse para crear un mensaje de tarjeta. Cuando se utiliza en el código debe estar con el tipo de objeto de JavaScript (formato JSON).

  • type: Siempre pongas 'cards'. Obligatorio.

  • cards: array Con información de cada tarjeta. Obligatorio.

    • title: Título de la tarjeta. Obligatorio y límite de hasta 80 caracteres.

    1. subtitle: Subtítulo de la tarjeta. No es necesario y limita hasta 80 caracteres.

    • image_url: url de la imagen de la tarjeta. No es necesario y limita hasta 120 caracteres.

    1. buttons: array con información de cada botón. No es necesario y limita hasta 3 botones.

      • caption: Texto que aparece visible para el usuario. Obligatorio y límite de hasta 20 caracteres

      • type: puede ser 'url' o 'context_variable' representando un tipo objeto de Javascript conteniendo informaciones que puede accederse durante el tiempo del contexto de conversación actual. Obligatorio.

      • value: depende del type de arriba, si es 'url', llenar aquí la url válida. Se es 'context_variable' llenar aquí el objeto en formato JSON. Obligatorio.

Hay un tiempo de espera de ejecución de 15 segundos del código JavaScript. Por lo tanto, si se pasa este límite, se interrumpirá la ejecución del código y se devolverá un error que se puede consultar en el historial de conversaciones.

Envío de imágenes/archivos adjuntos/vídeos

Puedes enviar media a través de JS utilizando la siguiente plantilla:

// Establece una variable con la información requerida para enviar el mensaje
var message_1 = {
  type: 'text',
  text: 'Muchas gracias, ' + user.first_name,
};
var message_2 = {
  type: 'text',
  text: 'Utilice este código QR para entrar en el evento:',
};
var message_3 = {
  type: 'media',
  mime_type: 'image/png',
  url: user.qr_code
};
// Agrega el mensaje que se enviará
send_message.push(message_1);
send_message.push(message_2);send_message.push(message_3);

Last updated