Slovenčina
USD - $
Kontaktovať podporu Podpora
Centrum pomoci KWIGA Služby, integrácie, API, Nastavenia Služby Export údajov do Tabuliek Google

Export údajov do Tabuliek Google

Články:

Ukážeme vám, ako nastaviť automatický export údajov z Kwiga do Tabuliek Google.


Export údajov pre rôzne udalosti môžete nastaviť pomocou automatizácie (ako udalosť môžete zadať pridanie kontaktu, pridanie značky, úspešný alebo neúspešný nákup atď.; úplný zoznam udalostí je dostupný v článku).

Okrem toho môžete pri používaní widgetov využiť možnosť odoslať webhook; postup zostáva rovnaký.

Hlavné kroky:

  1. Vytvorte súbor a pridajte doň skript

  2. Vytvorte webovú aplikáciu a získajte odkaz na odosielanie webhooku

  3. Nastavte odosielanie webhooku pomocou automatizácie v Kwiga alebo odoslaním formulára vo widgete.

Celý proces je zobrazený vo videu a nevyžaduje znalosti programovania. Stačí postupovať podľa uvedených krokov. Ak niečo nebude fungovať, kontaktujte podporu.

 

Krok 1: Vytvorte súbor, do ktorého sa budú odosielať údaje z Kwiga

Otvorte Google Sheets a vytvorte nový súbor, potom otvorte editor skriptov.

Otvorí sa nové okno, do ktorého editora je potrebné vložiť skript. Skript si môžete stiahnuť prostredníctvom odkazu (alebo skopírovať text v spodnej časti článku). Musíte odstrániť všetok text, ktorý sa už v editore nachádza.

Konečný výsledok:

Krok 2: Vytvorte webovú aplikáciu a získajte odkaz na odosielanie webhooku

V tom istom editore skriptov nájdite tlačidlo Deploy a vyberte možnosť New deployment

Ako typ vyberte Web app a v rozbaľovacej ponuke Who has access nastavte Everyone, potom kliknite na Deploy.

Výsledkom bude Web App URL, ktoré potom musíte pridať v Kwiga.

 

Krok 3: Nastavte odosielanie údajov v Kwiga

V hornom menu kliknite na tlačidlo All solutions a vyberte Automation. Vytvorte nový spúšťač a vyberte udalosť, ktorá spustí automatizáciu. Môže to byť pridanie kontaktu, pridanie značky, platba alebo akákoľvek iná udalosť.

Potom prejdite nižšie a v akciách vyberte Webhook - Send data. Do poľa s odkazom zadajte Web App URL, typ požiadavky POST a vyberte polia, ktoré sa majú exportovať do tabuľky.

Uložte nastavenia a všetky kroky sú dokončené.

 

Prípadne môžete nastaviť odosielanie webhooku z widgetu; táto možnosť je dostupná pri použití prvku Form. Zaškrtnite možnosť Additionally send to a third-party service a potom do otvoreného formulára pridajte odkaz, typ požiadavky POST a vyberte parametre, ktoré sa majú odoslať. V tomto zozname budú dostupné len parametre, ktoré sa nachádzajú vo formulári (v tomto widgete).

 

Ako funguje skript Google Sheets pre webhooky

  • Pri prvom volaní webhooku sa hlavičky tabuľky automaticky vytvoria na základe kľúčov prichádzajúcich údajov
  • Ak tabuľka už obsahuje hlavičky a potrebujete začať prijímať nové dátové polia, pridajte tieto hlavičky do tabuľky manuálne
  • Hlavičky je možné v tabuľke preusporiadať – skript automaticky určí ich pozície
  • Skript predvolene pridáva nové záznamy pri každom prijatí webhooku
  • Ak sú v keyColumns zadané polia, skript aktualizuje existujúce záznamy alebo pridá nové, ak nenájde zhodu
  • ⚠️ Dôležité: Po zmene skriptu ho musíte znova nasadiť v službe Google Apps Script a aktualizovať odkaz webhooku

Výber hárka:

  • Predvolene sa používa aktívny hárok
  • Možno ho prepísať prostredníctvom parametrov webhooku:
  • "sheet_name": "Názov hárka" - na výber hárka podľa názvu
  • "sheet_index": 2 - na výber hárka podľa čísla (od 1)
// ============================================================
// NASTAVENIA SKRIPTU
// ============================================================

// Kontrola duplicít – zadajte polia na vyhľadanie existujúcich záznamov
// Príklady použitia:
// var keyColumns = ["email"];           - kontrola podľa e-mailu
// var keyColumns = ["order_id"];        - kontrola podľa ID objednávky
// var keyColumns = ["email", "order_id"];  - kontrola podľa viacerých polí
var keyColumns = []; // Kontrola duplicít je vypnutá

// ============================================================

// Funkcia na odoslanie odpovede
function sendResponse(success, message) {
    var response = {
        "status": success ? "success" : "error",
        "message": message
    };
    return ContentService.createTextOutput(JSON.stringify(response))
        .setMimeType(ContentService.MimeType.JSON);
}

// Získavanie cieľového hárka na zadávanie údajov
function getTargetSheet(hook_data) {
    var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();

    // Kontrola, či je zadaný názov hárka
    if (hook_data && hook_data.sheet_name) {
        try {
            var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
            if (sheet) {
                return sheet;
            }
        } catch (error) {
            // Hárok sa nenašiel
        }
    }

    // Kontrola, či je zadané číslo hárka
    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; // Prevod na index od 0
            if (index >= 0 && index < sheets.length) {
                return sheets[index];
            }
        } catch (error) {
            // Neplatný index hárka
        }
    }

    // Predvolene sa použije aktívny hárok
    return SpreadsheetApp.getActiveSheet();
}

// Vytvára hlavičky v tabuľke na základe poskytnutých údajov
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;
}

// Spracovanie prichádzajúceho webhooku
function doPost(e) {
    var hook_load = null;

    // Kontrola údajov POST
    if (!e || !e.postData || !e.postData.contents) {
        return sendResponse(false, "Žiadne údaje na spracovanie");
    }

    // Analýza údajov JSON
    try {
        hook_load = JSON.parse(e.postData.contents);
    } catch (error) {
        return sendResponse(false, "Chyba pri analýze údajov JSON");
    }

    // Overenie prijatých údajov
    if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
        return sendResponse(false, "Boli prijaté nesprávne alebo prázdne údaje");
    }

    try {
        // Získavanie cieľového hárka
        var sheet = getTargetSheet(hook_load);
        if (!sheet) {
            return sendResponse(false, "Nepodarilo sa nájsť zadaný hárok");
        }

        // Vytváranie hlavičiek, ak je tabuľka prázdna
        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 duplicít
        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; // účtovanie hlavičiek
                    break;
                }
            }
        }

        // Príprava údajov na zápis
        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];
            }
        }

        // Ukladanie údajov do tabuľky
        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, "Údaje boli úspešne uložené");

    } catch (error) {
        return sendResponse(false, "Chyba pri ukladaní údajov: " + error.message);
    }
}