Une feuille de calcul, c’est là que vit une grande partie des données opérationnelles, mais rarement là où votre équipe regarde. Quand quelque chose change — une affaire se conclut, le stock baisse, une facture arrive à échéance — les personnes qui doivent le savoir sont dans Slack, un CRM ou une autre app. Faire remonter l’information incombe généralement à quelqu’un qui pense à la publier, ou à un Apps Script déclenché par une minuterie qui casse dès qu’une colonne bouge.
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.
La destination de webhook de Sheetgo supprime cette étape. Au lieu de terminer un workflow dans une autre feuille de calcul, vous le terminez par une requête HTTP vers l’endpoint de votre choix — un canal Slack, un CRM, une API interne, un autre outil d’automatisation. Le workflow qui filtre vos données les envoie directement, selon la planification que vous définissez.
C’est une inversion de la façon dont les webhooks ont fonctionné dans Sheetgo jusqu’ici. Un webhook as a source envoie des données vers une feuille de calcul depuis une app externe ; la destination de webhook envoie les données vers l’extérieur. Pour montrer comment cela fonctionne, ce guide en construit une de bout en bout en prenant Slack comme exemple — en publiant dans un canal un récapitulatif commercial hebdomadaire « closed won ». Vous configurerez la feuille source, les filtres, une app Slack et le modèle de corps de requête, là où passe l’essentiel du temps de configuration (et où une règle échoue en silence, sans aucune erreur dans Slack ni dans le journal d’exécution de Sheetgo). La destination de webhook est actuellement en bêta.
Essayez Sheetgo Workflows gratuitement et créez votre première destination de webhook.
Ce que fait l’automatisation Google Sheets vers Slack
À chaque exécution, Sheetgo lit une feuille de pipeline commercial, ne garde que les affaires marquées Closed Won sur les sept derniers jours et les publie dans #sales-wins sous forme d’un seul récapitulatif mis en forme :
Quatre composants : la feuille de calcul source, deux processeurs de filtre Sheetgo, une app Slack qui fournit l’URL de réception et la destination de webhook qui effectue l’appel.
Étape 1 : la feuille de calcul source
We start with a spreadsheet named Sales_Pipeline, avec des affaires à différents stades. Elle contient cinq affaires, avec le nom de l’affaire, le montant, le commercial attribué, le statut et la date de clôture.
À côté de ces cinq colonnes, la feuille en compte deux autres — Send et Digest. Ce sont des formules, pas des données saisies, et ce sont elles qui transforment une feuille de pipeline statique en quelque chose que l’automatisation peut exploiter.
La colonne Send : choisir quelles affaires sont envoyées
La colonne Send décide quelles affaires atteignent Slack. Dans F2, saisissez cette formule et étirez-la vers le bas :
=IF(AND($D2="Closed Won", $E2>=TODAY()-7), "YES", "")Une affaire est marquée YES uniquement quand le statut est Closed Won et que la date de clôture tombe dans les sept derniers jours. Tout le reste reste vide.
L’alternative évidente est de marquer les affaires comme Notified à la main une fois annoncées. Cela ne tient plus dès que l’automatisation s’exécute selon une planification, car Sheetgo ne réécrit pas dans la feuille source : vous devriez modifier les lignes manuellement après chaque exécution pour éviter que les mêmes affaires soient publiées deux fois.
Une fenêtre de dates glissante s’en charge toute seule : chaque exécution ne reprend que ce qui a été clôturé depuis la précédente. Ce tutoriel utilise sept jours car nous envoyons un rapport hebdomadaire, mais ce nombre doit correspondre à la fréquence d’exécution de l’automatisation. Les équipes commerciales qui veulent connaître les gains immédiatement utiliseraient TODAY()-1 et une planification quotidienne à la place.
C’est aussi pourquoi Sales_Pipeline inclut Fabrikam, une affaire Closed Won clôturée le 2026-07-02. Elle est en dehors de la fenêtre de sept jours, donc elle reste vide tandis que les deux gains récents sont marqués YES. Sans une ligne comme celle-ci, impossible de savoir si le filtre fonctionne vraiment ou s’il laisse simplement tout passer.
La colonne Digest : construire le message Slack dans la feuille
La colonne Digest assemble le message lui-même. Dans G2, saisissez :
=ARRAYFORMULA(TEXTJOIN(CHAR(10),TRUE,IF($F$2:$F="YES","*"&$A$2:$A&"* · "&TEXT($B$2:$B,"$#,##0")&" · "&$C$2:$C,"")))C’est une seule cellule — laissez G3 et les suivantes vides. Elle parcourt chaque ligne, garde celles marquées YES, met chacune en forme sur une ligne et les joint avec des sauts de ligne CHAR(10). Le résultat ressemble à ceci :
*Acme Corp* · $5,000 · Sarah
*Vertex Labs* · $12,500 · Miguel
Les astérisques sont la syntaxe Markdown de Slack pour le gras, donc *Acme Corp* s’affiche comme Acme Corp une fois arrivé dans le canal. TEXT($B$2:$B,"$#,##0") gère la devise, car la formule lit la valeur brute de la cellule plutôt que la valeur mise en forme visible dans la colonne B — sans cela, $5,000.00 finirait dans le récapitulatif sous la forme 5000.
Construire le message dans la feuille de calcul plutôt que dans le corps de la requête du webhook est un choix délibéré — cela réduit le modèle JSON à un seul espace réservé et évite la partie de la syntaxe la plus problématique.
Un point d’attention : comme la formule du récapitulatif se trouve en G2, le webhook la récupère dans la première ligne qui passe vos filtres. Si cette ligne change — quelqu’un trie la feuille, ou une affaire sort de la fenêtre — le récapitulatif peut se déplacer. Pour un usage en production, déplacez la formule dans son propre onglet à ligne unique et pointez-y le workflow.
Étape 2 : créer l’app Slack et générer l’URL du webhook
Avant de construire quoi que ce soit dans Sheetgo, Slack a besoin d’un endroit pour recevoir le message : une app Slack avec les incoming webhooks activés, qui vous donne une URL unique acceptant une charge JSON et la publiant dans un canal.
Commencez par créer le canal s’il n’existe pas encore — ici, #sales-wins. Il doit exister au préalable, car Slack vous demande d’en choisir un lors de la configuration.
1. Créez l’app. Aller à Slack API: Your Apps et cliquez sur Create an App. Slack propose quelques points de départ — AI agent, Starter app, From a manifest et Blank app. Choisissez Blank app.
Donnez-lui un nom (Sheetgo Alerts Testing convient) et choisissez votre workspace.
2. Activez les incoming webhooks. Dans la barre latérale gauche, sous Features, cliquez sur Incoming Webhooks, puis basculez Activate Incoming Webhooks sur On. Vous pouvez ignorer entièrement OAuth & Permissions — activer ce commutateur gère l’autorisation, et Slack ajoute automatiquement un bot user si l’app n’en a pas.
3. Ajoutez un webhook au workspace. Faites défiler jusqu’à Webhook URLs for Your Workspace et cliquez sur Add New Webhook. Slack demande dans quel canal publier — sélectionnez #sales-wins et cliquez sur Allow.
4. Copiez l’URL. Vous revenez à la page Incoming Webhooks avec une nouvelle ligne indiquant l’URL, le canal et qui l’a ajoutée. Cliquez sur Copy.
L’URL est liée à un seul canal — vous ne pouvez pas la rediriger en ajoutant un champ de canal à la charge, car Slack a supprimé cela pour les apps modernes. Pour publier dans un second canal, générez un second webhook et ajoutez une seconde connexion Sheetgo. Traitez cette URL comme un identifiant : quiconque la possède peut publier dans votre canal au nom de votre app, sans autre authentification.
Étape 3 : construire le workflow Google Sheets vers Slack
1. Créez un nouveau workflow. In your Sheetgo Workflows app, click + New → New Automation → Create a workflow.
2. Select the source. Sur l’écran Select source, choisissez Google Sheets, trouvez Sales_Pipelineet sélectionnez l’onglet contenant vos données — ici, Sheet1. Cliquez sur Prochaine étape.
L’étape du processeur de données est facultative dans la plupart des workflows. Ici, elle fait un vrai travail — sans elle, chaque ligne est envoyée, y compris les affaires encore en négociation et celles perdues. Nous ajoutons deux processeurs, et l’ordre compte.
3. Ajoutez Filter rows. Définissez la condition sur Column F : Send | Text is exactly | YES, cliquez sur Confirm sur la carte de condition, puis sur Next step.
Cela réduit cinq affaires à deux. Northwind est encore en négociation, Contoso a été perdue et Fabrikam a été clôturée hors de la fenêtre de sept jours — aucune n’est marquée YES, donc aucune n’atteint Slack.
4. Ajoutez Filter columns. Sur l’écran de processeur suivant, cliquez sur Filter columns et sélectionnez Deal Name, Amount, Rep Name, and Digest. Laissez Status, Close Date et Send décochés.
Send est un échafaudage — elle alimente le filtre de lignes, elle n’est pas censée être envoyée. Status est redondant, puisque toute ligne restante est Closed Won par définition, et Close Date n’apparaît pas dans le message récapitulatif. Les retirer garde la charge petite et lisible quand vous l’inspectez à l’étape suivante. L’ordre compte : le filtre de lignes lit la colonne Send, donc si vous filtriez d’abord les colonnes et supprimiez Send, le filtre de lignes n’aurait plus rien à comparer.
Une remarque pratique : si vous ajoutez la colonne Digest à votre feuille après avoir configuré cette étape, Sheetgo ne la connaîtra pas. Cliquez sur Sync columns pour actualiser la liste, puis cochez-la. Sauter cela est une cause fréquente de message vide par la suite. Cliquez sur Next step.
Étape 4 : configurer la destination de webhook
Sur l’écran de destination, sélectionnez Webhook. Le panneau de configuration comporte trois parties : l’URL de la requête, les en-têtes et le corps de la requête.
1. Définissez l’URL de la requête. Laissez la méthode sur POST et collez l’URL du webhook Slack. Le menu déroulant propose aussi PUT, PATCH et DELETE pour d’autres endpoints, mais les incoming webhooks de Slack n’acceptent que POST.
2. Vérifiez les en-têtes. Content-Type: application/json est défini par défaut, ce qui correspond à ce qu’exige Slack.
3. Rédigez le corps de la requête. La note au-dessus du champ du corps explique l’essentiel : le corps est un modèle rendu à l’exécution de la connexion, et vous référencez la sortie du workflow avec DONNÉES pour la table complète ou ROWS pour un objet par enregistrement. Les espaces réservés se placent entre doubles accolades, donc un modèle qui envoie chaque enregistrement restant ressemble à ceci :
{"rows": {{ROWS}}}Les accolades sont faciles à oublier, et cela provoque une erreur difficile à diagnostiquer. Écrire ROWS sans elles n’est pas un espace réservé, c’est du JSON invalide — et au lieu de signaler une erreur, Sheetgo envoie la requête avec un corps vide. Slack la rejette, rien n’apparaît dans le canal et aucun message n’explique pourquoi. Il en va de même pour les guillemets : {{ROWS}} rend un tableau JSON complet, crochets compris, donc écrire "rows": "{{ROWS}}" vous donnerait une chaîne entre guillemets contenant du JSON plutôt que le tableau lui-même. Le panneau le dit clairement — n’entourez pas les espaces réservés de guillemets supplémentaires.
Inspecter la charge avant de l’envoyer à Slack
Slack rejette les charges mal formées avec une simple invalid_payload et ne vous montre rien sur ce qu’il a reçu, ce qui en fait un mauvais endroit pour mettre au point un modèle que vous cherchez encore. Un inspecteur de requêtes est plus simple. Il en existe plusieurs ; ce tutoriel utilise Webhook.site.
Ouvrir webhook.site, copiez l’URL unique qu’il génère et collez-la dans le champ REQUEST URL à la place de votre URL Slack. Il accepte n’importe quelle charge et affiche le corps brut tel qu’il est arrivé.
Avec {"rows": {{ROWS}}} dans le corps, cliquez sur Review automation puis sur Finish and run. La charge arrive sous la forme d’un rows tableau — un objet par enregistrement restant, chaque clé correspondant à un en-tête de colonne tel qu’il est écrit dans la feuille, espaces compris :
{ "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": "" } ]}Deux enregistrements au lieu de cinq, avec Status et Send retirés. Remarquez que le récapitulatif complet se trouve dans le champ Digest de la première ligne — c’est cette orthographe exacte de l’en-tête que vous utiliserez ensuite, elle doit donc être « Digest », pas « digest » ni « Message ».
Construire le message Slack et l’exécuter
Repointez la REQUEST URL vers votre webhook Slack et remplacez le corps par ce modèle Block Kit 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"}] } ]}
Les {{ROWS[0]["Digest"]}} récupère tout le récapitulatif mis en forme de la première ligne — et, suivant la règle du panneau, il n’est pas entre guillemets, car il est rendu comme une chaîne JSON entre guillemets de lui-même.
Planifier l’automatisation
Pour l’exécuter selon une planification plutôt qu’à la main, activez Enable automation triggers sur l’écran de révision et basculez Run automatically sur On. Sous Trigger options, vous avez quatre choix, et celui que vous retenez dépend de la façon dont votre équipe travaille :
- Based on a schedule exécute l’automatisation à heure fixe — toutes les heures, tous les jours ou toutes les semaines, les jours de votre choix, dans votre fuseau horaire. C’est l’option adaptée à un récapitulatif, dont le but est un résumé régulier plutôt qu’une alerte instantanée.
- On form submission l’exécute chaque fois qu’un formulaire Sheetgo est soumis — utile lorsque la feuille est alimentée par un formulaire et que vous voulez que l’alerte suive la saisie.
- On workflow run enchaîne cette automatisation après une autre, de sorte qu’elle se déclenche à la fin d’une automatisation en amont. C’est ainsi que vous construisez une séquence — une automatisation nettoie et fusionne les données, et celle-ci envoie le résultat.
- On webhook event exécute l’automatisation à l’arrivée d’un webhook entrant, laissant un système externe décider du moment de l’envoi — par exemple, un prestataire de paiement enregistrant une nouvelle vente dans la feuille.
Ces trois dernières ne conviennent pas à ce récapitulatif précis, mais elles montrent que la configuration peut s’adapter à tout agencement dont votre workflow a besoin. Pour un récapitulatif Google Sheets vers Slack, choisissez Based on a schedule, réglez la fréquence sur hebdomadaire pour correspondre à la fenêtre de sept jours, puis choisissez l’heure et les jours.
Cliquez sur Finish and run. Le message apparaît dans #sales-wins :
Que pouvez-vous envoyer d’autre avec une destination de webhook
Envoyer Google Sheets vers Slack est l’exemple le plus simple à démontrer, mais la destination de webhook envoie une requête HTTP vers n’importe quel endpoint qui l’accepte, donc la même configuration fonctionne bien au-delà des notifications de chat.
- Alertes de stock bas : filtrez une feuille d’inventaire sur les articles sous leur seuil de réapprovisionnement et envoyez la liste à votre canal des achats selon une planification quotidienne.
- Récapitulatifs de factures en retard : filtrez sur les factures impayées après leur échéance et envoyez un récapitulatif hebdomadaire à la finance, avec le texte piloté depuis la feuille de calcul.
- Autres API et outils : la destination prend en charge POST, PUT, PATCH et DELETE avec des en-têtes personnalisés, vous pouvez donc mettre à jour des enregistrements dans un CRM, appeler une API interne ou déclencher une exécution dans un autre outil.
Conclusion
La destination de webhook est la dernière étape d’un workflow Sheetgo, ce qui signifie que tout le reste de la plateforme reste disponible en amont. Dans une seule automatisation, vous pouvez fusionner plusieurs feuilles de calcul régionales en une, supprimer les doublons, faire passer les données par le Processeur de données d'IA, filtrer les enregistrements de test, puis envoyer le résultat à Slack.
Vous pouvez aussi l’associer au sens entrant, avec deux automatisations distinctes. Un webhook as a source permet à une app externe d’envoyer des données dans une feuille de calcul sans l’API Google Sheets. Une seconde automatisation lit cette feuille, la traite et envoie le résultat via une destination de webhook. La feuille de calcul se place entre les deux comme une couche de traitement que votre équipe peut lire et modifier.
Prêt à envoyer Google Sheets vers Slack, là où votre équipe travaille déjà ? Inscrivez-vous à Sheetgo et créez dès aujourd’hui votre première destination de webhook.
