Preguntar a la IA
Español ES
Ir a JetBot24

API de JavaScript

Varios bloques del chatbot ejecutan tu código JavaScript. El código hace cálculos, procesa las respuestas de servicios externos, cambia las variables y etiquetas del contacto, envía mensajes y decide hacia dónde sigue el flujo. Esta sección es una referencia para quien escribe ese código.

Dónde se ejecuta el código

Dónde Cuándo se inicia el código Qué puede usar además de las funciones
El bloque «Intérprete de JavaScript» El contacto ha llegado al bloque Los datos del contacto
El bloque «Solicitud HTTP», el campo «Procesar la respuesta con JavaScript» El servidor ha respondido a la solicitud Los datos del contacto y la respuesta del servidor response
El bloque «Webhook entrante» Ha llegado una solicitud a la dirección del bloque La solicitud request y los datos del contacto, una vez que el código encuentra al contacto
El bloque «Leer filas de Google Sheets», el campo «JavaScript para procesar la tabla» El bloque ha encontrado filas en la hoja Los datos del contacto y las filas encontradas, sheet.data

Qué contienen estos datos se describe en la página «Variables integradas». Las funciones son las mismas en todos los bloques:

Página Funciones
Variables getContactVariable, setContactVariable, deleteContactVariable, getGlobalVariable, setGlobalVariable, deleteGlobalVariable
Etiquetas getContactTags, hasContactTag, setContactTag, deleteContactTag
Mensajes y saltos sendMessage, goToBlock, disableContinue
Elegir un contacto setContactById y otras, solo en el bloque «Webhook entrante»
Firmas y Base64 hash_hmac, base64_encode, base64_decode

Cómo se ejecuta el código

  1. El código se ejecuta entero en un servidor aparte. Las funciones no cambian al contacto de inmediato; anotan qué hacer: qué variables y etiquetas escribir, qué mensajes enviar, a qué bloque ir.
  2. El código terminó sin error: el bot escribe las variables y etiquetas del contacto y las variables globales del bot y luego, en el orden de las llamadas, envía los mensajes y lleva al contacto al bloque de goToBlock. Después se activa la conexión «Continuar», salvo que el código la haya desactivado.
  3. El código terminó con un error: no se aplica nada, ni siquiera lo que el código llamó antes del error.

Dentro de una misma ejecución, las funciones de lectura ya ven lo que el código escribió antes: después de setContactVariable('bouquet', 'Rosas'), una llamada a getContactVariable('bouquet') devuelve 'Rosas', aunque la variable todavía no se haya escrito en el contacto.

El código se inicia de nuevo cada vez que se pasa por el bloque. Las variables normales de JavaScript (var) no se conservan entre ejecuciones: escribe lo que haya que recordar en las variables del contacto o en las variables globales del bot.

Lenguaje

El código se ejecuta como JavaScript del estándar ES5. De los estándares más recientes falta lo siguiente:

  • let y const: declara las variables con var;
  • funciones flecha: escribe function (x) { return x * 2; };
  • plantillas literales entre comillas invertidas: une las cadenas con +;
  • clases, desestructuración, Promise, async/await, setTimeout;
  • métodos de estándares más recientes: includes, startsWith, padStart, find, Object.assign, Array.from y similares. Usa indexOf en lugar de includes y startsWith.

Todo lo de ES5 está disponible: JSON.parse y JSON.stringify, Math, Date, los métodos de cadenas y arrays split, replace, trim, map, filter, forEach, reduce, indexOf, sort. La directiva 'use strict' no hace daño, pero no activa el modo estricto.

El código no puede hacer solicitudes de red: fetch, XMLHttpRequest y require no están disponibles. Para las solicitudes, usa el bloque «Solicitud HTTP».

Fechas

Date cuenta el tiempo en la zona horaria del servidor, así que para los cálculos usa los métodos UTC: getUTCHours(), getUTCDate(). Date no interpreta una cadena como 2026-01-31 12:00:00 (así es created_at): reemplaza el espacio por T y añade Z:

var created = new Date(created_at.replace(' ', 'T') + 'Z');
var days = Math.floor((new Date() - created) / 86400000);

Expresiones regulares

Las expresiones regulares se ejecutan con el motor RE2, y algunas funciones de JavaScript no funcionan en él. El código con uno de estos patrones se detiene con el error Invalid regular expression:

Patrón Qué es
(?=...), (?!...) Búsqueda hacia delante (lookahead)
(?<=...), (?<!...) Búsqueda hacia atrás (lookbehind)
\1, \2 Referencias inversas a un grupo

\w, \b y \d solo entienden letras latinas sin acento y dígitos: /\w+/ no encontrará una palabra escrita en cirílico o con letras acentuadas, como «canción». Para esas letras, enuméralas explícitamente: /[a-záéíóúüñ]+/i.

Límites

Qué Límite
Longitud del código 16 384 caracteres en cada campo de código
Tiempo de ejecución 5 segundos. El código que no termina a tiempo se detiene con el error Script execution time exceeded
sendMessage 10 mensajes por ejecución
goToBlock Una llamada por ejecución
Funciones de búsqueda de contacto Una llamada por solicitud, solo en el bloque «Webhook entrante»

Errores y depuración

Lo que pasó durante una ejecución se muestra en el «Registro de ejecución» de la configuración del bloque: el código fuente, el valor de la última expresión, las acciones realizadas y el texto del error.

El valor de la última expresión es la principal herramienta de depuración. Añade el nombre de una variable o una expresión al final del código y su valor aparecerá en el registro. Convierte antes un objeto o un array en cadena; si no, el registro muestra [object Object]:

var bouquet = { name: 'Rosas', count: 7 };
JSON.stringify(bouquet);

console.log no provoca un error, pero no escribe nada en el registro.

Adónde va un error depende del bloque:

Bloque Qué pasa con un error
«Intérprete de JavaScript» El texto del error se envía al contacto en el chat y se activa la conexión «Continuar»
«Solicitud HTTP» El texto del error se envía al contacto en el chat y la conexión «Continuar» no se activa
«Leer filas de Google Sheets» El texto del error se envía al contacto en el chat y la conexión «Continuar» no se activa
«Webhook entrante» No se envía nada al contacto; el bloque responde a la solicitud con el código 422 y el texto del error

En un mensaje de error de sintaxis, el número de línea es uno más que en el editor: el error Line 4:5 Unexpected identifier significa la línea cuatro menos uno, es decir, la línea tres.

También puedes provocar un error a propósito: throw new Error('Sin precio') detiene el código, y no se guarda nada de lo que hizo. En los bloques que envían el texto del error al chat, el contacto ve Error: Sin precio.

Consejo

Prueba el código en la vista previa del bot, con el botón «Probar el bot» del constructor. Así el error lo ves tú y no tus clientes.