Como enviar uma mensagem SMS de uma planilha do Google

February 26, 2016
Escrito por

Como enviar uma mensagem SMS de uma planilha do Google

O Google Sheets vem com uma linguagem baseada em JavaScript chamada Apps Script. Neste tutorial, usaremos o Apps Script para enviar mensagens SMS para números de telefone armazenados em uma planilha do Google. As etapas levam menos de dez minutos para serem concluídas, mesmo que você nunca tenha escrito uma linha de código.

Você também pode estar interessado em Como limpar e validar números de telefone em uma planilha do Google. Com este tutorial, você pode descobrir quais números de telefone em sua planilha podem receber uma mensagem de texto antes de tentar enviá-la.

Os bits da Twilio

Você precisará de uma conta gratuita da Twilio. Se não tiver uma conta gratuita, cadastre uma aqui. Você pode fazer tudo isso neste tutorial com uma conta de avaliação, embora haja restrições quanto ao envio de mensagens de texto apenas para seu celular. (Se você atualizar sua conta, $ 20 compra cerca de 2.500 mensagens de texto nos Estados Unidos. Todos os preços das mensagens SMS podem ser encontrados aqui).

Assim que você tiver uma conta da Twilio, compre um número de telefone da Twilio habilitado para SMS. Em seguida, vá para o Dashboard Programmable SMS (SMS programável) e clique em Show API Credentials (Mostrar credenciais de API).

Exibindo as credenciais para acesso a API.

Mantenha seu número de telefone e credenciais à mão. Em um minuto, vamos colá-los em nosso código.

Os bits do Google

Vá para seu Google Drive e crie uma nova planilha. Crie cabeçalhos de coluna para:

  • Phone Number (Número de telefone)
  • Message Body (Corpo da mensagem)
  • Status

Adicione duas linhas com um número de telefone e corpo da mensagem. Preceda seu número de telefone com um ' (aspas simples) para dizer à planilha que a célula é uma string (você também pode formatar a coluna como "texto sem formatação"). Para evitar o spam de amigos e familiares, você pode usar seu número de celular duas vezes. Deixe o status em branco.

Tela do Google Sheets com a lista de celulares.

Com nossos dados colocados, estamos prontos para escrever o código. Clique em Tools (Ferramentas) -> Script Editor (Editor de scripts).

Tela do Google Sheets com o menu para abrir o editor de scripts.

O restante deste post orienta você pelo código para o envio de mensagens de texto da planilha. Se você é o tipo de pessoa que gosta de pular para o final do romance misterioso, ou se simplesmente não tem tempo para todo esse material de aprendizado, aqui está o produto final (anote os espaços reservados do Account SID (SID da conta), do Auth Token (token de autenticação) e do número de telefone da Twilio):

function sendSms(to, body) {
  var messages_url = "https://api.twilio.com/2010-04-01/Accounts/YOURACCOUNTSID/Messages.json";

  var payload = {
    "To": to,
    "Body" : body,
    "From" : "YOURTWILIONUMBER"
  };

  var options = {
    "method" : "post",
    "payload" : payload
  };

  options.headers = { 
    "Authorization" : "Basic " + Utilities.base64Encode("YOURACCOUNTSID:YOURAUTHTOKEN")
  };

  UrlFetchApp.fetch(messages_url, options);
}

function sendAll() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; 
  var numRows = sheet.getLastRow() - 1; 
  var dataRange = sheet.getRange(startRow, 1, numRows, 2) 
  var data = dataRange.getValues();

  for (i in data) {
    var row = data[i];
    try {
      response_data = sendSms(row[0], row[1]);
      status = "sent";
    } catch(err) {
      Logger.log(err);
      status = "error";
    }
    sheet.getRange(startRow + Number(i), 3).setValue(status);
  }
}

function myFunction() {
  sendAll();
}

Se quiser ver como chegamos a esse resultado, continue.

Envie um SMS do App Script

Escreveremos este código em duas etapas:

  1. Escreva uma função sendSms para enviar uma mensagem SMS.
  2. Escreva uma função sendAll para executar sendSms em cada número de telefone e corpo da mensagem na planilha.

Substitua as duas linhas de código em seu script por: 

function sendSms(to, body) {

}

function myFunction() {
  sendSms("(312) 313-1434", "Hello phone!");
}

Substitua esse (312) 313-1434 pelo seu número de celular.

O trabalho de sendSms é fazer uma solicitação HTTP POST para a API de mensagens da Twilio. Você não precisa saber o que isso significa para concluir este tutorial, mas pode pensar nele como o envio de um formulário "Send an Text Message" (Enviar uma mensagem de texto) com os campos To (Para), From (De), Body (Corpo), Account SID (SID da conta) e Auth Token (Token de autenticação).

Todo o código desta etapa entra na  função sendSms. Defina o URL para a API de mensagens da Twilio

var messagesUrl = "https://api.twilio.com/2010-04-01/Accounts/YOURACCOUNTSID/Messages.json";

Substitua o espaço reservado YOURACCOUNTSID pelo SID da sua conta no dashboard

Defina um "payload" descrevendo a mensagem de texto que usa os parâmetros da função sendSms para o "To" (Para) e para o "Body" (Corpo). 

var payload = {
  "To": to,
  "Body" : body,
  "From" : "YOURTWILIOPHONENUMBER"
};

Substitua o espaço reservado YOURTWILIONUMBER pelo seu número de telefone da Twilio.

Crie um hash de opções para informar ao App Script que esta é uma solicitação POST que usa o payload:

var options = {
  "method" : "post",
  "payload" : payload
};

Adicione cabeçalhos às opções para autorizar a solicitação com seu SID da conta e token de autenticação no dashboard:

options.headers = {    
  "Authorization" : "Basic " + Utilities.base64Encode("YOURACCOUNTSID:YOURAUTHTOKEN")
};

Por fim, execute a solicitação HTTP. 

UrlFetchApp.fetch(messagesUrl, options);

Salve o arquivo e execute o script. Será solicitado que você autorize seu app na primeira vez em que ele for executado. Se tudo correr bem, seu telefone acenderá com a mensagem.

Envie mensagens de texto da planilha

Não é muito prático codificar números de telefone no script. Vamos adicionar uma função para ler o número de telefone e o corpo da mensagem da planilha e, em seguida, passar esses dados para sendSms.

Substitua o que temos em myFunction por: 

function myFunction() {
  sendAll();
}

Imediatamente acima de myFunction (e abaixo de sendSms), crie a função  sendAll. O restante do código vai aqui. 

function sendAll() {

}

Obtenha os dados da sua planilha:

var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow() - 1; 
var dataRange = sheet.getRange(startRow, 1, numRows, 2) 
var data = dataRange.getValues();

Cole o código abaixo que vai: 

  • iterar por meio dos dados
  • tentar enviar um SMS para o número de telefone ( linha[0]) com o corpo da mensagem ( linha[1])
  • definir um status de "enviado" se a solicitação for bem-sucedida
  • registrar o erro e definir o status como "error" se a solicitação gerar um erro
  • atualizar a coluna de status adequadamente
for (i in data) {
  var row = data[i];
  try {
    response_data = sendSms(row[0], row[1]);
    status = "sent";
  } catch(err) {
    Logger.log(err);
    status = "error";
  }
  sheet.getRange(startRow + Number(i), 3).setValue(status);
}

Execute seu app novamente! Você precisará autorizá-lo novamente, pois agora ele também está tentando acessar sua planilha.

Vamos em frente

O Google Sheets e o Apps Script oferecem uma quantidade surpreendente de funcionalidades para uma linguagem de programação que não requer instalação ou configuração. Se você achou isso útil, talvez queira conferir Como limpar e validar números de telefone em uma planilha do Google com o qual você poderia validar uma planilha inteira cheia de números de telefone e responder a perguntas como "este é um telefone celular ou uma linha fixa?". 

Se você quiser saber mais sobre a API de mensagens, confira estes documentos:

Se você tiver alguma dúvida ou elaborar casos de uso interessantes para enviar textos de uma planilha, eu adoraria saber mais sobre isso. Você pode me encontrar em lleao@twilio.com ou @luisleao.

Este artigo foi traduzido do original "How to Send SMS from a Google Spreadsheet". Enquanto melhoramos nossos processos de tradução, adoraríamos receber seus comentários em help@twilio.com - contribuições valiosas podem render brindes da Twilio.