Articles:
- Exportation de données vers Google Sheets
- Connexion du FB Pixel à un projet sur Kwiga
- Envoi d'un webhook pour transférer des données vers un autre service
- Les bases de l'intégration et de l'utilisation de Zoom
- Génération de liens de paiement avec des données préremplies
- Gestion des clics sur les boutons dans le widget et éléments essentiels d'utilisation
- Envoi d'un webhook à KeyCRM avec séparation de la demande et du paiement
Nous vous montrerons comment configurer l'exportation automatique des données depuis Kwiga vers Google Sheets.
Vous pouvez configurer l’exportation des données pour différents événements à l’aide de l’automatisation (vous pouvez définir comme événement l’ajout d’un contact, l’ajout d’un tag, un achat réussi ou échoué, etc. ; la liste complète des événements est disponible dans l’article).
De plus, vous pouvez utiliser l’option d’envoi d’un webhook lors de l’utilisation de widgets ; le processus reste le même.
Étapes principales :
-
Créez un fichier et ajoutez-y le script
-
Créez une application web et obtenez le lien pour envoyer le webhook
-
Configurez l’envoi du webhook à l’aide de l’automatisation dans Kwiga ou de l’envoi du formulaire dans le widget.
L’ensemble du processus est montré dans la vidéo et ne nécessite pas de connaissances en programmation. Suivez simplement les étapes indiquées et, si quelque chose ne fonctionne pas, contactez l’assistance.
Étape 1 : Créez un fichier dans lequel les données de Kwiga seront envoyées
Ouvrez Google Sheets et créez un nouveau fichier, puis ouvrez l’éditeur de script.
Une nouvelle fenêtre s’ouvrira et vous devrez coller le script dans son éditeur. Vous pouvez télécharger le script via le lien (ou copier le texte en bas de l’article). Vous devez supprimer tout le texte déjà présent dans l’éditeur.
Résultat final :
Étape 2 : Créez une application web et obtenez le lien pour envoyer le webhook
Dans le même éditeur de script, trouvez le bouton Deploy et sélectionnez New deployment
Sélectionnez Web app comme type, puis dans la liste déroulante Who has access définissez Everyone, puis cliquez sur Deploy.
Vous obtiendrez ainsi l’URL de la Web App, que vous devrez ensuite ajouter dans Kwiga.
Étape 3 : Configurez l’envoi des données dans Kwiga
Cliquez sur le bouton All solutions dans le menu supérieur et sélectionnez Automation. Créez un nouveau déclencheur et choisissez l’événement qui lancera l’automatisation. Cela peut être l’ajout d’un contact, l’ajout d’un tag, un paiement ou tout autre événement.
Ensuite, faites défiler vers le bas et sélectionnez Webhook - Send data dans les actions. Dans le champ du lien, indiquez l’URL de la Web App, le type de requête POST, puis sélectionnez les champs à exporter vers le tableau.
Enregistrez, et toutes les étapes seront terminées.
Vous pouvez également configurer l’envoi du webhook depuis le widget ; cette option est disponible lors de l’utilisation de l’élément Form. Cochez l’option Additionally send to a third-party service, puis dans le formulaire qui s’ouvre ajoutez le lien, le type de requête POST et sélectionnez les paramètres à envoyer. Seuls les paramètres présents dans le formulaire (ce widget) seront disponibles dans cette liste.
Comment fonctionne le script Google Sheets pour les webhooks
- Lors du premier appel du webhook, les en-têtes du tableau sont automatiquement créés à partir des clés des données entrantes
- Si le tableau a déjà des en-têtes et que vous devez commencer à recevoir de nouveaux champs de données, ajoutez ces en-têtes au tableau manuellement
- Les en-têtes peuvent être réorganisés dans le tableau - le script déterminera automatiquement leurs positions
- Par défaut, le script ajoute de nouveaux enregistrements à chaque réception de webhook
- Si vous spécifiez des champs dans keyColumns, le script mettra à jour les enregistrements existants ou ajoutera de nouveaux en cas d'absence de correspondance
- ⚠️ Important : Après avoir modifié le script, vous devez effectuer un nouveau déploiement dans Google Apps Script et mettre à jour le lien vers le webhook
Choix de la feuille du tableau :
- Par défaut, la feuille active est utilisée
- Peut être redéfini via les paramètres du webhook :
- "sheet_name": "Nom de la feuille" - pour choisir la feuille par nom
- "sheet_index": 2 - pour choisir la feuille par numéro (en commençant par 1)
// ============================================================
// PARAMÈTRES DU SCRIPT
// ============================================================
// Vérification des doublons - spécifiez les champs pour rechercher les enregistrements existants
// Exemples d'utilisation :
// var keyColumns = ["email"]; - vérification par email
// var keyColumns = ["order_id"]; - vérification par ID de commande
// var keyColumns = ["email", "order_id"]; - vérification par plusieurs champs
var keyColumns = []; // Vérification des doublons désactivée
// ============================================================
// Fonction pour envoyer une réponse
function sendResponse(success, message) {
var response = {
"status": success ? "success" : "error",
"message": message
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
// Obtention de la page cible pour enregistrer les données
function getTargetSheet(hook_data) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Vérification si le nom de la page est spécifié
if (hook_data && hook_data.sheet_name) {
try {
var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
if (sheet) {
return sheet;
}
} catch (error) {
// Page non trouvée
}
}
// Vérification si le numéro de page est spécifié
if (hook_data && hook_data.sheet_index && !isNaN(hook_data.sheet_index)) {
try {
var sheets = spreadsheet.getSheets();
var index = parseInt(hook_data.sheet_index) - 1; // Conversion en index à partir de 0
if (index >= 0 && index < sheets.length) {
return sheets[index];
}
} catch (error) {
// Index de page incorrect
}
}
// Par défaut, utiliser la page active
return SpreadsheetApp.getActiveSheet();
}
// Crée des en-têtes dans le tableau à partir des données fournies
function populateHeaders(hook_data, sheet) {
if (!hook_data || typeof hook_data !== 'object') {
return false;
}
if (!sheet) {
sheet = getTargetSheet(hook_data);
}
var last_row = Math.max(sheet.getLastRow(), 1);
sheet.insertRowAfter(last_row);
var headers_row = ['timestamp'];
var hook_data_keys = Object.keys(hook_data);
for (var i = 0; i < hook_data_keys.length; i++) {
headers_row.push(hook_data_keys[i]);
}
sheet.appendRow(headers_row);
SpreadsheetApp.flush();
return true;
}
// Traitement du webhook entrant
function doPost(e) {
var hook_load = null;
// Vérification de la présence de données POST
if (!e || !e.postData || !e.postData.contents) {
return sendResponse(false, "Pas de données à traiter");
}
// Analyse des données JSON
try {
hook_load = JSON.parse(e.postData.contents);
} catch (error) {
return sendResponse(false, "Erreur d'analyse des données JSON");
}
// Validation des données reçues
if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
return sendResponse(false, "Données incorrectes ou vides reçues");
}
try {
// Obtention de la page cible
var sheet = getTargetSheet(hook_load);
if (!sheet) {
return sendResponse(false, "Impossible de trouver la page spécifiée");
}
// Création d'en-têtes si le tableau est vide
if (sheet.getLastColumn() === 0) {
populateHeaders(hook_load, sheet);
}
var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
if (headers.length === 0 || headers[0] === "") {
populateHeaders(hook_load, sheet);
headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0];
}
// Vérification des doublons
var data = [];
var targetRow = -1;
var numRows = sheet.getLastRow() - 1;
if (keyColumns.length > 0 && numRows > 0) {
data = sheet.getRange(2, 1, numRows, sheet.getLastColumn()).getValues();
for (var r = 0; r < data.length; r++) {
var row = data[r];
var match = true;
for (var k = 0; k < keyColumns.length; k++) {
var key = keyColumns[k];
var idx = headers.indexOf(key);
if (idx === -1 || row[idx] != hook_load[key]) {
match = false;
break;
}
}
if (match) {
targetRow = r + 2; // prise en compte des en-têtes
break;
}
}
}
// Préparation des données pour l'enregistrement
var new_sheet_row = new Array(headers.length).fill('');
for (var h = 0; h < headers.length; h++) {
var key = headers[h];
if (key === 'timestamp') {
new_sheet_row[h] = new Date();
} else if (hook_load.hasOwnProperty(key)) {
new_sheet_row[h] = hook_load[key];
}
}
// Enregistrement des données dans le tableau
if (targetRow > -1) {
sheet.getRange(targetRow, 1, 1, new_sheet_row.length).setValues([new_sheet_row]);
} else {
sheet.appendRow(new_sheet_row);
}
SpreadsheetApp.flush();
return sendResponse(true, "Données enregistrées avec succès");
} catch (error) {
return sendResponse(false, "Erreur lors de l'enregistrement des données : " + error.message);
}
}
Vous n'avez pas trouvé la réponse ? Contactez le service support via chat en ligne ou Telegram