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. 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. 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. 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. 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. 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. 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)

PontoO que a documentação dizO que fazer
Autorização do gatilhoPúblico por padrão; token opcional enviado como BearerAtive o token ou valide a assinatura
Tamanho do corpoAcima de 512 KB retorna 413Peça à ZapZap só os eventos que usa
RespostaSem $.respond, o endpoint devolve 400Chame $.respond logo no início
VariáveisSecretas por padrão; process.env dentro do componenteLeia 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.