Artikel:
- Datenexport nach Google Sheets
- Facebook Pixel mit einem Projekt auf Kwiga verbinden
- Senden eines Webhooks, um Daten an einen anderen Dienst zu übertragen
- Wichtige Informationen zur Zoom-Integration und Nutzung
- Generierung von Zahlungslinks mit vorausgefüllten Daten
- Verwalten von Button-Klicks im Widget und grundlegende Nutzung
- Senden eines Webhooks an KeyCRM mit Trennung der Anfrage und Zahlung
Wir zeigen Ihnen, wie Sie den automatischen Datenexport von Kwiga nach Google Sheets einrichten.
Sie können den Datenexport für verschiedene Ereignisse mithilfe von Automatisierung einrichten (als Ereignis können Sie z. B. Kontakt hinzugefügt, Tag hinzugefügt, erfolgreicher oder fehlgeschlagener Kauf usw. angeben; die vollständige Liste der Ereignisse ist im Artikel verfügbar).
Zusätzlich können Sie beim Verwenden von Widgets die Option nutzen, einen Webhook zu senden; der Ablauf bleibt derselbe.
Hauptschritte:
-
Erstellen Sie eine Datei und fügen Sie das Skript dort ein
-
Erstellen Sie eine Web-App und holen Sie sich den Link zum Senden des Webhooks
-
Richten Sie das Senden des Webhooks mithilfe von Automatisierung in Kwiga oder durch das Absenden eines Formulars im Widget ein.
Der gesamte Prozess wird im Video gezeigt und erfordert keine Programmierkenntnisse. Folgen Sie einfach den beschriebenen Schritten, und wenn etwas nicht funktioniert, wenden Sie sich an den Support.
Schritt 1: Erstellen Sie eine Datei, in die Daten von Kwiga gesendet werden
Öffnen Sie Google Sheets und erstellen Sie eine neue Datei, dann öffnen Sie den Skript-Editor.
Es öffnet sich ein neues Fenster, und Sie müssen das Skript in dessen Editor einfügen. Sie können das Skript über den Link herunterladen (oder den Text am Ende des Artikels kopieren). Sie müssen den gesamten Text löschen, der sich bereits im Editor befindet.
Endergebnis:
Schritt 2: Erstellen Sie eine Web-App und holen Sie sich den Link zum Senden des Webhooks
Suchen Sie im selben Skript-Editor die Schaltfläche Deploy und wählen Sie New deployment aus
Wählen Sie als Typ Web app aus und stellen Sie im Dropdown Who has access die Option Everyone ein. Klicken Sie dann auf Deploy.
Als Ergebnis erhalten Sie die Web App URL, die Sie anschließend in Kwiga hinzufügen müssen.
Schritt 3: Richten Sie das Senden von Daten in Kwiga ein
Klicken Sie im oberen Menü auf die Schaltfläche All solutions und wählen Sie Automation aus. Erstellen Sie einen neuen Trigger und wählen Sie das Ereignis aus, das die Automatisierung startet. Das kann Kontakt hinzugefügt, Tag hinzugefügt, Zahlung oder ein anderes Ereignis sein.
Scrollen Sie danach nach unten und wählen Sie in den Aktionen Webhook - Send data aus. Geben Sie im Link-Feld die Web App URL und den Anfragetyp POST an und wählen Sie die Felder aus, die in die Tabelle exportiert werden sollen.
Speichern Sie es, und alle Schritte sind abgeschlossen.
Alternativ können Sie das Senden des Webhooks über das Widget einrichten; dies ist verfügbar, wenn Sie das Element Form verwenden. Aktivieren Sie die Option Additionally send to a third-party service und fügen Sie dann im sich öffnenden Formular den Link und den Anfragetyp POST hinzu sowie wählen Sie die zu sendenden Parameter aus. In dieser Liste sind nur die Parameter verfügbar, die im Formular (diesem Widget) vorhanden sind.
Wie funktioniert das Google Sheets-Skript für Webhooks
- Beim ersten Aufruf des Webhooks werden die Tabellenüberschriften automatisch basierend auf den Schlüsseln der eingehenden Daten erstellt
- Wenn die Tabelle bereits Überschriften hat und neue Datenfelder empfangen werden sollen, fügen Sie diese Überschriften manuell zur Tabelle hinzu
- Die Überschriften können in der Tabelle verschoben werden - das Skript erkennt ihre Positionen automatisch
- Standardmäßig fügt das Skript bei jedem Empfang eines Webhooks neue Einträge hinzu
- Wenn Felder in keyColumns angegeben sind, aktualisiert das Skript bestehende Einträge oder fügt neue hinzu, wenn keine Übereinstimmung gefunden wird
- ⚠️ Wichtig: Nach einer Änderung des Skripts muss eine neue Bereitstellung in Google Apps Script erfolgen und der Webhook-Link aktualisiert werden
Auswahl des Tabellenblatts:
- Standardmäßig wird das aktive Blatt verwendet
- Kann über Webhook-Parameter überschrieben werden:
- "sheet_name": "Name des Blattes" - zur Auswahl des Blattes nach Name
- "sheet_index": 2 - zur Auswahl des Blattes nach Nummer (beginnend mit 1)
// ============================================================
// SKRIPT-EINSTELLUNGEN
// ============================================================
// Duplikatprüfung - geben Sie die Felder zur Suche nach vorhandenen Einträgen an
// Beispiele für die Verwendung:
// var keyColumns = ["email"]; - Prüfung nach E-Mail
// var keyColumns = ["order_id"]; - Prüfung nach Bestell-ID
// var keyColumns = ["email", "order_id"]; - Prüfung nach mehreren Feldern
var keyColumns = []; // Duplikatprüfung deaktiviert
// ============================================================
// Funktion zum Senden der Antwort
function sendResponse(success, message) {
var response = {
"status": success ? "success" : "error",
"message": message
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
// Abrufen der Zielseite zum Speichern von Daten
function getTargetSheet(hook_data) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Überprüfen, ob der Seitenname angegeben ist
if (hook_data && hook_data.sheet_name) {
try {
var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
if (sheet) {
return sheet;
}
} catch (error) {
// Seite nicht gefunden
}
}
// Überprüfen, ob die Seitennummer angegeben ist
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; // In Index ab 0 konvertieren
if (index >= 0 && index < sheets.length) {
return sheets[index];
}
} catch (error) {
// Ungültiger Seitenindex
}
}
// Standardmäßig aktive Seite verwenden
return SpreadsheetApp.getActiveSheet();
}
// Erstellt Tabellenüberschriften basierend auf den übergebenen Daten
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;
}
// Verarbeitung des eingehenden Webhooks
function doPost(e) {
var hook_load = null;
// Überprüfen auf Vorhandensein von POST-Daten
if (!e || !e.postData || !e.postData.contents) {
return sendResponse(false, "Keine Daten zur Verarbeitung");
}
// JSON-Daten parsen
try {
hook_load = JSON.parse(e.postData.contents);
} catch (error) {
return sendResponse(false, "Fehler beim Parsen der JSON-Daten");
}
// Validierung der empfangenen Daten
if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
return sendResponse(false, "Ungültige oder leere Daten empfangen");
}
try {
// Zielseite abrufen
var sheet = getTargetSheet(hook_load);
if (!sheet) {
return sendResponse(false, "Angegebene Seite konnte nicht gefunden werden");
}
// Erstellung von Überschriften, wenn die Tabelle leer ist
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];
}
// Duplikatprüfung
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; // Berücksichtigung der Überschriften
break;
}
}
}
// Datenvorbereitung zum Speichern
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];
}
}
// Daten in Tabelle speichern
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, "Daten erfolgreich gespeichert");
} catch (error) {
return sendResponse(false, "Fehler beim Speichern der Daten: " + error.message);
}
}
Fand die Antwort nicht? Wenden Sie sich an den Support-Service über Online Chat or Telegram