Si vous utilisez l’application Google Sheets pour gérer votre base de données clients ou vos commandes, découvrez sans plus attendre notre solution pour connecter votre tableur à notre logiciel d’optimisation de tournées AntsRoute. Dans cet article, nous vous présentons les quelques étapes à suivre.
Comment fonctionne cette connexion ?
Prenons l’exemple d’un industriel qui effectue des livraisons de palettes chez des clients. Les livraisons sont planifiées 5 jours à l’avance, mais lorsque la livraison approche, les quantités de palettes peuvent fluctuer en fonction des stocks disponibles. L’industriel utilise un tableau Google Sheets afin de répertorier ses commandes. Voici un exemple de tableau :
💡 La première colonne indique si la modification a bien été envoyée à AntsRoute.
💡 Les colonnes « Téléphone » et « Mobile » doivent être au format « Nombre ». Les colonnes « Début de créneau » et « Fin de créneau » doivent quant à elles être au format « Texte ».
💡 Dès qu’une commande est mise à jour, le responsable d’exploitation ajoutera un « 0 » dans la première cellule de la ligne modifiée. Google Sheets envoie automatiquement à AntsRoute une nouvelle commande et supprime l’ancienne. Dès que c’est fait, la première cellule passe de « 0 » à « 1 ».
💡 Depuis l’interface AntsRoute, l’opérateur doit compléter ou ré-optimiser les tournées sur la journée concernée afin de réintégrer les commandes modifiées.
Comment connecter Google Sheets à AntsRoute ?
Étape 1 : Récupérer une clé API AntsRoute
- Depuis votre compte AntsRoute, cliquez sur vos initiales en haut à droite.
- Cliquez sur « Intégrations ».
- Cliquez sur « Clés d’API ».
- Cliquez sur le bouton d’ajout « + ».
- Entrez un « Nom ».
- Cliquez sur le bouton « Créer ».
- Cliquez sur le bouton « Copier ».
- Cliquez sur le bouton « Continuer ».
💡 La clé API vous sera demandée dans l’étape suivante. D’ici là, collez cette clé dans un document.
Étape 2 : Paramétrer App Script
- Depuis votre tableau Google Sheets, récupérez l’ID du fichier.
- Récupérez ensuite le nom de votre feuille de calcul.
- Cliquez sur l’onglet « Extensions ».
- Cliquez sur « App Script ».
- Récupérez le script situé à la fin de cet article, cliquez sur l'onglet « Éditeur » > « Code.gs » et collez le script.
- Dans le code
const spreadsheetId = XXXXX
remplacez XXXXX par l’ID du fichier Google Sheets. - Dans le code
const sheetName = YYYYY
remplacez YYYYY par le nom de votre feuille de calcul. - Dans le code
cakey = ZZZZZ
remplacez ZZZZZ par la clé d’API AntsRoute. - Paramétrez le déclencheur en cliquant sur l’icône « chronomètre » dans le menu latéral.
- Cliquez sur le bouton « Ajouter un déclencheur » en bas à droite.
💡 Vous devez remplacer « ZZZZZ » par la clé d’API AntsRoute à deux endroits dans le script.
function PostAntsRoute() { // Replace `spreadsheetId` and `sheetName` with the ID and name of your Google Sheets document const spreadsheetId = "XXXXX"; const sheetName = "YYYYY"; // Get the sheet by ID and name const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName); // Get the number of rows in the sheet const numRows = sheet.getLastRow(); // Loop on the Modified Value for (let i = 2; i <= numRows; i++) { var ModifiedRowValues = sheet.getRange(i, 1, 1, sheet.getLastColumn()).getValues()[0]; if (ModifiedRowValues[0]===0){ // Define the variables that will be used in the request // You can find the values from google sheet column number-1 var DeliveryId = ModifiedRowValues[1]; var ScheduleDate = Utilities.formatDate(ModifiedRowValues[2], "GMT+1", "YYYY-MM-dd"); var CustomerExternalId = ModifiedRowValues[3]; var Prenom = ModifiedRowValues[4]; var Nom = ModifiedRowValues[5]; var Telephone = "+33"+ModifiedRowValues[6]; var Mobile = "+33"+ModifiedRowValues[7]; var Courriel = ModifiedRowValues[8]; var Adresse = ModifiedRowValues[9]; var Code_postal = ModifiedRowValues[10]; var Ville = ModifiedRowValues[11]; var Code_acces = ModifiedRowValues[12]; var Duree = ModifiedRowValues[13]; var DebutCreneau= ModifiedRowValues[14]; var FinCreneau= ModifiedRowValues[15]; var Commentaires = ModifiedRowValues[16]; var Palette = ModifiedRowValues[17]; var Poids = ModifiedRowValues[18]; var Description = ModifiedRowValues[19]; var Reference = ModifiedRowValues[20]; // Define the URL for the request to Delete the current order in AntsRoute var url1 = "https://app.antsroute.com/capi/order/external-id/"+DeliveryId+"?purge=true"; var options1 = { "method": "DELETE", "headers": { "Accept": "application/json", "cakey": "ZZZZZ" } }; //Define the URL for the request to add the modified order in AntsRoute var url2 = "https://app.antsroute.com/capi/order/planning"; var options2 = { "method": "POST", "headers": { "Content-Type": "application/json", "Accept": "application/json", "cakey": "ZZZZZ" }, "payload": JSON.stringify({ "type": "DELIVERY", "scheduleDate": ScheduleDate, "duration": Duree, "externalId": DeliveryId, "comments": Commentaires, "customer": { "lastName": Nom, "firstName": Prenom, "address": Adresse+" "+Code_postal+" "+Ville, "phoneNumber": Telephone, "mobileNumber": Mobile, "email": Courriel, "externalId": CustomerExternalId, "customFields": [ { "name": "Code d'accès", "value": Code_acces } ] }, "customFields": [ { "name": "Référence", "value": Reference }, { "name": "Description", "value": Description } ], "capacities": [ { "capacityName": "Poids", "capacityValue": Poids }, { "capacityName": "Palette", "capacityValue": Palette } ], "timeSlot": { "start": DebutCreneau, "end": FinCreneau }, "loading": { "location": { "name": "Warehouse A", "address": "Nantes, France" }, "duration": 10, "timeSlot": { "start": "06:00", "end": "18:30" } } }) }; //Send the request to Delete try { var response1 = UrlFetchApp.fetch(url1,options1); var responseBody1 = response1.getContentText() } catch (error) { Logger.log(error.message); Logger.log(error.response1); } //Send the request to Post try { var response2 = UrlFetchApp.fetch(url2,options2); var responseBody2 = response2.getContentText(); var data2 = JSON.parse(responseBody2) } catch (error) { Logger.log(error.message); Logger.log(error.response2); } //Change the state of the order in google sheet: "the modifications are in AntsRoute" let range = sheet.getRange(i,1); range.setValue('1') } } }