Άρθρα:
- Data export to Google Sheets
- Σύνδεση του Facebook Pixel με ένα έργο στο Kwiga
- Sending a webhook to transfer data to another service
- Ενσωμάτωση και χρήση του Zoom — βασικές πληροφορίες
- Δημιουργία συνδέσμων πληρωμής με προσυμπληρωμένα δεδομένα
- Gestionar un clic de botón en el widget
- 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.
Μπορείτε να ρυθμίσετε την εξαγωγή δεδομένων για διάφορα συμβάντα χρησιμοποιώντας την αυτοματοποίηση (μπορείτε να ορίσετε ως συμβάν την προσθήκη επαφής, την προσθήκη ετικέτας, την επιτυχημένη ή αποτυχημένη αγορά κ.λπ.· η πλήρης λίστα συμβάντων είναι διαθέσιμη στο άρθρο).
Επιπλέον, μπορείτε να χρησιμοποιήσετε την επιλογή αποστολής webhook κατά τη χρήση widgets· η ροή εργασίας παραμένει η ίδια.
Κύρια βήματα:
-
Δημιουργήστε ένα αρχείο και προσθέστε το script σε αυτό
-
Δημιουργήστε μια web app και λάβετε τον σύνδεσμο για την αποστολή του webhook
-
Ρυθμίστε την αποστολή webhook χρησιμοποιώντας την αυτοματοποίηση στο Kwiga ή την υποβολή φόρμας στο widget.
Η όλη διαδικασία παρουσιάζεται στο βίντεο και δεν απαιτεί γνώσεις προγραμματισμού. Απλώς ακολουθήστε τα παρεχόμενα βήματα και, αν κάτι δεν λειτουργεί, επικοινωνήστε με την υποστήριξη.
Βήμα 1: Δημιουργήστε ένα αρχείο όπου θα αποστέλλονται τα δεδομένα από το Kwiga
Ανοίξτε το Google Sheets και δημιουργήστε ένα νέο αρχείο, έπειτα ανοίξτε τον επεξεργαστή script.
Θα ανοίξει ένα νέο παράθυρο και θα πρέπει να επικολλήσετε το script στον επεξεργαστή του. Μπορείτε να κατεβάσετε το script μέσω του συνδέσμου (ή να αντιγράψετε το κείμενο στο κάτω μέρος του άρθρου). Πρέπει να διαγράψετε όλο το κείμενο που υπάρχει ήδη στον επεξεργαστή.
Τελικό αποτέλεσμα:
Βήμα 2: Δημιουργήστε μια web app και λάβετε τον σύνδεσμο για την αποστολή του webhook
Στον ίδιο επεξεργαστή script, βρείτε το κουμπί Deploy και επιλέξτε New deployment
Επιλέξτε Web app ως τύπο και στο αναπτυσσόμενο πεδίο Who has access ορίστε το σε Everyone και μετά κάντε κλικ στο Deploy.
Ως αποτέλεσμα, θα λάβετε το Web App URL, το οποίο στη συνέχεια πρέπει να προσθέσετε στο Kwiga.
Βήμα 3: Ρυθμίστε την αποστολή δεδομένων στο Kwiga
Κάντε κλικ στο κουμπί All solutions στο επάνω μενού και επιλέξτε Automation. Δημιουργήστε ένα νέο trigger και επιλέξτε το συμβάν που θα εκκινεί την αυτοματοποίηση. Αυτό μπορεί να είναι προσθήκη επαφής, προσθήκη ετικέτας, πληρωμή ή οποιοδήποτε άλλο συμβάν.
Έπειτα, κάντε κύλιση προς τα κάτω και επιλέξτε Webhook - Send data στις ενέργειες. Στο πεδίο συνδέσμου, καθορίστε το Web App URL, τύπο αιτήματος POST και επιλέξτε τα πεδία που πρέπει να εξαχθούν στον πίνακα.
Αποθηκεύστε το και όλα τα βήματα θα έχουν ολοκληρωθεί.
Εναλλακτικά, μπορείτε να ρυθμίσετε την αποστολή webhook από το widget· αυτό είναι διαθέσιμο όταν χρησιμοποιείτε το στοιχείο Form. Επιλέξτε την επιλογή Additionally send to a third-party service και, στη φόρμα που ανοίγει, προσθέστε τον σύνδεσμο, τον τύπο αιτήματος POST και επιλέξτε τις παραμέτρους προς αποστολή. Μόνο οι παράμετροι που υπάρχουν στη φόρμα (σε αυτό το widget) θα είναι διαθέσιμες σε αυτή τη λίστα.
Πώς λειτουργεί το script του Google Sheets για webhooks
- Κατά την πρώτη κλήση του webhook, οι κεφαλίδες του πίνακα δημιουργούνται αυτόματα με βάση τα κλειδιά των εισερχόμενων δεδομένων
- Αν ο πίνακας έχει ήδη κεφαλίδες και χρειάζεται να αρχίσετε να λαμβάνετε νέα πεδία δεδομένων, προσθέστε αυτές τις κεφαλίδες στον πίνακα χειροκίνητα
- Οι κεφαλίδες μπορούν να αλλάξουν θέση στον πίνακα - το script θα καθορίσει αυτόματα τις θέσεις τους
- Από προεπιλογή, το script προσθέτει νέες εγγραφές κάθε φορά που λαμβάνει το webhook
- Αν καθορίσετε πεδία στο keyColumns, το script θα ενημερώνει τις υπάρχουσες εγγραφές ή θα προσθέτει νέες αν δεν βρει αντιστοιχία
- ⚠️ Σημαντικό: Μετά την αλλαγή του script, πρέπει να κάνετε νέα ανάπτυξη στο Google Apps Script και να ενημερώσετε τον σύνδεσμο του webhook
Επιλογή φύλλου πίνακα:
- Από προεπιλογή χρησιμοποιείται το ενεργό φύλλο
- Μπορεί να επανακαθοριστεί μέσω των παραμέτρων του webhook:
- "sheet_name": "Όνομα φύλλου" - για επιλογή φύλλου με βάση το όνομα
- "sheet_index": 2 - για επιλογή φύλλου με βάση τον αριθμό (ξεκινώντας από το 1)
// ============================================================
// ΡΥΘΜΙΣΕΙΣ ΣΕΝΑΡΙΟΥ
// ============================================================
// Έλεγχος διπλοτύπων - καθορίστε τα πεδία για αναζήτηση υπαρχόντων εγγραφών
// Παραδείγματα χρήσης:
// var keyColumns = ["email"]; - έλεγχος μέσω email
// var keyColumns = ["order_id"]; - έλεγχος μέσω ID παραγγελίας
// var keyColumns = ["email", "order_id"]; - έλεγχος μέσω πολλαπλών πεδίων
var keyColumns = []; // Ο έλεγχος διπλοτύπων είναι απενεργοποιημένος
// ============================================================
// Λειτουργία για αποστολή απάντησης
function sendResponse(success, message) {
var response = {
"status": success ? "success" : "error",
"message": message
};
return ContentService.createTextOutput(JSON.stringify(response))
.setMimeType(ContentService.MimeType.JSON);
}
// Λήψη σελίδας στόχου για εγγραφή δεδομένων
function getTargetSheet(hook_data) {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Ελέγχουμε αν έχει καθοριστεί το όνομα της σελίδας
if (hook_data && hook_data.sheet_name) {
try {
var sheet = spreadsheet.getSheetByName(hook_data.sheet_name);
if (sheet) {
return sheet;
}
} catch (error) {
// Η σελίδα δεν βρέθηκε
}
}
// Ελέγχουμε αν έχει καθοριστεί ο αριθμός της σελίδας
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; // Μετατροπή σε δείκτη από 0
if (index >= 0 && index < sheets.length) {
return sheets[index];
}
} catch (error) {
// Μη έγκυρος δείκτης σελίδας
}
}
// Χρησιμοποιούμε την ενεργή σελίδα από προεπιλογή
return SpreadsheetApp.getActiveSheet();
}
// Δημιουργεί επικεφαλίδες στον πίνακα με βάση τα δεδομένα που παρέχονται
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;
}
// Επεξεργασία εισερχόμενου webhook
function doPost(e) {
var hook_load = null;
// Ελέγχουμε την ύπαρξη δεδομένων POST
if (!e || !e.postData || !e.postData.contents) {
return sendResponse(false, "Δεν υπάρχουν δεδομένα για επεξεργασία");
}
// Ανάλυση δεδομένων JSON
try {
hook_load = JSON.parse(e.postData.contents);
} catch (error) {
return sendResponse(false, "Σφάλμα ανάλυσης δεδομένων JSON");
}
// Επικύρωση των ληφθέντων δεδομένων
if (!hook_load || typeof hook_load !== 'object' || Object.keys(hook_load).length === 0) {
return sendResponse(false, "Λήφθηκαν μη έγκυρα ή κενά δεδομένα");
}
try {
// Λήψη σελίδας στόχου
var sheet = getTargetSheet(hook_load);
if (!sheet) {
return sendResponse(false, "Δεν ήταν δυνατή η εύρεση της καθορισμένης σελίδας");
}
// Δημιουργία επικεφαλίδων, αν ο πίνακας είναι κενός
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];
}
// Έλεγχος διπλοτύπων
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; // καταγραφή επικεφαλίδων
break;
}
}
}
// Προετοιμασία δεδομένων για εγγραφή
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];
}
}
// Αποθήκευση δεδομένων στον πίνακα
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, "Τα δεδομένα αποθηκεύτηκαν με επιτυχία");
} catch (error) {
return sendResponse(false, "Σφάλμα κατά την αποθήκευση δεδομένων: " + error.message);
}
}
Δεν βρήκατε απάντηση; Επικοινωνήστε με την υποστήριξη στην συνομιλία ή Telegram