Webhooks y solicitudes HTTP
Dos acciones del constructor hablan con sistemas fuera de WordPress:
| Acción | Dirección | Para qué |
|---|---|---|
| Enviar webhook | sitio → otro sistema | Avisar a n8n, Zapier, Make, un flujo de Joinotify Cloud o tu ERP |
| Solicitud HTTP | ida y vuelta | Consultar una API y usar la respuesta en las acciones siguientes del mismo flujo |
Las dos solo llaman a direcciones públicas: las direcciones locales y de red privada
(localhost, 127.0.0.1, 10.x, 192.168.x y similares) se rechazan, también cuando aparecen
en una redirección. Quien edita un flujo no puede, a través de ellas, alcanzar la red interna del
servidor.
Enviar webhook
Disponible desde la 2.5.0.
| Campo | Qué hace |
|---|---|
| URL | La dirección que recibe la llamada |
| Método | El método HTTP de la llamada |
| Cuerpo | Los datos del disparador (pedido, cliente, usuario, carrito) o JSON personalizado |
| JSON | El JSON escrito por ti, con variables — cuando el cuerpo es personalizado |
| Encabezados | Encabezados extra, como un token del sistema que recibe |
| Secreto de firma | Opcional. Firma cada llamada para que el destino sepa que vino de tu sitio |
Con los datos del disparador, el cuerpo es el mismo que monta la sincronización con Joinotify Cloud: el pedido con el historial de compras del cliente y los enlaces de pagar, ver y valorar; el usuario; el carrito; o la entrada del formulario.
Verificar la firma
Con un secreto rellenado, cada llamada lleva dos encabezados:
X-Joinotify-Timestamp: 1730640000
X-Joinotify-Signature-256: sha256=<HMAC-SHA256 de "timestamp.cuerpo" con el secreto>Es el mismo esquema de los webhooks de Joinotify Cloud, así que sirve el mismo código de verificación — consulta Verificar la firma.
Barras invertidas en el JSON
Hasta la 2.7.0, guardar el flujo borraba las barras invertidas escritas en él, y unas comillas
escapadas (\") en un cuerpo JSON se convertían en JSON inválido — la acción nunca enviaba. La
2.7.0 lo corrigió: los flujos guardan las barras tal como se escribieron. Una barra perdida en un
guardado anterior hay que escribirla de nuevo.
Solicitud HTTP
Disponible desde la 2.7.0. Llama a cualquier API pública y guarda la respuesta con un nombre, que las acciones siguientes leen como variable.
| Campo | Qué hace |
|---|---|
| Método y URL | GET, POST, PUT, PATCH o DELETE, y la dirección — que acepta variables |
| Parámetros de consulta | Pares de clave y valor añadidos a la URL, ya codificados |
| Encabezados | Encabezados extra. Los tuyos prevalecen sobre los predeterminados (Accept, User-Agent, Content-Type) |
| Autenticación | Ninguno, Token Bearer, Básica (usuario y contraseña) o Clave de API en un encabezado |
| Cuerpo | JSON, campos de formulario, texto plano, los datos del disparador o sin cuerpo |
| Nombre de la respuesta | El nombre que usan las acciones siguientes para leer la respuesta |
| Tiempo de espera | Segundos de espera de la respuesta: 10 por defecto, de 1 a 30 |
| Cuando la solicitud falle | Continuar con las siguientes acciones (el predeterminado) o Detener el flujo de trabajo |
Las variables dentro de las cadenas de un cuerpo JSON se rellenan sin romperlo, sean cuales sean las comillas del valor. Si el cuerpo no es JSON válido después de rellenarlo, la llamada no sale y el motivo queda en el log.
Leer la respuesta
Con la respuesta guardada como cp, por ejemplo:
| Variable | Qué trae |
|---|---|
{{ http:cp.status }} | El código HTTP, como 200 |
{{ http:cp.ok }} | true para un código 2xx, false para el resto |
{{ http:cp.error }} | El motivo, cuando la llamada no se completó |
{{ http:cp }} | El cuerpo entero (un objeto JSON sale como JSON) |
{{ http:cp.body.calle }} | Un campo del cuerpo JSON. Puntos para claves anidadas y posiciones de lista: body.items.0.nombre |
Valen en cualquier acción después de la solicitud — también después de un Tiempo de espera — y
aceptan modificadores. Para decidir el camino según el
resultado, usa una Condición sobre {{ http:cp.ok }}.
Límites de la respuesta
La respuesta se lee hasta 256 KB y sigue como máximo 3 redirecciones. Un cuerpo de más de 4 KB, en
JSON, no se guarda — el código HTTP sí. El límite existe porque la respuesta viaja con el flujo
cuando hay una espera después; los desarrolladores lo cambian con el filtro
Joinotify/Builder/Http_Request_Action/Max_Stored_Bytes.
La credencial
El token, la contraseña o la clave de API se cifran cuando se guarda el flujo y no vuelven a aparecer en pantalla — para cambiarlos, escríbelos de nuevo. En otro sitio (un flujo importado, una plantilla de flujo) la credencial no viaja con él y hay que escribirla otra vez; hasta entonces, la acción registra el error y no llama a la API.
El generador de flujos con IA nunca usa esta acción.
Para desarrolladores
La Solicitud HTTP está construida con el mismo punto de extensión que puede usar cualquier
plugin: writes_payload en joinotify_register_action(), que deja que una acción pase valores a
las siguientes, y el filtro Joinotify/Builder/Sealed_Action_Fields, que cifra campos secretos al
guardar. Consulta Recursos para desarrolladores.