Pré-requisitos
Antes de começar, certifique-se de ter:
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
\`\`\`
`;
| Sintaxe | Resultado |
|---|
*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