webhook tem um link só dela. O seu sistema faz POST nesse link pra iniciar a automação, já com a cobrança, e depois faz outro POST no mesmo link pra avisar se o cliente pagou.
Com isso a automação sabe “pagou / não pagou” sem você mapear variáveis nem chamar outra API.
ara_hook_.
Exemplo completo
Assinatura mensal por Pix. O seu sistema gera o Pix no seu PSP e entrega pra Arara; a automação cobra, espera e agradece. Se nada chegar em 1 hora, manda um lembrete.1. A automação
POST, o passo não precisa do molde charge com {{variaveis}}: ele usa a cobrança recebida.
A automação nasce desligada. Ligue com PUT /v1/automations/{id}/active e { "active": true }. Depois copie o link na tela da automação, no dashboard.
2. Iniciar com a cobrança
3. Avisar que pagou
Quando o webhook do seu PSP confirmar o pagamento:paid. Se esse POST não chegar em 60 minutos, ela segue por unpaid.
Os dois corpos
O link aceita dois corpos. Comphone, inicia uma execução. Com referenceId e status na raiz, atualiza o pagamento.
Iniciar
Resposta
202:
Valem as mesmas conferências do envio pela API. A Arara não guarda o código Pix nem o link depois do envio.
Sem
charge, o link só inicia a automação com as variables.
Atualizar o pagamento
Resposta
200:
O passo wait_payment
“Esperar pagamento”. Para a execução até a cobrança ter um resultado, ou até o prazo acabar.
Se a cobrança já está paga quando a execução chega no passo, ela vai direto pra
paid.
Enquanto a execução espera, as mensagens do cliente seguem o caminho normal (Brain ou caixa de entrada). O passo não consome as respostas, diferente do question.
No histórico, a execução fica com status WAITING_PAYMENT e gera os eventos PAYMENT_WAITING, PAYMENT_CONFIRMED e PAYMENT_NOT_CONFIRMED.
Assinatura (opcional)
Por padrão, quem tem o link consegue chamar. Pra exigir prova de que a chamada veio do seu sistema, ligue Exigir assinatura na tela da automação e copie o secret. Ele aparece uma vez só. Com a assinatura ligada, toda chamada precisa do header:<hex> é o HMAC-SHA256 do corpo cru da requisição, com o secret como chave, em hexadecimal. Assine exatamente os bytes que você envia: serialize o JSON uma vez, assine essa string e mande a mesma string.
PUT /v1/automations/{id}/hook/signature com { "enabled": true } liga a assinatura, e POST /v1/automations/{id}/hook/regenerate gera um link novo.
Idempotência
- Iniciar: mande o header
Idempotency-Key. Sem ele, ocharge.referenceIdfaz o papel. Chamada repetida responde202com"status": "duplicate"e não envia outra cobrança. - Atualizar: repetir o mesmo status responde
200com{ "status": "unchanged" }. Pode reenviar sem medo quando o seu PSP repetir o webhook. - Um status final diferente depois de outro status final é recusado com
CHARGE_ALREADY_SETTLED.
Erros
Todo erro segue o formato padrão, com o código emerror.code:
paid, canceled e expired são finais. failed não é: uma cobrança que falhou ainda pode ser paga.
Veja a lista de erros.
Com n8n
São dois nós HTTP Request, os dois apontando pro mesmo link.- Iniciar. Depois do nó que cria o Pix no seu PSP: método
POST, URL do link, corpo JSON comphone,variablesecharge, preenchidos com a saída do nó do PSP. Adicione o headerIdempotency-Keycom o número do pedido. - Avisar o pagamento. Num segundo workflow, que começa no nó Webhook que recebe o aviso do seu PSP: método
POST, mesma URL, corpo{ "referenceId": "...", "status": "paid" }.
X-Arara-Signature com o prefixo sha256=. No HTTP Request, mande o corpo como texto cru (Raw, application/json) usando a mesma string que foi assinada. Se o n8n serializar o JSON de novo, a assinatura não confere.
Guarde o link e o secret em credenciais ou variáveis do n8n, não no texto do nó.
Outros caminhos
- Gatilhos
charge.paidecharge.expired. Iniciam uma automação quando qualquer cobrança da conta chega nesse status, venha de onde vier (conversa, template, automação ou link). A execução começa com as variáveisreference_id,amount_centsedescription. Serve pra um pós-venda único, separado da automação que cobrou. - Webhook da Arara pro seu backend. Os eventos
charge.*avisam o seu sistema de cada mudança de status. - Endpoint da organização. O endpoint de recuperação com o header
X-Arara-Eventcontinua funcionando como antes.
Como testar
- Crie a automação com
"timeoutMinutes": 1nowait_paymente ligue. - Copie o link no dashboard.
- Faça o
POSTde início com o seu próprio telefone e um Pix válido. Confira o202e o cartão no WhatsApp. - Faça o
POSTcom"status": "paid". Confira o selo de pago,runResumed: truee a mensagem do caminhopaid. - Repita o mesmo
POST: a resposta é{ "status": "unchanged" }. - Inicie outra execução, com outro
referenceId, e não avise o pagamento. Depois de 1 minuto chega a mensagem do caminhounpaid. - Abra
GET /v1/automations/{id}/runs/{runId}/eventse confira a ordem:CHARGE_SENT,PAYMENT_WAITINGePAYMENT_CONFIRMEDouPAYMENT_NOT_CONFIRMED. - Se ligou a assinatura, mande uma chamada sem o header e confira o
HOOK_SIGNATURE_INVALID.