Skip to main content

Pré-requisitos

Antes de começar, certifique-se de ter:
  • Uma conta no EnviaAI
  • Uma API Key criada
  • Uma instância conectada

Enviando Texto Simples

O tipo mais básico de mensagem:
const response = await client.messages.send({
  instanceId: 'inst_abc123',
  to: '5511999999999',
  message: 'Olá! Seja bem-vindo ao EnviaAI.'
});

console.log('Enviada:', response.messageId);

Formatação de Texto

O WhatsApp suporta formatação básica:
const message = `
*Pedido Confirmado!* ✅

Olá _{{nome}}_, seu pedido foi confirmado.

~Preço antigo: R$ 150~
*Preço final: R$ 99*

\`\`\`
Código: #12345
Status: Confirmado
\`\`\`
`;
SintaxeResultado
*texto*negrito
_texto_itálico
~texto~tachado
`código`monospace
```bloco```bloco de código

Enviando Imagens

await client.messages.send({
  instanceId: 'inst_abc123',
  to: '5511999999999',
  mediaUrl: 'https://example.com/produto.jpg',
  mediaType: 'image',
  caption: 'Confira nosso novo produto! 🎉'
});
A URL da imagem deve ser pública e acessível. Formatos: JPEG, PNG, WebP. Máximo: 5MB.

Enviando Documentos

Ideal para boletos, contratos, relatórios:
await client.messages.send({
  instanceId: 'inst_abc123',
  to: '5511999999999',
  mediaUrl: 'https://example.com/boleto.pdf',
  mediaType: 'document',
  filename: 'Boleto-Janeiro-2026.pdf',
  caption: 'Segue o boleto para pagamento'
});

Enviando Áudio

Para mensagens de voz:
await client.messages.send({
  instanceId: 'inst_abc123',
  to: '5511999999999',
  mediaUrl: 'https://example.com/audio.mp3',
  mediaType: 'audio'
});

Enviando Vídeo

await client.messages.send({
  instanceId: 'inst_abc123',
  to: '5511999999999',
  mediaUrl: 'https://example.com/video.mp4',
  mediaType: 'video',
  caption: 'Tutorial de como usar o produto'
});

Respondendo Mensagens

Para criar uma thread de resposta:
// Responder a uma mensagem específica
await client.messages.send({
  instanceId: 'inst_abc123',
  to: '5511999999999',
  message: 'Obrigado pela sua pergunta! A resposta é...',
  quotedMessageId: 'msg_original123'  // ID da mensagem original
});

Enviando para Grupos

O processo é o mesmo, mas use o ID do grupo:
await client.messages.send({
  instanceId: 'inst_abc123',
  to: '[email protected]',  // ID do grupo
  message: 'Mensagem para o grupo'
});
O ID do grupo pode ser obtido via webhook message.received quando uma mensagem é recebida do grupo.

Envio em Massa

Para enviar para múltiplos destinatários:
const recipients = [
  '5511999999991',
  '5511999999992',
  '5511999999993'
];

// Enviar com delay para respeitar rate limits
for (const phone of recipients) {
  await client.messages.send({
    instanceId: 'inst_abc123',
    to: phone,
    message: 'Promoção especial para você!'
  });

  // Delay de 1 segundo entre mensagens
  await new Promise(r => setTimeout(r, 1000));
}
Respeite os rate limits e evite spam. Envio em massa não solicitado pode resultar em banimento.

Verificando Status

Após enviar, acompanhe o status:
const status = await client.messages.getStatus('msg_xyz789');

console.log('Status:', status.status);
// queued -> sent -> delivered -> read
Ou receba via webhook:
// Webhook handler
app.post('/webhook', (req, res) => {
  const { event, data } = req.body;

  if (event === 'message.delivered') {
    console.log(`Mensagem ${data.messageId} entregue!`);
  }

  if (event === 'message.read') {
    console.log(`Mensagem ${data.messageId} lida!`);
  }

  res.sendStatus(200);
});

Tratando Erros

try {
  await client.messages.send(request);
} catch (error) {
  switch (error.code) {
    case 'instance_disconnected':
      console.log('Reconecte a instância');
      break;
    case 'invalid_phone_number':
      console.log('Número inválido');
      break;
    case 'rate_limit_exceeded':
      console.log('Aguarde e tente novamente');
      break;
    default:
      console.error('Erro:', error.message);
  }
}

Próximos Passos