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
- 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.
- 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. - 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:
letyconst: declara las variables convar;- 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.fromy similares. UsaindexOfen lugar deincludesystartsWith.
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.