Quer tornar a comunicação do seu negócio no WhatsApp mais eficaz? Este tutorial mostrará como enviar mensagens para números de telefone armazenados em um arquivo CSV usando Node.js, a biblioteca Axios e a Wassenger API. Você aprenderá a ler números de telefone e mensagens do arquivo CSV e enviá-las automaticamente com Wassenger.
Este artigo oferece uma visão rápida das funcionalidades da Wassenger API.
🫣 Não quer programar? Sem problema! Explore nosso novo recurso de Campanhas WhatsApp sem código. Importe seus contatos, defina uma mensagem, agende uma data de envio e relaxe! 🥳 🥳
Pré-requisitos
- Entendimento básico de JavaScript e Node.js
- Node.js instalado em seu computador
- Um editor de texto para escrever código (por exemplo: Visual Studio Code, Atom, Vim)
- Um token de API do Wassenger API token (você pode obtê-lo inscrevendo-se aqui)
🤩 🤖 Wassenger é uma plataforma completa de comunicação e solução de API para WhatsApp. Explore mais de 100+ casos de uso da API e automatize qualquer coisa no WhatsApp se inscrevendo para um teste gratuito e comece em minutos**!**
Instale os pacotes necessários
Primeiro, crie um novo diretório para seu projeto e navegue até ele no terminal. Em seguida, execute os seguintes comandos para criar um novo arquivo package.json e instalar as bibliotecas necessárias:
npm init -y
npm install axios csv-parse
Crie o arquivo CSV
Crie um novo arquivo chamado numbers.csv no diretório do seu projeto com duas colunas:
- Primeira coluna: número de telefone em E164 format com o prefixo do país.
- Segunda coluna: mensagem de texto a ser enviada para o número de telefone alvo.
A planilha deve ficar assim:
O documento equivalente exportado como CSV deve ficar assim:
(+1234567890,
'👋 Welcome to {{your-business-name}}! Thanks for signing up.We are just a message away!' +
1234567890,
"💐 Your order has been shipped.Tracking number is {{tracking-number}}.Don't hesitate to reach out to if you need help! 🤗");
Você pode exportar qualquer documento do Office Excel ou Google Sheets como arquivo CSV seguindo estas instruções:
- Saiba como exportar uma planilha Excel como arquivo CSV
- Saiba como exportar Google Sheets como arquivo CSV
Crie um arquivo com o código
Enviar mensagens de texto
Crie um novo arquivo chamado send_messages.js no diretório do seu projeto e adicione o seguinte código:
const axios = require('axios');
const fs = require('fs/promises');
const { parse } = require('csv-parse/sync');
// Set local path of the CSV file
// You can export any Excel/Google Sheets document as CSV
const csvFile = 'file.csv';
// Replace this with your Wassenger API token
// Get your API token here: https://app.wassenger.com/apikeys
const token = 'ENTER API KEY HERE';
// Optionally specify the target WhatsApp device ID connected to Wassenger
// you want to use for messages delivery(24 characters hexadecimal value)
const device = 'DEVICE ID GOES HERE';
// Set the download URL of the file to be sent.
// The file must be publicly accessible from the Internet and return the file binary content
// You can also upload a local file in Google Drive and make the file publicly available for download
// Accepted file formats are: images(JPEG, WEBP, PNG), video(MP4), audio(MP3, OGG) and documents(PDF, XLSX, DOCX, ZIP...)
const fileUrl = 'https://picsum.photos/seed/picsum/600/500';
// Define the headers for the API request
const headers = {
'Content-Type': 'application/json',
Authorization: `${token}`
};
// Define the URL for the Wassenger API
const url = 'https://api.wassenger.com/v1/messages';
const normalizePhone = phone => {
return `+${phone.replace(/\D/g, '')}`;
};
const sendMessage = async (phone, message) => {
const body = { device, phone, message: message.trim() };
try {
const response = await axios.post(url, body, { headers });
console.log(`=> Message created: ${phone}`);
} catch (error) {
console.error(
'Failed to create message to ${phone}:',
error.response ? error.response.data : error
);
}
};
const main = async () => {
try {
console.log('=> Reading CSV file...');
const data = await fs.readFile(csvFile, 'utf-8');
const records = parse(data, { columns: false, skip_empty_lines: true });
console.log('=> Processing messages...');
for (const [phone, message] of records) {
if (!phone || !message) {
continue;
}
const number = normalizePhone(phone);
if (number && number.length >= 8 && message) {
await sendMessage(number, message);
}
}
} catch (err) {
console.error('Error:', err);
}
};
main();
🤩 🤖 Wassenger é uma plataforma completa de comunicação e solução de API para WhatsApp. Explore mais de 100+ casos de uso da API e automatize qualquer coisa no WhatsApp se inscrevendo para um teste gratuito e comece em minutos**!**
Enviar mensagens com mídia
Neste exemplo, criaremos um programa diferente chamado send_media.js para enviar múltiplas mensagens de mídia (imagens) para diferentes números de telefone carregados a partir de um documento do Google Sheets.
A maneira mais fácil de enviar uma mensagem de mídia é fornecer uma URL de download do arquivo. Se seu arquivo não estiver hospedado em algum lugar, você pode fazer upload para o Google Drive e tornar o arquivo publicamente disponível para que o Wassenger possa baixá-lo e enviá-lo posteriormente.
Exemplo de URL de download de um arquivo público no Google Drive:
https://drive.google.com/uc?id=1RG3CAPiwiFlFATUlIIwhk0RrbEU4PgVP&export=download
Importante: a URL de download fornecida deve retornar o conteúdo binário do arquivo, caso contrário falhará.
Crie um novo arquivo chamado send_media.js no diretório do seu projeto e adicione o seguinte código:
const axios = require('axios');
const { parse } = require('csv-parse/sync');
// Set local path of the CSV file
// You can export any Excel/Google Sheets document as CSV
const csvFile = 'file.csv';
// Set the download URL of the file to be sent.
// The file must be publicly accessible from the Internet and return the file binary content
// You can also upload a local file in Google Drive and make the file publicly available for download
// Accepted file formats are: images(JPEG, WEBP, PNG), video(MP4), audio(MP3, OGG) and documents(PDF, XLSX, DOCX, ZIP...)
const fileUrl = 'https://picsum.photos/seed/picsum/600/500';
// Replace this with your Wassenger API token
// Get your API token here: https://app.wassenger.com/apikeys
const token = 'ENTER API KEY HERE';
// Optionally specify the target WhatsApp device ID connected to Wassenger
// you want to use for messages delivery(24 characters hexadecimal value)
const device = 'DEVICE ID GOES HERE';
// Define the headers for the API request
const headers = {
'Content-Type': 'application/json',
Authorization: `${token}`
};
// Define URLs for the Wassenger API
const baseUrl = 'https://api.wassenger.com/v1';
const url = `${baseUrl}/messages`;
const filesUrl = `${baseUrl}/files`;
const uploadFile = async url => {
const body = { url };
try {
const response = await axios.post(filesUrl, body, { headers });
return response.data.id;
} catch (error) {
// If the file already exists, obtain the file ID from the response
if (
error.response &&
error.response.status === 409 &&
error.response.data
) {
return error.response.data.meta.file;
}
console.error(
'Failed to upload file:',
error.response ? error.response.data : error
);
}
};
const normalizePhone = phone => {
return `+${phone.replace(/\D/g, '')}`;
};
const sendMessage = async (phone, message, file) => {
const body = {
phone,
message: message.trim(),
device,
media: { file }
};
try {
await axios.post(url, body, { headers });
console.log(` == > Message created: ${phone}`);
} catch (error) {
console.error(
'Failed to create message to ${phone}:',
error.response ? error.response.data : error
);
}
};
const main = async () => {
try {
if (!fileUrl) {
throw new Error('Missing required fileUrl');
}
console.log('=> Reading CSV file...');
const data = await fs.readFile(csvFile, 'utf-8');
const records = parse(data, { columns: false, skip_empty_lines: true });
console.log('=> Uploading file...');
const file = await uploadFile(fileUrl);
if (!file) {
throw new Error('Failed to upload file: check the error');
}
console.log('=> Processing messages...');
for (const [phone, message] of records) {
if (!phone || !message) {
continue;
}
const number = normalizePhone(phone);
if (number && number.length >= 8 && message) {
await sendMessage(number, message, file);
}
}
} catch (err) {
console.error('Error:', err);
}
};
main();
Brinque e execute código na nuvem sem instalar nenhum software no seu computador. Crie uma conta gratuita na Replit e comece em minutos
Substitua o token da API
No arquivo send_messages.js, certifique-se de ter definido o token da API da sua conta Wassenger:
// Replace this with your Wassenger API token
const token = 'ENTER API KEY HERE';
Opcionalmente, se você tiver múltiplos números de WhatsApp conectados na sua conta Wassenger, você pode especificar qual número de WhatsApp deseja usar para a entrega das mensagens informando o ID único do dispositivo Wassenger (valor hexadecimal de 24 caracteres) na linha a seguir:
// Optionally specify the target WhatsApp device ID connected to Wassenger
// you want to use for messages delivery(24 characters hexadecimal value)
const device = 'DEVICE ID GOES HERE';
🤩 🤖 Wassenger é uma plataforma completa de comunicação e solução de API para WhatsApp. Explore mais de 100+ casos de uso da API e automatize qualquer coisa no WhatsApp se inscrevendo para um teste gratuito e comece em minutos**!**
Execute o programa
️➡️ Execute o programa na nuvem ⬅️
const axios = require('axios');
const { parse } = require('csv-parse/sync');
// Set local path of the CSV file
// You can export any Excel/Google Sheets document as CSV
const csvFile = 'file.csv';
// Set the download URL of the file to be sent.
// The file must be publicly accessible from the Internet and return the file binary content
// You can also upload a local file in Google Drive and make the file publicly available for download
// Accepted file formats are: images(JPEG, WEBP, PNG), video(MP4), audio(MP3, OGG) and documents(PDF, XLSX, DOCX, ZIP...)
const fileUrl = 'https://picsum.photos/seed/picsum/600/500';
// Replace this with your Wassenger API token
// Get your API token here: https://app.wassenger.com/apikeys
const token = 'ENTER API KEY HERE';
// Optionally specify the target WhatsApp device ID connected to Wassenger
// you want to use for messages delivery(24 characters hexadecimal value)
const device = 'DEVICE ID GOES HERE';
// Define the headers for the API request
const headers = {
'Content-Type': 'application/json',
Authorization: `${token}`
};
// Define URLs for the Wassenger API
const baseUrl = 'https://api.wassenger.com/v1';
const url = `${baseUrl}/messages`;
const filesUrl = `${baseUrl}/files`;
const uploadFile = async url => {
const body = { url };
try {
const response = await axios.post(filesUrl, body, { headers });
return response.data.id;
} catch (error) {
// If the file already exists, obtain the file ID from the response
if (
error.response &&
error.response.status === 409 &&
error.response.data
) {
return error.response.data.meta.file;
}
console.error(
'Failed to upload file:',
error.response ? error.response.data : error
);
}
};
const normalizePhone = phone => {
return `+${phone.replace(/\D/g, '')}`;
};
const sendMessage = async (phone, message, file) => {
const body = {
phone,
message: message.trim(),
device,
media: { file }
};
try {
await axios.post(url, body, { headers });
console.log(` == > Message created: ${phone}`);
} catch (error) {
console.error(
'Failed to create message to ${phone}:',
error.response ? error.response.data : error
);
}
};
const main = async () => {
try {
if (!fileUrl) {
throw new Error('Missing required fileUrl');
}
console.log('=> Reading CSV file...');
const data = await fs.readFile(csvFile, 'utf-8');
const records = parse(data, { columns: false, skip_empty_lines: true });
console.log('=> Uploading file...');
const file = await uploadFile(fileUrl);
if (!file) {
throw new Error('Failed to upload file: check the error');
}
console.log('=> Processing messages...');
for (const [phone, message] of records) {
if (!phone || !message) {
continue;
}
const number = normalizePhone(phone);
if (number && number.length >= 8 && message) {
await sendMessage(number, message, file);
}
}
} catch (err) {
console.error('Error:', err);
}
};
main();
Execute o programa no seu computador
Antes de executar o programa, se você pretende enviar centenas de mensagens em sequência, recomendamos definir uma velocidade de entrega de mensagens por minuto mais baixa, não mais do que 2–3 mensagens por minuto, para evitar problemas de bloqueio devido às políticas anti-spam do WhatsApp. Saiba mais sobre melhores práticas e como reduzir riscos aqui.
Abra um terminal no diretório do seu projeto e execute o seguinte comando para executar o script send_messages.js:
node send_messages.js
Da mesma forma, você pode executar o script send_media.js para enviar mensagens com mídia:
node send_media.js
Se tudo estiver configurado corretamente, você deverá ver uma saída indicando que as mensagens foram criadas com sucesso:
=> Message created: +1234567890
=> Message created: +1234567890
=> Message created: +1234567890
Observe que as mensagens serão adicionadas à fila de entrega de mensagens do seu número e entregues de forma assíncrona em segundo plano ao longo do tempo, com base no limite de velocidade de entrega de mensagens por minuto da sua assinatura do número ou na velocidade de entrega configurada manualmente nas configurações do seu número.
As mensagens podem levar vários minutos ou horas, dependendo de quantas você criou, para serem efetivamente entregues aos números de telefone alvo via WhatsApp. Você pode monitorar o progresso da entrega das mensagens no painel web ou automaticamente usando eventos webhook.
Conclusão
Neste tutorial, você aprendeu como enviar mensagens para números de telefone armazenados em um arquivo CSV usando Node.js, a biblioteca axios e a Wassenger API.
Você pode atualizar o arquivo numbers.csv e executar o programa sempre que quiser enviar novas mensagens através do seu número WhatsApp conectado ao Wassenger.
Você pode personalizar ainda mais o script para lidar com colunas adicionais, criar diferentes tipos de mensagens ou integrá-lo ao seu software conforme necessário.
🤩 🤖 Wassenger é uma plataforma completa de comunicação e solução de API para WhatsApp. Explore mais de 100+ casos de uso da API e automatize qualquer coisa no WhatsApp se inscrevendo para um teste gratuito e comece em minutos**!**







