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: '120363123456789@g.us' , // 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
Receber Mensagens Configure webhooks para responder automaticamente
API Reference Veja todos os parâmetros disponíveis