Workflows com código Node.js
WhatsApp no Pipedream: gatilho HTTP, passo Node.js e variáveis de ambiente
O Pipedream cria uma URL de endpoint própria para cada workflow e deixa você escrever passos em Node.js. Segundo a documentação (lida em 11/11/2026), o corpo JSON chega em steps.trigger.event, os cabeçalhos ficam em minúsculas, e $.respond define a resposta. Variáveis de ambiente criadas em Settings são lidas com process.env e, por padrão, são secretas.
Atualizado em
Por que conectar
Serve para quem quer lógica de verdade entre o evento e a resposta sem montar um servidor: receber a mensagem, consultar uma API, chamar um modelo de IA e responder pela ZapZap, tudo em poucas linhas. A ZapZap conecta números por um canal não oficial: o WhatsApp pode limitar ou bloquear qualquer número, então ritmo, consentimento e aquecimento contam. São R$15 por número ativo/mês, pré-pago, sem cobrança por mensagem, e você começa com crédito de boas-vindas ao verificar o telefone, sujeito à campanha vigente.
Passo a passo
- 1
Crie as variáveis de ambiente
Em Settings > Environment Variables (ou Variables dentro de um projeto), crie ZAPZAP_API_KEY, ZAPZAP_API_SECRET e ZAPZAP_INSTANCE_ID. A documentação informa que variáveis novas são secretas por padrão e que o valor não pode ser alterado depois. As chaves vêm de Settings > API em app.zapzapapi.com.
- 2
Crie o workflow com gatilho HTTP
O Pipedream gera uma URL de endpoint só do workflow. A documentação avisa que, por padrão, gatilhos HTTP são públicos e não exigem autorização, e que corpos acima de 512 KB retornam 413.
- 3
Cadastre a URL na instância
Chame PUT https://api.zapzapapi.com/api/v1/instances/{id}/webhook com webhook_url (a URL do passo anterior) e events (por exemplo, messages). A resposta traz o webhook_secret (whsec_). Teste com POST /instances/{id}/webhook/test e veja a execução no Pipedream.
- 4
Responda o webhook primeiro
Se $.respond nunca for chamado, a documentação diz que o endpoint devolve erro 400. Use $.respond com immediate: true para responder logo e deixar os demais passos rodarem depois. A ZapZap tenta de novo quando o seu endpoint falha.
- 5
Envie a resposta em um passo Node.js
Use o código do exemplo: process.env para as chaves, fetch para POST /{instanceId}/send/text com number e text. Troque o número fixo pelo remetente do evento, lendo os campos de data do envelope que você receber.
- 6
Proteja o endpoint
Como o gatilho é público por padrão, valide a origem. A ZapZap assina cada entrega no cabeçalho X-ZapZap-Signature sobre o corpo bruto; a documentação que li não explica como obter o corpo bruto no gatilho, então confirme essa opção na sua conta, ou configure o token de autorização que o Pipedream oferece.
Exemplo
// Pipedream Node.js code step. Environment variables (Settings > Environment Variables): ZAPZAP_API_KEY, ZAPZAP_API_SECRET, ZAPZAP_INSTANCE_ID
export default defineComponent({
async run({ steps, $ }) {
await $.respond({ status: 200, body: "ok", immediate: true }); // answer the webhook first
const base = "https://api.zapzapapi.com/api/v1/" + process.env.ZAPZAP_INSTANCE_ID;
const r = await fetch(base + "/send/text", {
method: "POST",
headers: {
"Content-Type": "application/json",
"x-api-key": process.env.ZAPZAP_API_KEY,
"x-api-secret": process.env.ZAPZAP_API_SECRET,
},
body: JSON.stringify({ number: "5511999999999", text: "Received: " + steps.trigger.event.body.event }),
});
return { status: r.status };
},
});Ilustrativo. Os campos e endpoints exatos estão na documentação.
Limites e pontos de atenção do Pipedream (11/11/2026)
| Ponto | O que a documentação diz | O que fazer |
|---|---|---|
| Autorização do gatilho | Público por padrão; token opcional enviado como Bearer | Ative o token ou valide a assinatura |
| Tamanho do corpo | Acima de 512 KB retorna 413 | Peça à ZapZap só os eventos que usa |
| Resposta | Sem $.respond, o endpoint devolve 400 | Chame $.respond logo no início |
| Variáveis | Secretas por padrão; process.env dentro do componente | Leia dentro de run() |
Perguntas frequentes
O Pipedream tem ação pronta da ZapZap?
Não que eu tenha confirmado. O caminho desta página é o gatilho HTTP e um passo em Node.js chamando a API REST.
Como leio o corpo do webhook?
Em steps.trigger.event. Payloads JSON viram objetos JavaScript, segundo a documentação lida em 11/11/2026.
Por que recebo erro 400 do endpoint?
Se o workflow não chama $.respond, o endpoint devolve 400. Responda no início com $.respond.
Como evito processar a mesma entrega duas vezes?
Guarde o delivery_id do envelope e ignore repetições. A ZapZap repete a entrega quando o endpoint não responde com sucesso.
Quanto custa a ZapZap?
São R$15 por número ativo/mês, pré-pago, sem cobrança por mensagem, e você começa com crédito de boas-vindas ao verificar o telefone, sujeito à campanha vigente.
Comece agora
Crie sua conta, conecte um número em minutos e teste a API com aquecimento e anti-bloqueio. R$15 por número ativo/mês, pré-pago, sem fidelidade.
