บทความ:
- การส่งออกข้อมูลไปยัง Google Sheets
- การเชื่อมต่อ FB Pixel กับโปรเจ็กต์บน Kwiga
- การส่งเว็บฮุกเพื่อถ่ายโอนข้อมูลไปยังบริการอื่น
- การผสานการทำงานกับ Zoom และข้อมูลสำคัญเกี่ยวกับการใช้งาน
- การสร้างลิงก์ชำระเงินพร้อมข้อมูลที่กรอกไว้ล่วงหน้า
- การจัดการการคลิกปุ่มในวิดเจ็ต
- การส่งเว็บฮุกไปยัง KeyCRM โดยแยกใบสมัครและการชำระเงิน
- การเชื่อมต่อบริการแชทกับโปรเจกต์ Kwiga
เราจะแสดงวิธีตั้งค่าการส่งออกข้อมูลอัตโนมัติจาก Kwiga ไปยัง Google Sheets
คุณสามารถตั้งค่าการส่งออกข้อมูลสำหรับเหตุการณ์ต่างๆ โดยใช้ระบบอัตโนมัติ (คุณสามารถระบุการเพิ่มผู้ติดต่อ การเพิ่มแท็ก การซื้อสำเร็จหรือล้มเหลว เป็นต้น เป็นเหตุการณ์ได้ โดยมีรายการเหตุการณ์ทั้งหมดอยู่ ในบทความ).
นอกจากนี้ คุณยังสามารถใช้ตัวเลือกเพื่อส่ง webhook เมื่อใช้วิดเจ็ตได้ โดยเวิร์กโฟลว์ยังคงเหมือนเดิม
ขั้นตอนหลัก:
-
สร้างไฟล์และเพิ่มสคริปต์ลงในไฟล์
-
สร้างเว็บแอปและรับลิงก์สำหรับส่ง webhook
-
ตั้งค่าการส่ง webhook โดยใช้ระบบอัตโนมัติใน Kwiga หรือการส่งแบบฟอร์มในวิดเจ็ต
กระบวนการทั้งหมดแสดงอยู่ในวิดีโอและ ไม่ จำเป็นต้องมีความรู้ด้านการเขียนโปรแกรม เพียงทำตามขั้นตอนที่ระบุไว้ และหากมีบางอย่างใช้งานไม่ได้ โปรดติดต่อฝ่ายสนับสนุน
ขั้นตอนที่ 1: สร้างไฟล์ที่จะรับข้อมูลจาก Kwiga
เปิด Google Sheets และสร้างไฟล์ใหม่ จากนั้นเปิดตัวแก้ไขสคริปต์
หน้าต่างใหม่จะเปิดขึ้น และคุณต้องวางสคริปต์ลงในตัวแก้ไข คุณสามารถดาวน์โหลดสคริปต์ได้ ผ่านลิงก์ (หรือคัดลอกข้อความที่ด้านล่างของบทความ) คุณต้องลบข้อความทั้งหมดที่มีอยู่ในตัวแก้ไขออก
ผลลัพธ์สุดท้าย:
ขั้นตอนที่ 2: สร้างเว็บแอปและรับลิงก์สำหรับส่ง 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"]; - ตรวจสอบด้วยอีเมล
// var keyColumns = ["order_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);
}
}
ไม่พบคำตอบที่ต้องการ? ติดต่อฝ่ายสนับสนุนผ่าน แชตออนไลน์ หรือ Telegram