Integrar WhatsApp com Google Sheets é uma das automações mais pedidas por equipes de vendas e cobrança. Usando Google Apps Script e a ZAP API, você lê contatos da planilha e envia mensagens personalizadas — sem instalar nada, direto do navegador.
Preparar a planilha
Colunas: A (Nome), B (Telefone - formato 5511999998888), C (Mensagem - use {nome} como variável), D (Status), E (Data/hora envio).
Script completo para envio
var ZAP_TOKEN = 'tk_seu_token_aqui';
var ZAP_INSTANCE = 'inst_seu_id_aqui';
var BASE_URL = 'https://zap-api.tech/v1/instances/' + ZAP_INSTANCE;
function enviarMensagem(phone, mensagem) {
var options = {
method: 'post',
contentType: 'application/json',
headers: { 'Authorization': 'Bearer ' + ZAP_TOKEN },
payload: JSON.stringify({ phone: phone, type: 'text', body: mensagem }),
muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(BASE_URL + '/send', options);
var code = response.getResponseCode();
var body = JSON.parse(response.getContentText());
return code === 200
? { success: true, messageId: body.messageId }
: { success: false, error: body.message || 'Erro ' + code };
}
function enviarParaTodos() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var dados = sheet.getDataRange().getValues();
var enviados = 0, erros = 0;
for (var i = 1; i < dados.length; i++) {
var nome = dados[i][0];
var telefone = String(dados[i][1]).replace(/\D/g, '');
var mensagem = dados[i][2];
var statusAtual = dados[i][3];
if (!telefone || !mensagem || statusAtual === 'enviado') continue;
var msgFinal = mensagem.replace('{nome}', nome);
var resultado = enviarMensagem(telefone, msgFinal);
if (resultado.success) {
sheet.getRange(i + 1, 4).setValue('enviado');
sheet.getRange(i + 1, 5).setValue(new Date());
enviados++;
} else {
sheet.getRange(i + 1, 4).setValue('erro: ' + resultado.error);
erros++;
}
Utilities.sleep(1500);
}
SpreadsheetApp.getUi().alert('Enviados: ' + enviados + ' | Erros: ' + erros);
}
Enviar imagens e documentos
function enviarImagem(phone, imageUrl, legenda) {
var options = {
method: 'post',
contentType: 'application/json',
headers: { 'Authorization': 'Bearer ' + ZAP_TOKEN },
payload: JSON.stringify({ phone: phone, type: 'image', mediaUrl: imageUrl, caption: legenda || '' }),
muteHttpExceptions: true
};
return UrlFetchApp.fetch(BASE_URL + '/send', options).getResponseCode() === 200;
}
Menu personalizado no Google Sheets
function onOpen() {
SpreadsheetApp.getUi()
.createMenu('WhatsApp ZAP API')
.addItem('Enviar para todos', 'enviarParaTodos')
.addItem('Verificar status', 'verificarStatus')
.addToUi();
}
function verificarStatus() {
var options = {
method: 'get',
headers: { 'Authorization': 'Bearer ' + ZAP_TOKEN },
muteHttpExceptions: true
};
var response = UrlFetchApp.fetch(BASE_URL + '/status', options);
var data = JSON.parse(response.getContentText());
SpreadsheetApp.getUi().alert('Status: ' + data.status);
}
Agendamento automático
function criarAgendamento() {
var triggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < triggers.length; i++) {
if (triggers[i].getHandlerFunction() === 'enviarParaTodos')
ScriptApp.deleteTrigger(triggers[i]);
}
ScriptApp.newTrigger('enviarParaTodos')
.timeBased().everyDays(1).atHour(9).create();
SpreadsheetApp.getUi().alert('Envio agendado para todos os dias às 9h!');
}
FAQ
- Preciso saber programar?
O script é plug-and-play: cole no Apps Script, configure token e rode. - Quantas mensagens por dia?
Apps Script permite 20.000 chamadas HTTP/dia. Da parte da ZAP API, sem limite. - Funciona com planilha compartilhada?
Sim. O script roda na conta de quem executa. - Qual o custo?
Google Sheets é grátis. ZAP API: R$49/mês (1a instância), R$29/mês (3a+). Trial 7 dias grátis.