Artykuły:
- Eksport danych do Google Sheets
- Połączenie FB Pixel z projektem na Kwiga
- Wysyłanie webhooka do przesyłania danych do innej usługi
- Podstawy integracji i użytkowania Zoom
- Generowanie linków do płatności z wstępnie wypełnionymi danymi
- Obsługa kliknięć przycisków w widżecie i podstawy użytkowania
- Wysyłanie webhooka do KeyCRM z podziałem na aplikację i płatność
Pokażemy Ci, jak skonfigurować automatyczny eksport danych z Kwiga do Google Sheets.
Możesz skonfigurować eksport danych dla różnych zdarzeń za pomocą automatyzacji (jako zdarzenie możesz określić dodanie kontaktu, dodanie tagu, udany lub nieudany zakup itp.; pełna lista zdarzeń jest dostępna w artykule).
Dodatkowo możesz skorzystać z opcji wysyłania webhooka podczas używania widżetów; proces pozostaje taki sam.
Główne kroki:
-
Utwórz plik i dodaj do niego skrypt
-
Utwórz aplikację internetową i uzyskaj link do wysyłania webhooka
-
Skonfiguruj wysyłanie webhooka za pomocą automatyzacji w Kwiga lub przez wysłanie formularza w widżecie.
Cały proces jest pokazany na wideo i nie wymaga wiedzy programistycznej. Wystarczy wykonać podane kroki, a jeśli coś nie zadziała, skontaktuj się z pomocą techniczną.
Krok 1: Utwórz plik, do którego będą wysyłane dane z Kwiga
Otwórz Google Sheets i utwórz nowy plik, a następnie otwórz edytor skryptów.
Otworzy się nowe okno i musisz wkleić skrypt do jego edytora. Skrypt możesz pobrać pod tym linkiem (lub skopiować tekst na dole artykułu). Musisz usunąć cały tekst, który już znajduje się w edytorze.
Efekt końcowy:
Krok 2: Utwórz aplikację internetową i uzyskaj link do wysyłania webhooka
W tym samym edytorze skryptów znajdź przycisk Deploy i wybierz New deployment
Wybierz Web app jako typ, a na liście rozwijanej Who has access ustaw Everyone, a następnie kliknij Deploy.
W rezultacie otrzymasz Web App URL, który następnie musisz dodać w Kwiga.
Krok 3: Skonfiguruj wysyłanie danych w Kwiga
Kliknij przycisk All solutions w górnym menu i wybierz Automation. Utwórz nowy wyzwalacz i wybierz zdarzenie, które uruchomi automatyzację. Może to być dodanie kontaktu, dodanie tagu, płatność lub dowolne inne zdarzenie.
Następnie przewiń w dół i w działaniach wybierz Webhook - Send data. W polu linku podaj Web App URL, typ żądania POST i wybierz pola, które mają zostać wyeksportowane do tabeli.
Zapisz to, i wszystkie kroki będą zakończone.
Alternatywnie możesz skonfigurować wysyłanie webhooka z widżetu; jest to dostępne podczas korzystania z elementu Form. Zaznacz opcję Additionally send to a third-party service, a następnie w otwartym formularzu dodaj link, typ żądania POST i wybierz parametry do wysłania. Na tej liście będą dostępne tylko parametry obecne w formularzu (tym widżecie).
Jak działa skrypt Google Sheets dla webhooków
- Przy pierwszym wywołaniu webhooka nagłówki tabeli są automatycznie tworzone na podstawie kluczy danych wejściowych
- Jeśli tabela ma już nagłówki i chcesz zacząć otrzymywać nowe pola danych, dodaj te nagłówki ręcznie do tabeli
- Nagłówki można zamieniać miejscami w tabeli - skrypt automatycznie określi ich pozycje
- Domyślnie skrypt dodaje nowe wpisy przy każdym otrzymaniu webhooka
- Jeśli określisz pola w keyColumns, skrypt będzie aktualizować istniejące wpisy lub dodawać nowe, jeśli nie znajdzie dopasowania
- ⚠️ Ważne: Po zmianie skryptu należy wykonać nowe wdrożenie w Google Apps Script i zaktualizować link do webhooka
Wybór arkusza tabeli:
- Domyślnie używany jest aktywny arkusz
- Można to nadpisać przez parametry webhooka:
- "sheet_name": "Nazwa arkusza" - aby wybrać arkusz po nazwie
- "sheet_index": 2 - aby wybrać arkusz po numerze (zaczynając od 1)
// ============================================================
// USTAWIENIA SKRYPTU
// ============================================================
// Sprawdzanie duplikatów - określ pola do wyszukiwania istniejących rekordów
// Przykłady użycia:
// var keyColumns = ["email"]; - sprawdzanie po email
// var keyColumns = ["order_id"]; - sprawdzanie po ID zamówienia
// var keyColumns = ["email", "order_id"]; - sprawdzanie po kilku polach
var keyColumns = []; // Sprawdzanie duplikatów wyłączone
// ============================================================
// Funkcja do wysyłania odpowiedzi
function sendResponse(success, message) {
var response = {
"status": success ? "success" : "error",
"message": message
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
// Pobieranie strony docelowej do zapisu danych
function getTargetSheet(hook_data) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Sprawdzamy, czy podano nazwę strony
if (hook_data && hook_data.sheet_name) {
try {
var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
if (sheet) {
return sheet;
}
} catch (error) {
// Strona nie znaleziona
}
}
// Sprawdzamy, czy podano numer strony
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; // Konwertujemy na indeks od 0
if (index >= 0 && index < sheets.length) {
return sheets[index];
}
} catch (error) {
// Nieprawidłowy indeks strony
}
}
// Domyślnie używamy aktywnej strony
return SpreadsheetApp.getActiveSheet();
}
// Tworzy nagłówki w tabeli na podstawie przekazanych danych
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;
}
// Przetwarzanie przychodzącego webhooka
function doPost(e) {
var hook_load = null;
// Sprawdzamy obecność danych POST
if (!e || !e.postData || !e.postData.contents) {
return sendResponse(false, "Brak danych do przetworzenia");
}
// Parsujemy dane JSON
try {
hook_load = JSON.parse(e.postData.contents);
} catch (error) {
return sendResponse(false, "Błąd parsowania danych JSON");
}
// Walidacja otrzymanych danych
if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
return sendResponse(false, "Otrzymano nieprawidłowe lub puste dane");
}
try {
// Pobieramy stronę docelową
var sheet = getTargetSheet(hook_load);
if (!sheet) {
return sendResponse(false, "Nie udało się znaleźć podanej strony");
}
// Tworzenie nagłówków, jeśli tabela jest pusta
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];
}
// Sprawdzanie duplikatów
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; // uwzględnienie nagłówków
break;
}
}
}
// Przygotowanie danych do zapisu
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];
}
}
// Zapisywanie danych w tabeli
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, "Dane zostały pomyślnie zapisane");
} catch (error) {
return sendResponse(false, "Błąd przy zapisywaniu danych: " + error.message);
}
}
Nie znalazłeś odpowiedzi? Skontaktuj się z usługą wsparcia za pośrednictwem czat online or Telegram