Uma planilha é onde vive grande parte dos dados operacionais, mas raramente é onde sua equipe está olhando. Quando algo muda — um negócio fecha, o estoque cai, uma fatura vence — as pessoas que precisam saber estão no Slack, em um CRM ou em outro app. Levar a atualização até lá geralmente fica por conta de alguém que se lembre de postá-la, ou de um Apps Script que dispara em um gatilho por tempo e quebra na próxima vez que uma coluna se move.
Neither holds up well. The manual version depends on someone being at their desk. The script version means you now own code — UrlFetchApp calls, hardcoded column indexes, a trigger to debug when it stops running — for what amounts to sending a formatted message.
O destino de webhook do Sheetgo elimina esse passo. Em vez de terminar um fluxo de trabalho em outra planilha, você o termina com uma requisição HTTP para o endpoint que escolher — um canal do Slack, um CRM, uma API interna, outra ferramenta de automação. O fluxo de trabalho que filtra seus dados os envia direto, na programação que você definir.
É uma inversão de como os webhooks funcionaram no Sheetgo até agora. Um webhook as a source envia dados para uma planilha a partir de um app externo; o destino de webhook envia dados para fora. Para mostrar como funciona, este guia constrói um do começo ao fim usando o Slack como exemplo — publicando em um canal um resumo semanal de vendas “closed won”. Você vai configurar a planilha de origem, os filtros, um app do Slack e o template do corpo da requisição, que é onde vai a maior parte do tempo de configuração (e onde uma regra falha em silêncio, sem nenhum erro no Slack nem no log de execução do Sheetgo). O destino de webhook está atualmente em beta.
Teste o Sheetgo Workflows de graça e crie seu primeiro destino de webhook.
O que a automação do Google Sheets para o Slack faz
A cada execução, o Sheetgo lê uma planilha de pipeline de vendas, mantém apenas os negócios marcados como Closed Won nos últimos sete dias e os publica em #sales-wins como um único resumo formatado:
Quatro componentes: a planilha de origem, dois processadores de filtro do Sheetgo, um app do Slack que fornece a URL receptora e o destino de webhook que faz a chamada.
Passo 1: a planilha de origem
We start with a spreadsheet named Sales_Pipeline, com negócios em diferentes estágios. Tem cinco negócios, com o nome do negócio, o valor, o representante atribuído, o status e a data de fechamento.
Além dessas cinco colunas, a planilha tem mais duas — Send e Digest. Ambas são fórmulas, não dados digitados, e são elas que transformam uma planilha de pipeline estática em algo sobre o qual a automação pode agir.
A coluna Send: escolher quais negócios são enviados
A coluna Send decide quais negócios chegam ao Slack. Em F2, insira esta fórmula e arraste para baixo:
=IF(AND($D2="Closed Won", $E2>=TODAY()-7), "YES", "")Um negócio é marcado como YES apenas quando o status é Closed Won e a data de fechamento está dentro dos últimos sete dias. Todo o resto fica em branco.
A alternativa óbvia é marcar os negócios como Notified manualmente depois de anunciados. Isso deixa de funcionar assim que a automação roda em uma programação, porque o Sheetgo não escreve de volta na planilha de origem: você teria que editar linhas manualmente após cada execução para evitar que os mesmos negócios sejam publicados duas vezes.
Uma janela de datas móvel resolve isso sozinha: cada execução pega apenas o que fechou desde a anterior. Este tutorial usa sete dias porque estamos enviando um relatório semanal, mas o número deve corresponder à frequência com que você executa a automação. Equipes de vendas que querem saber das vitórias na hora usariam TODAY()-1 e uma programação diária em vez disso.
Por isso o Sales_Pipeline também inclui a Fabrikam, um negócio Closed Won fechado em 2026-07-02. Ela está fora da janela de sete dias, então permanece em branco enquanto as duas vitórias recentes são marcadas como YES. Sem uma linha assim, você não consegue saber se o filtro realmente funciona ou apenas deixa tudo passar.
A coluna Digest: montar a mensagem do Slack na planilha
A coluna Digest monta a própria mensagem. Em G2, insira:
=ARRAYFORMULA(TEXTJOIN(CHAR(10),TRUE,IF($F$2:$F="YES","*"&$A$2:$A&"* · "&TEXT($B$2:$B,"$#,##0")&" · "&$C$2:$C,"")))É uma única célula — deixe G3 e as de baixo vazias. Ela percorre cada linha, mantém as marcadas como YES, formata cada uma em uma linha e as une com quebras de linha CHAR(10). O resultado fica assim:
*Acme Corp* · $5,000 · Sarah
*Vertex Labs* · $12,500 · Miguel
Os asteriscos são a marcação Markdown do Slack para negrito, então *Acme Corp* aparece como Acme Corp quando chega ao canal. TEXT($B$2:$B,"$#,##0") cuida da moeda, porque a fórmula lê o valor bruto da célula em vez do valor formatado que você vê na coluna B — sem isso, $5,000.00 acabaria no resumo como 5000.
Montar a mensagem na planilha em vez de no corpo da requisição do webhook é uma escolha deliberada — mantém o template JSON em um único placeholder e evita a parte da sintaxe que mais causa problemas.
Um aviso: como a fórmula do resumo fica em G2, o webhook a puxa da primeira linha que passa pelos seus filtros. Se essa linha mudar — alguém ordena a planilha, ou um negócio sai da janela — o resumo pode se deslocar. Para deixar isso pronto para produção, mova a fórmula para sua própria aba de linha única e aponte o fluxo de trabalho para ela.
Passo 2: criar o app do Slack e gerar a URL do webhook
Antes de construir qualquer coisa no Sheetgo, o Slack precisa de um lugar para receber a mensagem: um app do Slack com incoming webhooks ativados, que fornece uma única URL que aceita um payload JSON e o publica em um canal.
Comece criando o canal, se ele ainda não existir — aqui, #sales-wins. Ele precisa existir primeiro, porque o Slack pede que você escolha um durante a configuração.
1. Crie o app. Ir para Slack API: Your Apps e clique em Create an App. O Slack oferece alguns pontos de partida — AI agent, Starter app, From a manifest e Blank app. Escolha Blank app.
Dê um nome a ele (Sheetgo Alerts Testing funciona) e escolha seu workspace.
2. Ative os incoming webhooks. Na barra lateral esquerda, em Features, clique em Incoming Webhooks, e então mude Activate Incoming Webhooks para On. Você pode pular OAuth & Permissions por completo — ativar esse botão cuida da permissão, e o Slack adiciona um bot user automaticamente se o app não tiver um.
3. Adicione um webhook ao workspace. Role até Webhook URLs for Your Workspace e clique em Add New Webhook. O Slack pergunta em qual canal publicar — selecione #sales-wins e clique em Allow.
4. Copie a URL. Você volta à página Incoming Webhooks com uma nova linha mostrando a URL, o canal e quem a adicionou. Clique em Copy.
A URL está vinculada a um único canal — você não pode redirecioná-la adicionando um campo de canal ao payload, já que o Slack removeu isso para apps modernos. Para publicar em um segundo canal, gere um segundo webhook e adicione uma segunda conexão do Sheetgo. Trate essa URL como uma credencial: qualquer pessoa que a tenha pode publicar no seu canal como se fosse seu app, sem autenticação adicional.
Passo 3: montar o fluxo de trabalho do Google Sheets para o Slack
1. Crie um novo fluxo de trabalho. In your Sheetgo Workflows app, click + New → New Automation → Create a workflow.
2. Select the source. Na tela Select source, escolha Google Sheets, encontre Sales_Pipelinee selecione a aba com seus dados — aqui, Sheet1. Clique em Próxima etapa.
A etapa do processador de dados é opcional na maioria dos fluxos de trabalho. Aqui ela faz um trabalho real — sem ela, cada linha é enviada, inclusive os negócios ainda em negociação e os que foram perdidos. Adicionamos dois processadores, e a ordem importa.
3. Adicione Filter rows. Defina a condição como Column F : Send | Text is exactly | YES, clique em Confirm no cartão da condição e depois em Next step.
Isso reduz cinco negócios para dois. A Northwind ainda está em negociação, a Contoso foi perdida e a Fabrikam fechou fora da janela de sete dias — nenhum está marcado como YES, então nenhum chega ao Slack.
4. Adicione Filter columns. Na próxima tela do processador, clique em Filter columns e selecione Deal Name, Amount, Rep Name, and Digest. Deixe Status, Close Date e Send desmarcados.
Send é um apoio — ele impulsiona o filtro de linhas, não é para ser enviado a lugar nenhum. Status é redundante, já que toda linha que sobrevive é Closed Won por definição, e Close Date não aparece na mensagem do resumo. Remover essas colunas mantém o payload pequeno e legível quando você o inspeciona no próximo passo. A ordem importa: o filtro de linhas lê a coluna Send, então, se você filtrasse as colunas primeiro e removesse Send, o filtro de linhas não teria nada para comparar.
Uma nota prática: se você adicionar a coluna Digest à sua planilha depois de configurar este passo, o Sheetgo não vai saber dela. Clique em Sync columns para atualizar a lista e então marque-a. Pular isso é uma causa comum de mensagem vazia depois. Clique em Next step.
Passo 4: configurar o destino de webhook
Na tela de destino, selecione Webhook. O painel de configuração tem três partes: a URL da requisição, os cabeçalhos e o corpo da requisição.
1. Defina a URL da requisição. Deixe o método como POST e cole a URL do webhook do Slack. O menu suspenso também oferece PUT, PATCH e DELETE para outros endpoints, mas os incoming webhooks do Slack só aceitam POST.
2. Verifique os cabeçalhos. Content-Type: application/json já vem definido por padrão, que é o que o Slack exige.
3. Escreva o corpo da requisição. A nota acima do campo do corpo explica o básico: o corpo é um template processado quando a conexão roda, e você referencia a saída do fluxo de trabalho com DADOS para a tabela completa ou ROWS para um objeto por registro. Os placeholders vão entre chaves duplas, então um template que envia cada registro sobrevivente fica assim:
{"rows": {{ROWS}}}As chaves são fáceis de esquecer, e fazer isso causa uma falha difícil de diagnosticar. Escrever ROWS sem elas não é um placeholder, é JSON inválido — e, em vez de dar erro, o Sheetgo envia a requisição com o corpo vazio. O Slack a rejeita, nada aparece no canal e não há mensagem explicando o porquê. O mesmo vale para as aspas: {{ROWS}} renderiza um array JSON completo, incluindo seus colchetes, então escrever "rows": "{{ROWS}}" te daria uma string entre aspas contendo JSON em vez do próprio array. O painel diz isso diretamente — não coloque os placeholders entre aspas adicionais.
Inspecionar o payload antes de enviá-lo ao Slack
O Slack rejeita payloads malformados com uma simples invalid_payload e não mostra nada sobre o que recebeu, o que o torna um lugar ruim para acertar um template que você ainda está descobrindo. Um inspetor de requisições é mais fácil. Existem vários; este tutorial usa o Webhook.site.
Aberto webhook.site, copie a URL única que ele gera e cole-a no campo REQUEST URL no lugar da sua URL do Slack. Ele aceita qualquer payload e mostra o corpo bruto como chegou.
Com {"rows": {{ROWS}}} no corpo, clique em Review automation e em Finish and run. O payload chega como um rows array — um objeto por registro sobrevivente, com cada chave igual a um cabeçalho de coluna exatamente como está escrito na planilha, espaços incluídos:
{ "rows": [ { "Deal Name": "Acme Corp", "Amount": "$5,000.00", "Rep Name": "Sarah", "Digest": "*Acme Corp* · $5,000 · Sarah\n*Vertex Labs* · $12,500 · Miguel" }, { "Deal Name": "Vertex Labs", "Amount": "$12,500.00", "Rep Name": "Miguel", "Digest": "" } ]}Dois registros em vez de cinco, com Status e Send removidos. Repare que o resumo completo cai no campo Digest da primeira linha — essa grafia exata do cabeçalho é como você vai referenciá-lo a seguir, então precisa ser “Digest”, não “digest” nem “Message”.
Montar a mensagem do Slack e executar
Aponte a REQUEST URL de volta para o seu webhook do Slack e substitua o corpo por este template de Block Kit do Slack:
{ "text": "Closed Won this week", "blocks": [ { "type": "header", "text": {"type": "plain_text", "text": "🏆 Closed Won this week"} }, { "type": "section", "text": {"type": "mrkdwn", "text": {{ROWS[0]["Digest"]}}} }, { "type": "context", "elements": [{"type": "mrkdwn", "text": "Pushed by Sheetgo"}] } ]}
O {{ROWS[0]["Digest"]}} puxa todo o resumo formatado da primeira linha — e, seguindo a regra do painel, não vem entre aspas, porque é renderizado como uma string JSON entre aspas por conta própria.
Programar a automação
Para executá-la em uma programação em vez de manualmente, ative Enable automation triggers na tela de revisão e mude Run automatically para On. Em Trigger options você tem quatro opções, e qual delas escolher depende de como sua equipe trabalha:
- Com base em um cronograma executa a automação em um horário fixo — a cada hora, dia ou semana, nos dias que você escolher, no seu fuso horário. É a opção certa para um resumo, em que o objetivo é um resumo periódico, não um alerta instantâneo.
- On form submission executa-a sempre que um formulário do Sheetgo é enviado — útil quando a planilha é alimentada por um formulário e você quer que o alerta acompanhe a entrada.
- On workflow run encadeia esta automação a outra, de modo que ela dispara quando uma automação anterior é concluída. É assim que você constrói uma sequência — uma automação limpa e combina os dados, e esta envia o resultado.
- On webhook event executa a automação quando um webhook de entrada chega, deixando um sistema externo decidir quando enviar — por exemplo, um provedor de pagamentos registrando uma nova venda na planilha.
Estas três últimas não se encaixam neste resumo específico, mas mostram que a configuração pode se adaptar a qualquer arranjo que seu fluxo de trabalho precise. Para um resumo do Google Sheets para o Slack, escolha Com base em um cronograma, ajuste a frequência para semanal para corresponder à janela de sete dias, e escolha o horário e os dias.
Clique em Finish and run. A mensagem aparece em #sales-wins:
O que mais você pode enviar com um destino de webhook
Enviar Google Sheets para o Slack é o exemplo mais fácil de demonstrar, mas o destino de webhook envia uma requisição HTTP para qualquer endpoint que a aceite, então a mesma configuração funciona muito além das notificações de chat.
- Alertas de estoque baixo: filtre uma planilha de estoque para os itens abaixo do ponto de reposição e envie a lista para o seu canal de compras em uma programação diária.
- Resumos de faturas vencidas: filtre as faturas não pagas após o vencimento e envie um resumo semanal para o financeiro, com o texto controlado a partir da planilha.
- Outras APIs e ferramentas: o destino aceita POST, PUT, PATCH e DELETE com cabeçalhos personalizados, então você pode atualizar registros em um CRM, chamar uma API interna ou disparar uma execução em outra ferramenta.
Conclusão
O destino de webhook é o último passo de um fluxo de trabalho do Sheetgo, o que significa que todo o resto da plataforma continua disponível antes dele. Em uma única automação você pode mesclar várias planilhas regionais em uma, remover duplicatas, passar os dados pelo Processador de dados de IA, filtrar os registros de teste e então enviar o resultado ao Slack.
Você também pode combiná-lo com a direção de entrada, usando duas automações separadas. Um webhook as a source permite que um app externo envie dados para uma planilha sem a API do Google Sheets. Uma segunda automação lê essa planilha, processa-a e envia o resultado por meio de um destino de webhook. A planilha fica entre as duas como uma camada de processamento que sua equipe pode ler e editar.
Pronto para enviar Google Sheets para o Slack onde sua equipe já trabalha? Cadastre-se no Sheetgo e crie hoje seu primeiro destino de webhook.
