სტატიები:
- Data export to Google Sheets
- FB Pixel-ის დაკავშირება Kwiga-ზე პროექტთან
- Sending a webhook to transfer data to another service
- Zoom-ის ინტეგრაცია და გამოყენების საფუძვლები
- წინასწარ შევსებული მონაცემებით გადახდის ბმულების გენერირება
- ვიჯეტში ღილაკზე დაწკაპუნების დამუშავება
- 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-ის გაგზავნის ვარიანტიც; პროცესი იგივე რჩება.
ძირითადი ნაბიჯები:
-
შექმენით ფაილი და დაამატეთ მასში სკრიპტი
-
შექმენით web app და მიიღეთ webhook-ის გასაგზავნი ბმული
-
დააყენეთ webhook-ის გაგზავნა Kwiga-ში ავტომატიზაციის ან ვიჯეტში ფორმის გაგზავნის გამოყენებით.
მთელი პროცესი ნაჩვენებია ვიდეოში და არ მოითხოვს პროგრამირების ცოდნას. უბრალოდ მიჰყევით მოცემულ ნაბიჯებს, და თუ რაღაც არ გამოვა, დაუკავშირდით მხარდაჭერას.
ნაბიჯი 1: შექმენით ფაილი, სადაც Kwiga-დან მონაცემები გაიგზავნება
გახსენით Google Sheets და შექმენით ახალი ფაილი, შემდეგ გახსენით სკრიპტის რედაქტორი.
გაიხსნება ახალი ფანჯარა და მის რედაქტორში უნდა ჩასვათ სკრიპტი. სკრიპტის ჩამოტვირთვა შეგიძლიათ ბმულით (ან დააკოპიროთ ტექსტი სტატიის ბოლოში). უნდა წაშალოთ მთელი ტექსტი, რომელიც უკვე არის რედაქტორში.
საბოლოო შედეგი:
ნაბიჯი 2: შექმენით web app და მიიღეთ webhook-ის გასაგზავნი ბმული
იმავე სკრიპტის რედაქტორში იპოვეთ Deploy ღილაკი და აირჩიეთ New deployment
აირჩიეთ ტიპად Web app, ხოლო Who has access ჩამოშლილ სიაში დააყენეთ Everyone, შემდეგ დააჭირეთ Deploy-ს.
შედეგად მიიღებთ Web App URL-ს, რომელიც შემდეგ უნდა დაამატოთ Kwiga-ში.
ნაბიჯი 3: დააყენეთ მონაცემების გაგზავნა Kwiga-ში
ზედა მენიუში დააჭირეთ ღილაკს All solutions და აირჩიეთ Automation. შექმენით ახალი ტრიგერი და აირჩიეთ მოვლენა, რომელიც ავტომატიზაციას გაუშვებს. ეს შეიძლება იყოს კონტაქტის დამატება, ტეგის დამატება, გადახდა ან ნებისმიერი სხვა მოვლენა.
ამის შემდეგ ჩასქროლეთ ქვემოთ და მოქმედებებში აირჩიეთ Webhook - Send data. ბმულის ველში მიუთითეთ Web App URL, მოთხოვნის ტიპი POST და აირჩიეთ ველები, რომლებიც ცხრილში უნდა ექსპორტირდეს.
შეინახეთ, და ყველა ნაბიჯი დასრულებულია.
ალტერნატიულად, შეგიძლიათ დააყენოთ webhook-ის გაგზავნა ვიჯეტიდან; ეს ხელმისაწვდომია Form ელემენტის გამოყენებისას. მონიშნეთ ვარიანტი Additionally send to a third-party service, შემდეგ გახსნილ ფორმაში დაამატეთ ბმული, მოთხოვნის ტიპი POST და აირჩიეთ გასაგზავნი პარამეტრები. ამ სიაში ხელმისაწვდომი იქნება მხოლოდ ის პარამეტრები, რომლებიც ფორმაში (ამ ვიჯეტში) არის წარმოდგენილი.
როგორ მუშაობს Google Sheets-ის სკრიპტი ვებჰუკებისთვის
- პირველ ვებჰუკის მოთხოვნაზე ავტომატურად იქმნება ცხრილის სათაურები შემომავალი მონაცემების გასაღებების საფუძველზე
- თუ ცხრილში უკვე არის სათაურები და გსურთ ახალი მონაცემების ველების მიღება, დაამატეთ ეს სათაურები ცხრილში ხელით
- სათაურების ადგილების შეცვლა შესაძლებელია ცხრილში - სკრიპტი ავტომატურად განსაზღვრავს მათ პოზიციებს
- ნაგულისხმევად, სკრიპტი ამატებს ახალ ჩანაწერებს ყოველ ვებჰუკის მიღებაზე
- თუ მიუთითებთ ველებს keyColumns-ში, სკრიპტი განაახლებს არსებულ ჩანაწერებს ან დაამატებს ახალს, თუ ვერ იპოვის დამთხვევას
- ⚠️ მნიშვნელოვანია: სკრიპტის ცვლილების შემდეგ აუცილებელია ახალი განლაგების გაკეთება Google Apps Script-ში და ვებჰუკის ბმულის განახლება
ცხრილის ფურცლის არჩევა:
- ნაგულისხმევად გამოიყენება აქტიური ფურცელი
- შესაძლებელია ვებჰუკის პარამეტრებით გადალახვა:
- "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;
}
// შემომავალი ვებჰუკის დამუშავება
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);
}
}