Enviar uma mensagem de WhatsApp com Node.js
Objetivo
Seção intitulada “Objetivo”Ao final, você terá um script Node.js que envia uma mensagem de texto pela Nigora Zap API e mostra a resposta. Sem pacotes extras: o fetch já vem no Node.
Pré-requisitos
Seção intitulada “Pré-requisitos”- Uma instância conectada. Se ainda não conectou, veja Conexão.
- O ID e o token da instância, como em Primeiros passos.
- Node.js 18 ou mais novo. Confira com
node --version.
1. Guarde as credenciais no ambiente
Seção intitulada “1. Guarde as credenciais no ambiente”Não escreva o token no código. Leia-o de variáveis de ambiente:
export NIGORA_INSTANCIA_ID="cole-aqui-o-id-da-instancia"export NIGORA_TOKEN="cole-aqui-o-token"2. Crie o script
Seção intitulada “2. Crie o script”Salve como enviar.mjs. A extensão .mjs permite usar await direto no arquivo:
const { NIGORA_INSTANCIA_ID: instanciaId, NIGORA_TOKEN: token } = process.envif (!instanciaId || !token) { console.error('Defina NIGORA_INSTANCIA_ID e NIGORA_TOKEN.') process.exit(1)}
const resposta = await fetch(`https://api.zap.nigora.com.br/v1/instances/${instanciaId}/messages/text`, { method: 'POST', headers: { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ to: '5511999999999', text: 'Olá! Esta mensagem saiu pela API.', }), signal: AbortSignal.timeout(15000),})
console.log('Status HTTP:', resposta.status)console.log(await resposta.text())process.exit(resposta.ok ? 0 : 1)Troque 5511999999999 pelo telefone de quem vai receber, com DDI e DDD. A API ignora tudo que não for dígito e acrescenta o 55 quando o número tem 10 ou 11 dígitos.
3. Execute
Seção intitulada “3. Execute”node enviar.mjsResultado esperado:
Status HTTP: 202{"id":"…","status":"queued"}O 202 quer dizer que a mensagem entrou na fila. Ela ainda não foi entregue. Guarde o id: é com ele que você liga a resposta aos eventos message.sent e message.status, que chegam por webhook.
Se algo der errado
Seção intitulada “Se algo der errado”| Status | Código | O que fazer |
|---|---|---|
400 |
invalid_phone |
Corrija o telefone: ele precisa ter 12 ou 13 dígitos com o 55 |
401 |
invalid_token |
Confira o token e o ID da instância |
402 |
instance_suspended |
A instância está suspensa ou com pagamento pendente |
422 |
contact_opted_out |
O contato pediu para não receber mensagens |
Se faltar rede ou o tempo esgotar, o fetch lança uma exceção e o Node a mostra no terminal.
Próximos passos
Seção intitulada “Próximos passos”- Enviando mensagens: respostas, fila e acompanhamento do resultado.
- Receber mensagens por webhook: veja as respostas chegarem ao seu sistema.
- Envio de mídia: imagem, vídeo, áudio e documento.