Joinotify

Webhooks y solicitudes HTTP

Dos acciones del constructor hablan con sistemas fuera de WordPress:

AcciónDirecciónPara qué
Enviar webhooksitio → otro sistemaAvisar a n8n, Zapier, Make, un flujo de Joinotify Cloud o tu ERP
Solicitud HTTPida y vueltaConsultar 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.

CampoQué hace
URLLa dirección que recibe la llamada
MétodoEl método HTTP de la llamada
CuerpoLos datos del disparador (pedido, cliente, usuario, carrito) o JSON personalizado
JSONEl JSON escrito por ti, con variables — cuando el cuerpo es personalizado
EncabezadosEncabezados extra, como un token del sistema que recibe
Secreto de firmaOpcional. 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.

CampoQué hace
Método y URLGET, POST, PUT, PATCH o DELETE, y la dirección — que acepta variables
Parámetros de consultaPares de clave y valor añadidos a la URL, ya codificados
EncabezadosEncabezados extra. Los tuyos prevalecen sobre los predeterminados (Accept, User-Agent, Content-Type)
AutenticaciónNinguno, Token Bearer, Básica (usuario y contraseña) o Clave de API en un encabezado
CuerpoJSON, campos de formulario, texto plano, los datos del disparador o sin cuerpo
Nombre de la respuestaEl nombre que usan las acciones siguientes para leer la respuesta
Tiempo de esperaSegundos de espera de la respuesta: 10 por defecto, de 1 a 30
Cuando la solicitud falleContinuar 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:

VariableQué 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.