Como Enviar SMS de um Arquivo CSV com Node.js

May 19, 2021
Escrito por

Boa notícia:

A Twilio reduziu os preços de SMS no Brasil e você pode conferir a tabela atualizada de preços clicando aqui.

Uma das demandas que tenho recebido de desenvolvedores é sobre um jeito fácil para disparar mensagens de SMS, principalmente mensagens de notificações.

Por exemplo, um amigo possui uma clínica e deseja enviar mensagens avisando sobre uma consulta agendada para seus clientes no dia anterior ao agendamento, como forma de confirmar a consulta e evitar cancelamentos.

Para fazer isso, uma forma simples é construir uma planilha e disparar mensagens individuais para cada paciente. Você pode inclusive incluir informações específicas para cada uma das mensagens, informando nome do médico e horário, por exemplo.

Neste artigo vou cobrir um tutorial para fazer esse disparo através de um script local em Javascript.

Primeiros passos

Para que consiga rodar este tutorial, você vai precisar confirmar que possui algumas coisas:

  • Conta Twilio configurada com um número que possa enviar SMS;
  • Um projeto do Node.js configurado e com as chaves de acesso da Twilio salvas em variáveis de ambiente.

Crie uma conta Twilio e adquira um número para envio de SMS

No Brasil, até o momento da postagem deste artigo, a oferta para números móveis ocorre através de um gerente de contas da Twilio, porém você pode registrar um número dos Estados Unidos e utilizar para disparo de mensagens de texto. A diferença aqui é que você não conseguirá receber mensagens de retorno.

Configurando o projeto e as variáveis de ambiente do Node

Já que vamos utilizar o Node.js, é importante que você inicialize um projeto pelo npm para criar o arquivo de configuração que conterá todas as informações de bibliotecas e de execução do seu código.

Para começar, crie uma pasta para seu projeto, abra ela no terminal e execute o seguinte comando.

npm init

Ao executar o npm init siga todos os passos, informando o nome do seu projeto e continue até que seja criado o arquivo package.json

Como estaremos desenvolvendo um exemplo em Node.js e você vai consumir a API da Twilio para disparo das mensagens de texto, será necessário utilizar os dados da sua conta Account SID e o token de autenticação Auth Token. Ambos estão disponíveis no Console da Twilio.

Você vai precisar salvar essa informação em um arquivo de ambiente que carregaremos no nosso código utilizando a biblioteca dotenv. Copie essa informação do Console e salve em um arquivo .env com seguinte formato:

TWILIO_ACCOUNT_SID=[INSIRA_SUA_ACCOUNT_SID]
TWILIO_AUTH_TOKEN=[INSIRA_SUA_AUTH_TOKEN]
PHONE_NUMBER=[INSIRA_SEU_NUMERO_TWILIO]

Lembre-se de nunca salvar essa informação no seu repositório caso compartilhe este código na internet!

Além disso, vamos instalar também a biblioteca da Twilio e a biblioteca csvtojson para fazer a leitura de um arquivo de dados CSV.

Rode o comando a seguir para instalar as bibliotecas:

npm install dotenv twilio csvtojson --save

Pronto, agora temos a base para começar a programar. Crie um arquivo index.js para começarmos nosso código.

Lendo o CSV

O primeiro passo do nosso código é nos certificarmos que conseguimos carregar os dados que queremos processar e disparar a mensagem de SMS. Como vamos utilizar o formato CSV, que significa valores separados por vírgula, precisamos montar um arquivo neste padrão.

Como nosso exemplo é disparar um aviso de agendamento de uma clínica, nós vamos utilizar uma tabela contendo um número de celular, o nome do médico que irá atender e o horário da consulta. O arquivo lista.csv terá um formato parecido com o baixo:

telefone, nome, medico, horario
+5511998765432, Luís, Dr José, 15/maio às 19:00

Execute o código com o comando node index.js. Você verá no log o registro do arquivo no formato json, exibindo um vetor contendo um elemento com os dados necessários para montar a mensagem que desejamos enviar e o número de telefone do destinatário.

Exemplo do log de retorno com a leitura do arquivo CSV

Agora que temos a lista carregada, precisamos percorrer os elementos da lista e montar a mensagem que desejamos enviar para cada elemento.

No Javascript é possível percorrer elementos de um vetor utilizando a função forEach. Então criaremos o seguinte código, em substituição ao console.log do comando anterior:

        lista.forEach(item => {
            console.log(item);
        })

Veja que agora temos o elemento de forma individual, independente da lista.

O próximo passo é criar a mensagem de texto dentro desse loop, conforme o exemplo a seguir:

let mensagem = `Olá ${item.nome}, seu agendamento com ${item.medico} está confirmado para ${item.horario}.`;
console.log(mensagem);

Veja como ficou a mensagem de texto:

Log do registro do CSV com a mensagem personalizada montada com os dados exibidos

Disparando a mensagem

Agora que já temos a mensagem pronta, basta utilizarmos a API da Twilio para disparar as mensagens de SMS.

Dentro do loop que criamos para personalizar a mensagem, vamos inserir o código de disparo, mas antes disso, precisamos importar as bibliotecas dotenv e twilio no topo do arquivo:

const csv = require('csvtojson');
require("dotenv").config();

// Inicializar Twilio
const twilio = require('twilio');
const twilioClient = twilio( process.env.TWILIO_ACCOUNT_ID, process.env.TWILIO_AUTH_TOKEN);

csv()
    .fromFile('lista.csv')
    .then((lista) => {
        lista.forEach(async item => {
            console.log(item);
            let mensagem = `Olá ${item.nome}, seu agendamento com ${item.medico} está confirmado para ${item.horario}.`;
            console.log(mensagem);
            let sms = await twilioClient.messages.create({
                from: process.env.PHONE_NUMBER,
                to: item.telefone,
                body: mensagem
            });
            console.log(sms);
        })
    });

Ao executar o comando, você vai ver que foi criada a mensagem e enviada para uma fila de disparo.

Parte da tela do celular exibindo mensagem de SMS recebida.

Conclusão

Você pode utilizar um script simples para disparar mensagens de notificação. Se deseja disparar mensagens de SMS, basta adquirir um número dos Estados Unidos. Caso seja necessário enviar e receber mensagens, entre em contato com nosso time comercial.

Esse script também funciona para mensagens via WhatsApp! Se você já fez o processo de configuração do WhatsApp na Twilio, basta adicionar o prefixo whatsapp: no número do destinatário. Lembre-se também de criar e aprovar o template da mensagem que vai disparar.

Se você deseja enviar mensagens utilizando este tutorial, faça uma cópia do código-fonte no repositório do GitHub.

Este artigo foi útil para você ou gostaria de algum outro exemplo de código? Envie sua sugestão ou comentário para lleao [arroba] twilio.com.

Estou ansioso para saber o que você vai construir.