Versão 3.5 Pro: Transcrição de Áudio com IA, Piloto Automático e Atalhos para Disparo de Fluxos em 1-Clique!
Automação de Vendas Completa para WhatsApp Web

A Extensão definitiva do vendedor que usa o WhatsApp Web

A ferramenta definitiva para vendedores e equipes de vendas. Transcreva áudios do WhatsApp com o Gemini Multimodal sem precisar ouvir, qualifique 50 leads do dia em 1 clique e receba alertas nativos no Chrome na hora exata do follow-up.

Ver Guia de Instalação (3 min)
🎙️ Áudio em Texto
Gemini 2.5 Multimodal
⚡ Lote com IA
Enriquecimento em massa
🤖 Follow-up IA
Piloto automático
⚡ Disparo 1-Clique
Sequências prontas
🛡️ Anti-Ban Jitter
Intervalos randômicos
Cinco Super-Poderes de Vendas

Construído para Atendimentos Ágeis de Alta Conversão

Novos recursos desenvolvidos sob medida para economizar horas do atendente, padronizar abordagens comerciais e nunca mais perder vendas.

1. Transcrição de Áudio

Chega de ouvir áudios longos. O Gemini Multimodal transcreve arquivos de voz e sintetiza a intenção comercial na planilha.

Grava transcrição no Resumo.

2. Enriquecimento em Lote

Escaneie até 50 conversas do dia e deixe o Gemini analisar todas em segundo plano antes de salvar sem contatos duplicados.

Economiza 1h diária por vendedor.

3. Lembretes no Chrome

Agende lembretes rápidos (+2h, Amanhã 9h). O navegador emite um alarme no computador mesmo com o WhatsApp fechado.

Salva na Coluna I da planilha.

4. Follow-up com IA

Envie mensagens no chat com IA. Filtre por etiquetas ou nomes, escolha prompts ou Spintax A/B e conte com anti-ban.

Com Smart Stop Anti-Vácuo.
Novo no v3.5

5. Atalhos de Fluxos 1-Clique

Dispare sequências inteiras pré-configuradas (boas-vindas, proposta, chave PIX, quebra de objeções) com variáveis e digitação humana.

Zero digitação repetitiva.
Fixa / Side Panel

6. Barra Lateral Fixa (Side Panel)

Opção de fixar o CRM na lateral do Chrome. A janela não fecha ao clicar no WhatsApp Web, permitindo trabalho contínuo lado a lado!

Alterne entre Popup e Painel Fixo.
Simulador Interativo v3.5

Teste Todos os Novos Recursos

Alterne entre as abas abaixo para ver como cada ferramenta opera na extensão real do Chrome:

1. Resumo, Score e Tags por IA

Analisa as mensagens escritas com o Gemini 2.5 Flash.

2. Transcrição de Áudio com Gemini

Extrai áudios do WhatsApp e gera texto + intenção de compra.

3. Enriquecimento de Lote com IA

Qualifica múltiplos contatos simultaneamente sem duplicados.

4. Alarme e Lembrete no Chrome

Dispara notificações nativas do Chrome com link direto para o chat.

5. Follow-up via Mensagem com IA

Disparo contextual no WhatsApp com filtro por tag e anti-ban.

6. Atalhos de Fluxos (1-Clique)

Novo

Envie sequências completas de mensagens com variáveis dinâmicas e cadência humana.

7. Barra Lateral Fixa (Side Panel)

Novo

Use o CRM fixo na lateral do Chrome sem fechar ao alternar de chat.

Agilidade Absoluta para o Atendente Comercial:

Com apenas um clique no atalho rápido (ex: Boas-Vindas, Envio de Proposta, Dados PIX, Quebra de Objeções), a extensão envia toda a sequência cadenciada, substituindo tags como {nome}, {vendedor} e {saudacao} com pausas e digitação real.

⚡ Disparo em 1 Clique🧩 Variáveis Dinâmicas⏱️ Cadência Humana Anti-Spam✏️ Editor de Novos Fluxos
Formato de Exibição:
WA CRM Prov3.5
👤 Atendente: Carlos
Planilha Conectada
Disparo de Fluxos em 1-Clique
Selecione o atalho pré-configurado:
Sequência:⚡ Boas-Vindas & Qualificação⏱️ 2s pausa
Passo 1 de 3
"Boa tarde, Dra.! Tudo bem? Me chamo Carlos da equipe de atendimento."
Passo 2 de 3⏱️ +2s cadência
"Vi que você entrou em contato para saber mais sobre o CRM para WhatsApp Web e integração com Google Sheets."
Passo 3 de 3⏱️ +2s cadência
"Para te direcionar melhor: qual o tamanho da sua equipe e o que você mais precisa automatizar hoje?"
Chat WhatsApp: Dra. Camila Ribeiro
Ao Vivo
Dra. Camila RibeiroOlá! Gostaria de saber como funciona o CRM e valores para nossa equipe.14:15
Arquitetura de Alto Nível

Como Levar o Follow-up ao Estado da Arte

6 pilares essenciais desenvolvidos nesta extensão para maximizar taxa de resposta, eliminar constrangimentos e garantir proteção absoluta contra bloqueios.

1

Smart Stop (Anti-Vácuo Reverso)

Antes de disparar, o script verifica se a última mensagem no chat partiu do lead. Se o cliente já respondeu, o disparo é abortado automaticamente, evitando mensagens redundantes ou gafes comerciais.

🛡️ Zero mensagens fora de hora.
2

Jitter Semântico & Prompt Contextual

Em vez de disparar cópias idênticas, o Gemini 2.5 lê o contexto recente da conversa e gera uma mensagem única por lead. O algoritmo anti-spam do WhatsApp nunca identifica padrões hash repetidos.

✨ 100% humanizado e personalizado.
3

Pausas Randômicas & Simulação de Digitação

O motor emula eventos de digitação reais na caixa de texto do WhatsApp Web por 2.5s e introduz pausas estocásticas (ex: 15s a 35s), tornando o comportamento indistinguível de um atendente humano.

⌨️ Simula digitação humana nativa.
4

Janela Operacional & Horário Comercial

Trava de segurança que impede envios após as 19h ou em domingos. Follow-ups enviados em horários inconvenientes aumentam denúncias de spam e afetam a taxa de conversão.

⏰ Respeito ao descanso do cliente.
5

Filtro de Desinteresse & Blacklist

A IA analisa se o lead já expressou recusa explícita ("já fechei com outro", "favor não mandar mensagem", "cancelar") e impede qualquer nova abordagem automática naquele contato.

🚫 Proteção contra denúncias.
6

Registro Multietapas no Google Sheets

Ao disparar o follow-up, a extensão pode registrar na Coluna I o carimbo da etapa (ex: "Follow-up #1 enviado em 07/10 às 15:30"), permitindo acompanhamento gerencial do funil em tempo real.

📊 Sincronização direta na planilha.
Instalação Expressa

Como Instalar e Usar em Menos de 3 Minutos

Configure uma única vez e compartilhe com toda a equipe.

1

Criar a Planilha no Google Sheets & Apps Script

  1. Abra o Google Sheets e crie uma nova planilha em branco.
  2. No menu superior, vá em Extensões > Apps Script.
  3. Apague o código existente e cole o código completo do Apps Script v3.5 (logo abaixo).
  4. Clique no botão azul Implantar > Nova implantação.
  5. Selecione o tipo App da Web. Em "Quem pode acessar", escolha Qualquer pessoa.
  6. Copie a URL do App da Web gerada (terminada em /exec).
2

Carregar a Extensão no Google Chrome

  1. Baixe o arquivo whatsapp-crm-extension-ia-pro-v3.5.zip clicando no botão de download.
  2. Descompacte a pasta no seu computador.
  3. No Chrome, acesse chrome://extensions/ e ative o Modo do desenvolvedor no canto superior direito.
  4. Clique em Carregar sem compactação e selecione a pasta extraída.
  5. Fixe a extensão na barra do navegador clicando no ícone do quebra-cabeça 🧩.
3

Configurar URL e Chave do Gemini

  1. Clique com o botão direito no ícone da extensão e clique em Opções (ou na engrenagem ⚙️).
  2. Cole a URL do Web App e coloque o nome do vendedor/atendente.
  3. (Opcional para IA): Cole sua chave gratuita do Gemini obtida em aistudio.google.com.
  4. Clique em Salvar Configurações. Pronto! Abra o WhatsApp Web e aproveite.

Código do Google Apps Script v3.5 (com IA e Follow-up)

Cria automaticamente as colunas de Resumo IA (Col F), Score IA (Col G), Etiquetas (Col H) e Follow-up (Col I).

Código.gs (Versão 3.5 Pro Completa)
/**
 * WA TO SHEETS CRM - BACKEND COM SUPORTE A IA GEMINI & FOLLOW-UP
 * Versão 3.5 - Resumo IA, Score de Vendas, Etiquetas e Agendamento de Follow-up
 */

function jsonResponse(data) {
  return ContentService.createTextOutput(JSON.stringify(data))
    .setMimeType(ContentService.MimeType.JSON);
}

function cleanPhone(phone) {
  if (!phone) return '';
  return String(phone).replace(/\D/g, '');
}

function doGet(e) { return handleRequest(e); }
function doPost(e) { return handleRequest(e); }

function handleRequest(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var params = (e && e.parameter) || {};
  var postData = null;
  if (e && e.postData && e.postData.contents) {
    try { postData = JSON.parse(e.postData.contents); } catch(err) {}
  }
  
  var action = (postData && postData.action) || params.action;
  var nameCol = parseInt((postData && postData.nameCol) || params.nameCol) || 1; // Col A
  var phoneCol = parseInt((postData && postData.phoneCol) || params.phoneCol) || 2; // Col B
  var dateCol = parseInt((postData && postData.dateCol) || params.dateCol) || 3; // Col C
  var notesCol = parseInt((postData && postData.notesCol) || params.notesCol) || 4; // Col D
  var sellerCol = parseInt((postData && postData.sellerCol) || params.sellerCol) || 5; // Col E
  var summaryCol = parseInt((postData && postData.summaryCol) || params.summaryCol) || 6; // Col F (IA)
  var scoreCol = parseInt((postData && postData.scoreCol) || params.scoreCol) || 7; // Col G (IA)
  var tagCol = parseInt((postData && postData.tagCol) || params.tagCol) || 8; // Col H (IA)
  var followupCol = parseInt((postData && postData.followupCol) || params.followupCol) || 9; // Col I (Follow-up)

  // Auto-cria cabeçalhos se a planilha for nova
  if (sheet.getLastRow() === 0) {
    sheet.appendRow([
      "Nome do Lead", "Telefone", "Data/Hora", "Origem / Observações", 
      "Vendedor / Atendente", "Resumo IA", "Score IA", "Etiqueta WhatsApp", "Lembrete / Follow-up"
    ]);
    sheet.getRange(1, 1, 1, 9).setFontWeight("bold").setBackground("#e2e8f0");
  }

  try {
    if (action === 'test') {
      return jsonResponse({
        status: "success",
        message: "Conexão com Google Sheets bem-sucedida!",
        sheetName: sheet.getName(),
        totalRows: sheet.getLastRow()
      });
    }

    if (action === 'get_phones') {
      var data = sheet.getDataRange().getValues();
      var phones = [];
      for (var i = 1; i < data.length; i++) {
        var p = cleanPhone(data[i][phoneCol - 1]);
        if (p) phones.push(p);
      }
      return jsonResponse({ status: "success", total: phones.length, phones: phones });
    }

    if (action === 'batch_add') {
      var leads = (postData && postData.leads) || [];
      if (typeof leads === 'string') {
        try { leads = JSON.parse(leads); } catch(err) { leads = []; }
      }
      if (!leads || leads.length === 0) return jsonResponse({ status: "error", message: "Nenhum lead fornecido." });

      var defaultSeller = (postData && postData.seller) || params.seller || "Equipe";
      var existingData = sheet.getDataRange().getValues();
      var existingPhones = {};
      for (var r = 1; r < existingData.length; r++) {
        var existingP = cleanPhone(existingData[r][phoneCol - 1]);
        if (existingP) {
          existingPhones[existingP] = true;
          if (existingP.length >= 8) existingPhones[existingP.slice(-8)] = true;
          if (existingP.length >= 9) existingPhones[existingP.slice(-9)] = true;
        }
      }

      var addedCount = 0;
      var duplicateCount = 0;
      var rowsToAppend = [];
      var maxCol = Math.max(nameCol, phoneCol, dateCol, notesCol, sellerCol, summaryCol, scoreCol, tagCol, followupCol, 9);
      var nowStr = Utilities.formatDate(new Date(), Session.getScriptTimeZone() || "GMT-3", "dd/MM/yyyy HH:mm");

      for (var k = 0; k < leads.length; k++) {
        var lead = leads[k];
        var leadName = String(lead.name || '').trim();
        var leadPhone = String(lead.phone || '').trim();
        var rawClean = cleanPhone(leadPhone);
        if (!rawClean && !leadName) continue;

        var isDuplicate = false;
        if (rawClean) {
          if (existingPhones[rawClean]) isDuplicate = true;
          if (!isDuplicate && rawClean.length >= 8 && existingPhones[rawClean.slice(-8)]) isDuplicate = true;
          if (!isDuplicate && rawClean.length >= 9 && existingPhones[rawClean.slice(-9)]) isDuplicate = true;
        }

        if (isDuplicate) {
          duplicateCount++;
        } else {
          if (rawClean) {
            existingPhones[rawClean] = true;
            if (rawClean.length >= 8) existingPhones[rawClean.slice(-8)] = true;
          }
          var row = [];
          for (var c = 0; c < maxCol; c++) row[c] = "";
          row[nameCol - 1] = leadName;
          row[phoneCol - 1] = leadPhone;
          if (dateCol > 0) row[dateCol - 1] = lead.date || nowStr;
          if (notesCol > 0) row[notesCol - 1] = String(lead.notes || 'WhatsApp Web').trim();
          if (sellerCol > 0) row[sellerCol - 1] = String(lead.seller || defaultSeller).trim();
          if (summaryCol > 0 && lead.aiSummary) row[summaryCol - 1] = lead.aiSummary;
          if (scoreCol > 0 && lead.aiScore) row[scoreCol - 1] = lead.aiScore;
          if (tagCol > 0 && lead.aiTag) row[tagCol - 1] = lead.aiTag;
          if (followupCol > 0 && lead.followup) row[followupCol - 1] = lead.followup;

          rowsToAppend.push(row);
          addedCount++;
        }
      }

      if (rowsToAppend.length > 0) {
        var startRow = sheet.getLastRow() + 1;
        sheet.getRange(startRow, 1, rowsToAppend.length, rowsToAppend[0].length).setValues(rowsToAppend);
      }

      return jsonResponse({ status: "success", addedCount: addedCount, duplicateCount: duplicateCount });
    }

    if (action === 'add') {
      var name = (postData && postData.name) || params.name || '';
      var phone = (postData && postData.phone) || params.phone || '';
      var notes = (postData && postData.notes) || params.notes || 'WhatsApp Web';
      var seller = (postData && postData.seller) || params.seller || 'Equipe';
      var aiSummary = (postData && postData.aiSummary) || params.aiSummary || '';
      var aiScore = (postData && postData.aiScore) || params.aiScore || '';
      var aiTag = (postData && postData.aiTag) || params.aiTag || '';
      var followup = (postData && postData.followup) || params.followup || '';
      var force = (postData && postData.force) || params.force === 'true';
      var rawClean = cleanPhone(phone);

      if (!force && rawClean) {
        var existingData = sheet.getDataRange().getValues();
        for (var i = 1; i < existingData.length; i++) {
          var rowP = cleanPhone(existingData[i][phoneCol - 1]);
          if (rowP === rawClean || (rawClean.length >= 8 && rowP.slice(-8) === rawClean.slice(-8))) {
            return jsonResponse({ status: "already_exists", row: i + 1 });
          }
        }
      }

      var maxCol = Math.max(nameCol, phoneCol, dateCol, notesCol, sellerCol, summaryCol, scoreCol, tagCol, followupCol, 9);
      var newRow = [];
      for (var i = 0; i < maxCol; i++) newRow[i] = "";
      newRow[nameCol - 1] = name;
      newRow[phoneCol - 1] = phone;
      if (dateCol > 0) newRow[dateCol - 1] = Utilities.formatDate(new Date(), Session.getScriptTimeZone() || "GMT-3", "dd/MM/yyyy HH:mm");
      if (notesCol > 0) newRow[notesCol - 1] = notes;
      if (sellerCol > 0) newRow[sellerCol - 1] = seller;
      if (summaryCol > 0) newRow[summaryCol - 1] = aiSummary;
      if (scoreCol > 0) newRow[scoreCol - 1] = aiScore;
      if (tagCol > 0) newRow[tagCol - 1] = aiTag;
      if (followupCol > 0) newRow[followupCol - 1] = followup;

      sheet.appendRow(newRow);
      return jsonResponse({ status: "success", row: sheet.getLastRow() });
    }

    return jsonResponse({ status: "invalid_action" });
  } catch(err) {
    return jsonResponse({ status: "error", message: err.toString() });
  }
}
Como obter a chave de API gratuita do Gemini:Acesse aistudio.google.com, clique em "Get API Key" e copie. Cole nas opções da extensão. O limite gratuito permite milhares de resumos e transcrições por mês sem nenhum custo.

Comece a Automatizar seus Leads Hoje Mesmo

Baixe o pacote da extensão e conecte sua equipe comercial ao WhatsApp Web e Google Sheets com o poder da Inteligência Artificial.