Webhook entrante
El bloque recibe una solicitud de un servicio externo y ejecuta tu código JavaScript. Así el flujo puede continuar a partir de un evento externo: llegó un pago, cambió el estado de un pedido, se activó un sensor.


Ninguna conexión de otros bloques lleva a este bloque: solo lo inicia una solicitud.
Configuración
- «URL de la solicitud»: la dirección a la que llamar. Se asigna al bloque al crearlo y tiene este aspecto:
https://api.<dominio de la plataforma>/hook/<ID del bloque>:<clave secreta>. Sirve cualquier método:GET,POSTy otros. - «Código JavaScript para procesar la solicitud»: el código que se ejecuta con cada solicitud, hasta 16 384 caracteres.
Advertencia
La dirección contiene una clave secreta. Cualquiera que la conozca puede ejecutar tu código: no la publiques.
Qué recibe el código
La solicitud está en el objeto request:
| Campo | Qué contiene |
|---|---|
request.query |
Los parámetros de la cadena de consulta |
request.headers |
Los encabezados de la solicitud, con los nombres en minúsculas |
request.body |
El cuerpo de la solicitud como cadena, tal como llegó |
request.data |
Todos los parámetros de la solicitud juntos: de la cadena de consulta, del formulario y de un cuerpo JSON |
Más sobre los campos y sobre cómo verificar la firma de una solicitud en Variables integradas.
La solicitud no viene de una persona, así que el propio código debe indicar para qué contacto se ejecuta. Para eso hay funciones:
| Función | Cómo encuentra al contacto |
|---|---|
setContactById(id) |
Por el ID del contacto en la plataforma |
setContactByTelegramId(id) |
Por el ID de la persona en Telegram |
setContactByMaxId(id) |
Por el ID de la persona en MAX |
setContactByVkId(id) |
Por el ID de la persona en VK |
setContactByViberId(id) |
Por el ID de la persona en Viber |
Cada función se describe en detalle en la página Elegir el contacto.
La función devuelve true si el contacto se encuentra entre los contactos de este bot y false si no. Se puede llamar a una de estas funciones una vez por solicitud. Al menos una debe estar en el código; si no, el bloque responde con un error y el código no se ejecuta.
Una vez encontrado el contacto, el código puede usar sus datos (id, name, phone y los demás) y todas las funciones del bloque «Intérprete de JavaScript»: variables, etiquetas, sendMessage, goToBlock, disableContinue.
var contactId = request.query.contact_id;
if (setContactById(contactId)) {
setContactVariable('order_status', request.data.status);
sendMessage('El estado de tu pedido ha cambiado.');
}
Para que el servicio externo conozca el ID del contacto, pásaselo antes, por ejemplo con un bloque «Solicitud HTTP» y la plantilla {{ id }}.
Importante
Si no se encuentra el contacto, el código se ejecuta pero no guarda nada: no se escriben variables, etiquetas ni variables globales, no se envían mensajes y la conexión «Continuar» no se activa.
Salidas
- «Continuar»: se activa cuando el código se ha ejecutado, si se encontró el contacto y el código no llamó a
disableContinue().
Qué responde el bloque
La respuesta es un JSON con los campos status (ok o error), message y return_value, que es el valor de la última expresión del código.
| Código de respuesta | Cuándo |
|---|---|
200 |
El código se ha ejecutado. Si no se encontró el contacto, message contiene Code executed without setting contact |
404 |
Dirección incorrecta: no existe ese bloque o la clave no coincide |
422 |
Un error en el código, el campo de código está vacío, el código no tiene ninguna función para elegir el contacto o el propietario del bot no tiene Pro |
429 |
Demasiadas solicitudes |
Cada solicitud y su respuesta quedan en el «Registro de ejecución» del bloque.


Límites
- El bloque solo funciona mientras el Pro del propietario del bot está activo. Los detalles están en Qué está disponible sin Pro.
- No más de 30 solicitudes cada 10 segundos por bot (sumando todos sus bloques «Webhook entrante») y no más de 180 solicitudes por minuto desde una misma dirección IP.
- El código tiene los mismos límites que en el bloque «Intérprete de JavaScript»: ES5 y 5 segundos de ejecución.
Solicitudes de Telegram y MAX
El bloque puede recibir todo lo que la app de mensajería envía a tu bot. En la ventana de conexión de Telegram o MAX, activa el interruptor «Reenviar solicitudes al bloque «Webhook entrante»» y elige el bloque por ID o por nombre en el campo «Bloque».
A partir de ahí, cada evento del canal lo procesa primero el bot, como siempre, según el flujo, y después pasa al código del bloque. El evento, tal como lo envió la app de mensajería, está en request.data.
Así puedes reaccionar a lo que el flujo por sí solo no procesa: mensajes en grupos y canales, que añadan el bot a un chat. Las solicitudes del modo inline de Telegram no se pasan al bloque.
var message = request.data.message;
if (message && message.from && setContactByTelegramId(message.from.id)) {
setContactTag('wrote_in_group');
disableContinue();
}
Estos eventos cuentan para el mismo límite de solicitudes por minuto.