Články:
- Data export to Google Sheets
- Připojení Facebook Pixelu k projektu na Kwiga
- Sending a webhook to transfer data to another service
- Integrace a používání Zoomu — základní informace
- Generování platebních odkazů s předvyplněnými údaji
- Zpracování kliknutí na tlačítko ve widgetu
- Sending a webhook to KeyCRM with separation of the application and payment.
We will show you how to set up automatic data export from Kwiga to Google Sheets.
Export dat pro různé události můžete nastavit pomocí automatizace (jako událost můžete zadat přidání kontaktu, přidání tagu, úspěšný nebo neúspěšný nákup atd.; úplný seznam událostí je dostupný v článku).
Kromě toho můžete při používání widgetů využít možnost odesílání webhooku; postup zůstává stejný.
Hlavní kroky:
-
Vytvořte soubor a přidejte do něj skript
-
Vytvořte webovou aplikaci a získejte odkaz pro odesílání webhooku
-
Nastavte odesílání webhooku pomocí automatizace v Kwiga nebo odeslání formuláře ve widgetu.
Celý proces je zobrazen ve videu a nevyžaduje znalosti programování. Stačí postupovat podle uvedených kroků, a pokud něco nebude fungovat, kontaktujte podporu.
Krok 1: Vytvořte soubor, do kterého se budou odesílat data z Kwiga
Otevřete Google Sheets a vytvořte nový soubor, poté otevřete editor skriptů.
Otevře se nové okno a do jeho editoru budete muset vložit skript. Skript si můžete stáhnout přes odkaz (nebo zkopírovat text na konci článku). Musíte smazat veškerý text, který už v editoru je.
Konečný výsledek:
Krok 2: Vytvořte webovou aplikaci a získejte odkaz pro odesílání webhooku
Ve stejném editoru skriptů najděte tlačítko Deploy a vyberte New deployment
Jako typ vyberte Web app a v rozevíracím seznamu Who has access nastavte Everyone, poté klikněte na Deploy.
Výsledkem bude Web App URL, které pak musíte přidat v Kwiga.
Krok 3: Nastavte odesílání dat v Kwiga
V horním menu klikněte na tlačítko All solutions a vyberte Automation. Vytvořte nový trigger a zvolte událost, která spustí automatizaci. Může to být přidání kontaktu, přidání tagu, platba nebo jakákoli jiná událost.
Poté sjeďte níže a v akcích vyberte Webhook - Send data. Do pole odkazu zadejte Web App URL, typ požadavku POST a vyberte pole, která se mají exportovat do tabulky.
Uložte to a všechny kroky jsou dokončeny.
Případně můžete nastavit odesílání webhooku z widgetu; tato možnost je dostupná při použití prvku Form. Zaškrtněte možnost Additionally send to a third-party service, poté do formuláře, který se otevře, přidejte odkaz, typ požadavku POST a vyberte parametry k odeslání. V tomto seznamu budou dostupné pouze parametry, které jsou přítomné ve formuláři (tomto widgetu).
Jak funguje skript Google Sheets pro webhooky
- Při prvním volání webhooku se automaticky vytvoří záhlaví tabulky na základě klíčů příchozích dat
- Pokud již tabulka obsahuje záhlaví a potřebujete začít přijímat nová datová pole, přidejte tato záhlaví do tabulky ručně
- Záhlaví lze v tabulce přesouvat - skript automaticky určí jejich pozice
- Ve výchozím nastavení skript přidává nové záznamy při každém přijetí webhooku
- Pokud zadáte pole v keyColumns, skript bude aktualizovat existující záznamy nebo přidá nové, pokud nenajde shodu
- ⚠️ Důležité: Po změně skriptu je nutné provést nové nasazení v Google Apps Script a aktualizovat odkaz na webhook
Výběr listu tabulky:
- Ve výchozím nastavení se používá aktivní list
- Lze předefinovat pomocí parametrů webhooku:
- "sheet_name": "Název listu" - pro výběr listu podle jména
- "sheet_index": 2 - pro výběr listu podle čísla (počínaje 1)
// ============================================================
// NASTAVENÍ SKRIPTU
// ============================================================
// Kontrola duplicit - určete pole pro hledání existujících záznamů
// Příklady použití:
// var keyColumns = ["email"]; - kontrola podle emailu
// var keyColumns = ["order_id"]; - kontrola podle ID objednávky
// var keyColumns = ["email", "order_id"]; - kontrola podle více polí
var keyColumns = []; // Kontrola duplicit je vypnuta
// ============================================================
// Funkce pro odeslání odpovědi
function sendResponse(success, message) {
var response = {
"status": success ? "success" : "error",
"message": message
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
// Získání cílové stránky pro záznam dat
function getTargetSheet(hook_data) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Kontrolujeme, zda je uveden název stránky
if (hook_data && hook_data.sheet_name) {
try {
var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
if (sheet) {
return sheet;
}
} catch (error) {
// Stránka nenalezena
}
}
// Kontrolujeme, zda je uvedeno číslo stránky
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; // Konvertujeme na index od 0
if (index >= 0 && index < sheets.length) {
return sheets[index];
}
} catch (error) {
// Neplatný index stránky
}
}
// Ve výchozím nastavení používáme aktivní stránku
return SpreadsheetApp.getActiveSheet();
}
// Vytváří záhlaví v tabulce na základě předaných dat
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;
}
// Zpracování příchozího webhooku
function doPost(e) {
var hook_load = null;
// Kontrolujeme přítomnost POST dat
if (!e || !e.postData || !e.postData.contents) {
return sendResponse(false, "Žádná data k zpracování");
}
// Parsujeme JSON data
try {
hook_load = JSON.parse(e.postData.contents);
} catch (error) {
return sendResponse(false, "Chyba při parsování JSON dat");
}
// Validace získaných dat
if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
return sendResponse(false, "Získána nesprávná nebo prázdná data");
}
try {
// Získáváme cílovou stránku
var sheet = getTargetSheet(hook_load);
if (!sheet) {
return sendResponse(false, "Nepodařilo se najít uvedenou stránku");
}
// Vytvoření záhlaví, pokud je tabulka prázdná
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];
}
// Kontrola duplicit
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; // evidence záhlaví
break;
}
}
}
// Příprava dat pro záznam
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];
}
}
// Ukládání dat do tabulky
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, "Data byla úspěšně uložena");
} catch (error) {
return sendResponse(false, "Chyba při ukládání dat: " + error.message);
}
}
Nenašli jste odpověď? Kontaktujte podporu prostřednictvím online chatu nebo Telegram