Članci:
- Izvoz podataka u Google Sheets
- Povezivanje FB Pixela sa projektom na Kwiga platformi
- Slanje webhooka za prenos podataka u drugu uslugu
- Osnove Zoom integracije i korišćenja
- Generisanje linkova za plaćanje sa unapred popunjenim podacima
- Obrada klika na dugme u vidžetu
- Slanje webhook-a u KeyCRM uz razdvajanje prijave i plaćanja.
- Povezivanje chat usluga sa Kwiga projektom
Pokazaćemo vam kako da podesite automatski izvoz podataka iz Kwiga u Google Sheets.
Možete podesiti izvoz podataka za različite događaje pomoću automatizacije (kao događaj možete navesti dodat kontakt, dodatu oznaku, uspešnu ili neuspešnu kupovinu itd.; kompletna lista događaja dostupna je u članku).
Pored toga, možete koristiti opciju slanja webhooka pri korišćenju vidžeta; tok rada ostaje isti.
Glavni koraci:
-
Kreirajte datoteku i dodajte skriptu u nju
-
Kreirajte veb-aplikaciju i preuzmite link za slanje webhooka
-
Podesite slanje webhooka pomoću automatizacije u Kwiga ili slanjem obrasca u vidžetu.
Ceo proces je prikazan u videu i ne zahteva poznavanje programiranja. Samo pratite navedene korake, a ako nešto ne uspe, kontaktirajte podršku.
Korak 1: Kreirajte datoteku u koju će se slati podaci iz Kwiga
Otvorite Google Sheets i kreirajte novu datoteku, a zatim otvorite uređivač skripti.
Otvoriće se novi prozor i potrebno je da nalepite skriptu u njegov uređivač. Skriptu možete preuzeti putem linka (ili kopirati tekst na dnu članka). Potrebno je da obrišete sav tekst koji se već nalazi u uređivaču.
Konačni rezultat:
Korak 2: Kreirajte veb-aplikaciju i preuzmite link za slanje webhooka
U istom uređivaču skripti pronađite dugme Deploy i izaberite New deployment
Izaberite Web app kao tip, a u padajućem meniju Who has access postavite Everyone, zatim kliknite na Deploy.
Kao rezultat, dobićete Web App URL, koji zatim treba da dodate u Kwiga.
Korak 3: Podesite slanje podataka u Kwiga
Kliknite na dugme All solutions u gornjem meniju i izaberite Automation. Kreirajte novi okidač i odaberite događaj koji će pokrenuti automatizaciju. To može biti dodat kontakt, dodata oznaka, plaćanje ili bilo koji drugi događaj.
Nakon toga, pomerite se nadole i u radnjama izaberite Webhook - Send data. U polju za link navedite Web App URL, tip zahteva POST i odaberite polja koja treba izvesti u tabelu.
Sačuvajte i svi koraci su završeni.
Alternativno, možete podesiti slanje webhooka iz vidžeta; ovo je dostupno kada koristite element Form. Označite opciju Additionally send to a third-party service, a zatim u obrascu koji se otvori dodajte link, tip zahteva POST i odaberite parametre za slanje. Na ovoj listi biće dostupni samo parametri koji su prisutni u obrascu (ovom vidžetu).
Kako funkcioniše Google Sheets skripta za webhookove
- Pri prvom webhook pozivu, zaglavlja tabele se automatski kreiraju na osnovu ključeva dolaznih podataka
- Ako tabela već ima zaglavlja i treba da počnete da primate nova polja podataka, ručno dodajte ta zaglavlja u tabelu
- Zaglavlja se mogu preurediti u tabeli - skripta će automatski odrediti njihove pozicije
- Podrazumevano, skripta dodaje nove unose svaki put kada primi webhook
- Ako su polja navedena u keyColumns, skripta će ažurirati postojeće unose ili dodati nove ako nije pronađeno podudaranje
- ⚠️ Važno: Nakon izmene skripte, potrebno je da je ponovo postavite u Google Apps Script i ažurirate webhook link
Izbor lista:
- Podrazumevano se koristi aktivni list
- Može se zameniti putem parametara webhooka:
- "sheet_name": "Sheet Name" - za izbor lista po nazivu
- "sheet_index": 2 - za izbor lista po broju (počevši od 1)
// ============================================================
// PODEŠAVANJA SKRIPTE
// ============================================================
// Provera duplikata - navedite polja za pretragu postojećih zapisa
// Primeri upotrebe:
// var keyColumns = ["email"]; - provera po email adresi
// var keyColumns = ["order_id"]; - provera po ID-u porudžbine
// var keyColumns = ["email", "order_id"]; - provera po više polja
var keyColumns = []; // Provera duplikata je onemogućena
// ============================================================
// Funkcija za slanje odgovora
function sendResponse(success, message) {
var response = {
"status": success ? "success" : "error",
"message": message
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
// Dobijanje ciljne stranice za unos podataka
function getTargetSheet(hook_data) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Provera da li je naveden naziv stranice
if (hook_data && hook_data.sheet_name) {
try {
var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
if (sheet) {
return sheet;
}
} catch (error) {
// Stranica nije pronađena
}
}
// Provera da li je naveden broj stranice
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; // Pretvaranje u indeks od 0
if (index >= 0 && index < sheets.length) {
return sheets[index];
}
} catch (error) {
// Nevažeći indeks stranice
}
}
// Podrazumevano se koristi aktivna stranica
return SpreadsheetApp.getActiveSheet();
}
// Kreira zaglavlja u tabeli na osnovu dostavljenih podataka
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;
}
// Obrada dolaznog webhooka
function doPost(e) {
var hook_load = null;
// Provera POST podataka
if (!e || !e.postData || !e.postData.contents) {
return sendResponse(false, "Nema podataka za obradu");
}
// Parsiranje JSON podataka
try {
hook_load = JSON.parse(e.postData.contents);
} catch (error) {
return sendResponse(false, "Greška pri parsiranju JSON podataka");
}
// Validacija primljenih podataka
if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
return sendResponse(false, "Primljeni su neispravni ili prazni podaci");
}
try {
// Dobijanje ciljne stranice
var sheet = getTargetSheet(hook_load);
if (!sheet) {
return sendResponse(false, "Nije moguće pronaći navedenu stranicu");
}
// Kreiranje zaglavlja ako je tabela prazna
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];
}
// Provera duplikata
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; // obrada zaglavlja
break;
}
}
}
// Priprema podataka za unos
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];
}
}
// Čuvanje podataka u 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, "Podaci su uspešno sačuvani");
} catch (error) {
return sendResponse(false, "Greška pri čuvanju podataka: " + error.message);
}
}
Niste pronašli odgovor? Kontaktirajte službu podrške putem onlajn ćaskanja ili Telegram