Exporter les données récupérées vers Google Sheet

Temps de lecture : 8 minutes

Si vous consultez cet article c'est que vous devez utiliser des notifications Digi-Boutik de type : collecteur d'avis, d'emails... Vous devez donc vous dire qu'il y a peut-être plus simple que le bouton "Exporter en JSON" de l'onglet "Données" de l'interface de gestion de votre notification pour récupérer ces merveilleuses données.

Et bien oui ! Il y a plus simple : deux solutions existent, l'envoi de données par webhook puis la récolte par un service tiers, ou tout simplement la récolte par email (réception d'un mail à chaque avis/email récolté).

Nous nous intéresserons dans cet article à la récolte des données par un service tiers. Et qui plus est un service gratuit : Google Sheets. Ce service gratuit de Google, va nous permettre de récolter toutes les données entrées par les utilisateurs de vos notifications au sein d'une feuille Google Sheets (tout comme un document Excel) qui pourra ensuite être exporté à n'importe quel format.

Attention, ce tutoriel est dédié à des utilisateurs avertis en informatiques car vous devrez intégrer et modifier un Google Script. Si vous ne vous sentez pas capable en lisant ce document, je vous invite à prendre un service payant tel que Zapier ou Integromat, qui permettent de faire la même chose plus aisément.

Bon, maintenant, c'est parti !

Prérequis :

 

Préparer la feuille Google Sheets

Ouvrir le fichier Google Sheets, dans ce fichier vous devez indiquer sur la première ligne (1) et dans chaque colonne, le nom du champs que vous souhaitez récupérer. Optionnellement vous avez la possibilité d'ajouter la date dans la cellule A1. Cela vous permettra d'avoir la date à laquelle la donnée a été récupérée via une notification.

Attention à bien respecter la casse pour le nom du champ, sinon cela ne donnera rien.

Dans la capture suivante je souhaite récupérer dans mon fichier les données de ma notification de collecte d'avis, je vais donc rentrer les informations comme ceci :

J'ai donc ajouté :

  1. Date en A1 : date à laquelle la donnée est récupérée
  2. email ou input en B1 (dépendant du collecteur que vous utiliserez) : dans cette colonne apparaîtra chaque input/email récupéré

Vous allez désormais mettre de côté deux informations (dans un fichier Bloc Notes par exemple). Il s'agit de deux variables qui nous seront utiles par la suite.

1/ Notez le nom exact de la feuille sur laquelle vous avez rentré les cellules A1 et B1 (pas le nom du fichier), par défaut le nom de la première feuille créée par Google Sheets est : Feuille 1

Vous trouverez le nom de la feuille en bas de votre fichier :

2/ Notez la clé de votre fichier Google Sheets. On appelle clé une partie de l'URL de votre fichier (ce que j'ai surligné en jaune) :

Il faut conserver la partie après /d et avant /edithttps://docs.google.com/spreadsheets/d/1nOKy057v0gVJes8Ys9bBas8W0_70U4bxZ44fm-kIeY4/edit#gid=0

Dans mon cas je vais donc copier uniquement : 1nOKy057v0gVJes8Ys9bBas8W0_70U4bxZ44fm-kIeY4

A ce stade vous devriez donc avoir mis de côté deux informations :

 

Préparer le Google Apps Script

Une fois la feuille créée, nous devons créer le script Google Apps qui sera connecté à la notification et récupèrera les données. Le script obtiendra des données des webhooks des notifications, ces données seront analysées et ajoutées à la feuille Google Sheets précédemment créée.

Vous devez aller dans le menu Outils et cliquer sur Éditeur de script :

Vous devriez voir l'écran ci-dessous une fois que vous aurez l'éditeur :

Copiez-collez y le code suivant :

//  Digi-Boutik
//  Modifiez les deux lignes suivantes :
        var SHEET_NAME = "Nom de la Feuille";
        var SHEET_KEY  = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

var SCRIPT_PROP = PropertiesService.getScriptProperties();

function doGet(e){
  return handleResponse(e);
}

function doPost(e){
  return handleResponse(e);
}

function handleResponse(e) {
  var lock = LockService.getPublicLock();
  lock.waitLock(30000);
  
  try {
    var doc = SpreadsheetApp.openById(SHEET_KEY);
    var sheet = doc.getSheetByName(SHEET_NAME);
    
    var headRow = e.parameter.header_row || 1;
    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
    var nextRow = sheet.getLastRow()+1;
    var row = []; 
    for (i in headers){
      if (headers[i] == "Date"){
        row.push(new Date());
      } else {
        row.push(e.parameter[headers[i]]);
      }
    }
    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);
    return ContentService
          .createTextOutput(JSON.stringify({"result":"success", "row": nextRow}))
          .setMimeType(ContentService.MimeType.JSON);
  } catch(e){
    return ContentService
          .createTextOutput(JSON.stringify({"result":"error", "error": e}))
          .setMimeType(ContentService.MimeType.JSON);
  } finally {
    lock.releaseLock();
  }
}

 

Vous devez maintenant modifier dans le script les variables suivantes (en rouge) :

        var SHEET_NAME = "Nom de la feuille";
        var SHEET_KEY = "xxxxxxxxxxxxxxxxxxxxxxx";

pour indiquer la clé de votre fichier Google Sheets (SHEET_KEY) ainsi que le nom de la feuille (SHEET_NAME). Nous avions récupéré ces deux variables précédemment.

Dans mon cas cela donnera donc :

        var SHEET_NAME  = "Feuille 1";
        var SHEET_KEY  = "1nOKy057v0gVJes8Ys9bBas8W0_70U4bxZ44fm-kIeY4";

Veillez à bien laisser les guillemets autour de vos variables ! Et voilà !

 

Déploiement du script sous forme d'application web

Une fois le code ci-dessus écrit, nous avons rempli les conditions pour qu'il puisse être déployé en tant qu'application web. Le déploiement de ce script en tant qu'application web est nécessaire pour qu'il puisse écouter ce qu'il se passera au niveau des notifications Digi-Boutik.

Pour déployer le script en tant qu'application web, vous devez sélectionner Publier -> Déployer en tant qu'application web.

En cliquant sur "Déployer en tant qu'application web", on vous demandera le project name (nom du projet), indiquez ce que vous désirez par exemple :

Cliquez ensuite sur OK, vous devriez arriver sur ce panneau :

Il se peut que ce panneau bug niveau affichage visuel, si c'est le cas je vous invite à désactiver votre bloqueur de publicités. Normalement vous devriez ensuite pouvoir modifier la configuration facilement.

Il vous faut indiquer :

Si vous modifiez le script plus tard, il faudra refaire la même chose et resélectionner "Nouveau" dans l'option "Version du projet" à chaque fois. Ce n'est que lorsque vous sélectionnez "Nouveau" que les changements effectués dans cette itération prendront effet.

Une fois que vous aurez cliqué sur "Déployer", vous verrez un message qui vous demandera d'autoriser Google Apps Script à accéder à Google Sheets :

1/ Cliquez sur Examiner les autorisations

2/ Sélectionnez le compte Google qui a accès au fichier Google Sheets :

3/ Cliquez sur "Paramètres avancés" :

4/ Cliquez ensuite sur : Accéder à XXXXXX (le nom de votre script) (non sécurisé)

5/ Descendez légèrement pour pouvoir cliquer sur "Autoriser" en bas à droite :

Voilà !

Le message ci-dessous apparaîtra ensuite indiquant que le projet est maintenant déployé avec succès en tant qu'application web. En même temps, il affichera également une URL dans le champ "Current web app URL". Vous devez copier cette URL car c'est celle qui sera utilisée lors de la configuration du webhook Digi-Boutik à l'étape suivante.

 

Création du webhook Digi-Boutik

Maintenant que le script Google Apps est configuré et déployé comme une application web, nous devons ajouter un webhook dans le paramétrage de la notification pour appeler Google chaque fois qu'une donnée nouvelle est stockée.

Vous pouvez ajouter un webhook en vous rendant sur votre campagne Digi-Boutik, une notification collecteur (avis, email...), onglet Données :

Cochez "Envoyer les données saisies à des sources externes" puis dans URL du Webhook entrez l'URL précédemment copiée de votre Google Script au format : https://script.google.com/macros/s/xxxxxxxxxxxx

Cliquez ensuite sur "Mettre à jour"

Et voilà, vous pouvez tester en rentrant un avis sur votre site via le collecteur, et il devrait apparaître dans votre Google Sheets :

Si vous avez des problèmes :

Mise à jour le : 5 Mai, 2020