Webhooks e requisições HTTP
Duas ações do construtor conversam com sistemas fora do WordPress:
| Ação | Direção | Para quê |
|---|---|---|
| Enviar webhook | site → outro sistema | Avisar o n8n, o Zapier, o Make, um fluxo do Joinotify Cloud ou o seu ERP |
| Requisição HTTP | ida e volta | Consultar uma API e usar a resposta nas próximas ações do mesmo fluxo |
As duas só chamam endereços públicos: endereços locais e de rede privada (localhost,
127.0.0.1, 10.x, 192.168.x e afins) são recusados, inclusive quando aparecem num
redirecionamento. Quem edita um fluxo não consegue, por elas, alcançar a rede interna do servidor.
Enviar webhook
Disponível desde a 2.5.0.
| Campo | O que faz |
|---|---|
| URL | O endereço que recebe a chamada |
| Método | O método HTTP da chamada |
| Corpo | Os dados do gatilho (pedido, cliente, usuário, carrinho) ou JSON personalizado |
| JSON | O JSON escrito por você, com variáveis — quando o corpo é personalizado |
| Cabeçalhos | Cabeçalhos extras, como um token do sistema que recebe |
| Segredo de assinatura | Opcional. Assina cada chamada para o destino saber que ela veio do seu site |
Com os dados do gatilho, o corpo é o mesmo que a sincronização com o Joinotify Cloud monta: o pedido com o histórico de compras do cliente e os links de pagar, ver e avaliar; o usuário; o carrinho; ou a entrada do formulário.
Verificando a assinatura
Com um segredo preenchido, cada chamada leva dois cabeçalhos:
X-Joinotify-Timestamp: 1730640000
X-Joinotify-Signature-256: sha256=<HMAC-SHA256 de "timestamp.corpo" com o segredo>É o mesmo esquema dos webhooks do Joinotify Cloud, então o mesmo código de verificação serve — veja Verificar a assinatura.
Barras invertidas no JSON
Até a 2.7.0, salvar o fluxo apagava as barras invertidas digitadas nele, e uma aspa escapada
(\") num corpo JSON virava JSON inválido — a ação nunca enviava. A 2.7.0 corrigiu: os fluxos
guardam as barras como foram digitadas. Uma barra perdida num salvamento anterior precisa ser
digitada de novo.
Requisição HTTP
Disponível desde a 2.7.0. Chama qualquer API pública e guarda a resposta com um nome, que as ações seguintes leem como variável.
| Campo | O que faz |
|---|---|
| Método e URL | GET, POST, PUT, PATCH ou DELETE, e o endereço — que aceita variáveis |
| Parâmetros de consulta | Pares de chave e valor acrescentados à URL, já codificados |
| Cabeçalhos | Cabeçalhos extras. Os seus vencem os padrões (Accept, User-Agent, Content-Type) |
| Autenticação | Nenhuma, Token Bearer, Básica (usuário e senha) ou Chave de API em um cabeçalho |
| Corpo | JSON, campos de formulário, texto puro, os dados do gatilho ou sem corpo |
| Nome da resposta | O nome que as próximas ações usam para ler a resposta |
| Tempo limite | Segundos de espera pela resposta: 10 por padrão, de 1 a 30 |
| Quando a requisição falhar | Continuar com as próximas ações (o padrão) ou Parar o fluxo |
As variáveis dentro das strings de um corpo JSON são preenchidas sem quebrá-lo, quaisquer que sejam as aspas do valor. Se o corpo não for JSON válido depois de preenchido, a chamada não sai e o motivo fica no log.
Lendo a resposta
Com a resposta guardada como cep, por exemplo:
| Variável | O que traz |
|---|---|
{{ http:cep.status }} | O código HTTP, como 200 |
{{ http:cep.ok }} | true para um código 2xx, false para o resto |
{{ http:cep.error }} | O motivo, quando a chamada não completou |
{{ http:cep }} | O corpo inteiro (um objeto JSON sai como JSON) |
{{ http:cep.body.logradouro }} | Um campo do corpo JSON. Pontos para chaves aninhadas e posições de lista: body.itens.0.nome |
Elas valem em qualquer ação depois da requisição — inclusive depois de um Tempo de espera — e
aceitam modificadores. Para decidir o caminho pelo
resultado, use uma Condição sobre {{ http:cep.ok }}.
Limites da resposta
A resposta é lida até 256 KB e segue no máximo 3 redirecionamentos. Um corpo acima de 4 KB, em
JSON, não é guardado — o código HTTP é. O limite existe porque a resposta viaja com o fluxo quando
há uma espera depois; desenvolvedores mudam com o filtro
Joinotify/Builder/Http_Request_Action/Max_Stored_Bytes.
A credencial
O token, a senha ou a chave de API são criptografados quando o fluxo é salvo e nunca mais aparecem na tela — para trocar, digite de novo. Em outro site (um fluxo importado, um modelo) a credencial não vem junto e precisa ser digitada outra vez; até lá, a ação registra o erro e não chama a API.
O gerador de fluxos por IA nunca usa essa ação.
Para desenvolvedores
A Requisição HTTP é construída com o mesmo ponto de extensão que qualquer plugin pode usar:
writes_payload em joinotify_register_action(), que deixa uma ação passar valores para as
próximas, e o filtro Joinotify/Builder/Sealed_Action_Fields, que criptografa campos secretos ao
salvar. Veja Recursos para desenvolvedores.