Si utiliza la aplicación Google Sheets para administrar su base de datos de clientes o sus pedidos, descubra sin esperar nuestra solución para conectar su hoja de cálculo a nuestro software de optimización de rutas AntsRoute. En este artículo, presentamos los pocos pasos a seguir.
¿Cómo funciona esta conexión?
Tomemos el ejemplo de un fabricante que entrega paletas a los clientes. Las entregas se programan con 5 días de anticipación, pero cuando se acerca la entrega, las cantidades de paletas pueden fluctuar según el stock disponible. El fabricante usa una tabla Google Sheets para enumerar sus pedidos. Aquí hay un ejemplo de una tabla:
💡 La primera columna indica si la modificación ha sido enviada a AntsRoute.
💡 Las columnas “Teléfono” y “Móvil” deben tener el formato “Número”. Las columnas relativas a las franjas horarias deben tener el formato “Texto”.
💡 Tan pronto que se actualice una orden, el gerente de operaciones agregará un “0” en la primera celda de la línea modificada. Google Sheets envía automáticamente a AntsRoute un nuevo comando y elimina el anterior. Tan pronto que se ha hecho, la primera celda cambia de “0” a “1”.
💡 Desde la interfaz de AntsRoute, el operador debe completar o reoptimizar las rutas en el día en cuestión para reintegrar las órdenes modificadas.
¿Cómo conectar Google Sheets a AntsRoute?
Paso 1: recuperar una clave API de AntsRoute
- Desde su cuenta de AntsRoute, pinche en sus iniciales en la parte superior derecha.
- Pinche en “Integraciones”.
- Pinche en “Claves API”.
- Pinche en el botón para añadir “+”.
- Indique el “Nombre”.
- Pinche en el botón “Crear”.
- Pinche en el botón “Copiar”.
- Pinche en el botón “Continuar”.
💡 Se le pedirá la clave API en el siguiente paso. Hasta entonces, pegue esta clave en un documento.
Paso 2: Configurar App Script
- Desde su tabla de Google Sheets, recupere el ID del archivo.
- Recupere el nombre de su hoja de cálculo.
- Pinche en el botón “Extensiones”.
- Pinche en “App Script”.
- Recupere el script que se encuentra al final de este artículo, pinche en la pestaña “Editor” > “Codi.gs” y pegue el script.
- En el código
const spreadsheetId = XXXXX
sustituya XXXXX por el ID del archivo de Google Sheets. - En el código
const sheetName = YYYYY
sustituya YYYYY por el nombre de su hoja de cálculo. - En el código
cakey = ZZZZZ
sustituya ZZZZZ por la clave API AntsRoute. - Configure el disparador haciendo clic en el icono “cronómetro” del menú lateral.
- Pinche en el botón “Añadir disparador” en la parte inferior derecha.
💡 Deba sustituir “ZZZZZ” por la clave API de AntsRoute en dos lugares del 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') } } }