เว็บฮุคคือ URL ที่ระบุโดยพาร์ทเนอร์ซึ่งแพลตฟอร์ม RBM จะโพสต์ข้อความและเหตุการณ์ URL นี้ทําหน้าที่เป็นปลายทางที่รับคําขอ HTTPS POST ซึ่งมีข้อมูลเกี่ยวกับเหตุการณ์ ซึ่งหมายความว่าระบบจะส่งข้อมูลไปยังแอปพลิเคชันของคุณอย่างปลอดภัยผ่าน HTTPS
URL ของเว็บฮุคอาจมีลักษณะดังนี้
https://[your company name].com/api/rbm-events
เมื่อกําหนดค่า Webhook แล้ว คุณจะเริ่มรับข้อความและเหตุการณ์ได้
เว็บฮุคของพาร์ทเนอร์และเว็บฮุคของตัวแทน
คุณกำหนดค่าเว็บฮุคได้ที่ระดับพาร์ทเนอร์หรือระดับตัวแทน
- Webhook ของพาร์ทเนอร์จะมีผลกับตัวแทนทุกรายที่คุณดูแล หากตัวแทนมีลักษณะการทำงานคล้ายกัน หรือคุณมีตัวแทนเพียงรายเดียว ให้ใช้ Webhook ของพาร์ทเนอร์
- เว็บฮุคของตัวแทนจะมีผลกับตัวแทนแต่ละราย หากมีการใช้งานหลายตัวแทนที่มีลักษณะการทํางานแตกต่างกัน คุณสามารถตั้งค่า Webhook ที่แตกต่างกันสําหรับตัวแทนแต่ละราย
หากคุณกําหนดค่าทั้งเว็บฮุคของพาร์ทเนอร์และเว็บฮุคของตัวแทน เว็บฮุคของตัวแทนจะมีความสําคัญเหนือกว่าตัวแทนที่เฉพาะเจาะจง ขณะที่เว็บฮุคของพาร์ทเนอร์จะมีผลกับตัวแทนที่ไม่มีเว็บฮุคของตนเอง
กำหนดค่าเว็บฮุคของตัวแทน
คุณจะได้รับข้อความที่ส่งไปยังตัวแทนของคุณที่เว็บฮุคของพาร์ทเนอร์ หากต้องการให้ข้อความสำหรับตัวแทนที่เฉพาะเจาะจงมาถึงเว็บฮุคอื่นแทน ให้ตั้งค่าเว็บฮุคของตัวแทน
- เปิดคอนโซลของนักพัฒนาซอฟต์แวร์สำหรับการสื่อสารทางธุรกิจ แล้วลงชื่อเข้าใช้ด้วยบัญชี Google ของพาร์ทเนอร์ RBM
- คลิกตัวแทน
- คลิกการผสานรวม
- สําหรับ Webhook ให้คลิกกําหนดค่า
- ในส่วน URL ปลายทางของเว็บฮุค ให้ป้อน URL ของเว็บฮุคที่ขึ้นต้นด้วย "https://"
- จดค่า
clientToken
คุณต้องใช้รหัสนี้เพื่อยืนยันว่าข้อความที่คุณได้รับมาจาก Google กำหนดค่าเว็บฮุคให้ยอมรับคำขอ
POST
ที่มีพารามิเตอร์clientToken
ที่ระบุ และส่งการตอบกลับ200 OK
พร้อมค่าแบบข้อความธรรมดาของพารามิเตอร์secret
เป็นเนื้อหาการตอบกลับตัวอย่างเช่น หากเว็บฮุกของคุณได้รับคําขอ
POST
ที่มีเนื้อหาต่อไปนี้ในบอดี้{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
จากนั้นเว็บฮุคควรยืนยันค่า
clientToken
และหากclientToken
ถูกต้อง ให้แสดงผลลัพธ์เป็น200 OK
พร้อม1234567890
เป็นเนื้อหาการตอบกลับ// clientToken from Configure const myClientToken = "SJENCPGJESMGUFPY"; // Example endpoint app.post("/rbm-webhook", (req, res) => { const msg = req.body; if (msg.clientToken === myClientToken) { res.status(200).send(msg.secret); return; } res.send(400); });
ใน Developer Console ให้คลิกยืนยัน เมื่อ RBM ยืนยันเว็บฮุกแล้ว กล่องโต้ตอบจะปิดลง
ยืนยันข้อความขาเข้า
เนื่องจาก Webhook สามารถรับข้อความจากผู้ส่งรายใดก็ได้ คุณจึงควรตรวจสอบว่า Google ส่งข้อความขาเข้าก่อนที่จะประมวลผลเนื้อหาข้อความ
หากต้องการยืนยันว่า Google ส่งข้อความที่คุณได้รับ ให้ทำตามขั้นตอนต่อไปนี้
- ดึงข้อมูลส่วนหัว
X-Goog-Signature
ของข้อความ นี่เป็นสำเนาของเพย์โหลดข้อความที่เข้ารหัส Base64 และมีการแฮช - ถอดรหัส Base-64 ของเพย์โหลด RBM ในองค์ประกอบ
message.body
ของคําขอ - ใช้โทเค็นไคลเอ็นต์ของ Webhook (ที่คุณระบุไว้เมื่อตั้งค่า Webhook) เป็นคีย์ สร้าง SHA512 HMAC ของไบต์ของเพย์โหลดข้อความที่ถอดรหัสฐาน 64 และเข้ารหัสฐาน 64 กับผลลัพธ์
- เปรียบเทียบแฮช
X-Goog-Signature
กับแฮชที่คุณสร้างขึ้น- หากแฮชตรงกัน แสดงว่าคุณยืนยันว่า Google ส่งข้อความดังกล่าว
หากแฮชไม่ตรงกัน ให้ตรวจสอบกระบวนการแฮชในข้อความที่ทราบดี
หากกระบวนการแฮชทำงานได้อย่างถูกต้องและคุณได้รับข้อความที่เชื่อว่ามีการส่งมาเพื่อฉ้อโกง โปรดติดต่อเรา
Node.js
if ((requestBody.hasOwnProperty('message')) && (requestBody.message.hasOwnProperty('data'))) { // Validate the received hash to ensure the message came from Google RBM let userEventString = Buffer.from(requestBody.message.data, 'base64'); let hmac = crypto.createHmac('sha512', CLIENT_TOKEN); let data = hmac.update(userEventString); let genHash = data.digest('base64'); let headerHash = req.header('X-Goog-Signature'); if (headerHash === genHash) { let userEvent = JSON.parse(userEventString); console.log('userEventString: ' + userEventString); handleMessage(userEvent); } else { console.log('hash mismatch - ignoring message'); } } res.sendStatus(200);
การจัดการข้อความ
การส่งค่าอื่นที่ไม่ใช่ 200 OK
จากเว็บฮุกจะถือว่าการนำส่งไม่สำเร็จ
นักพัฒนาซอฟต์แวร์ต้องทราบว่าการส่งข้อความในอัตราที่สูงจะสร้างการแจ้งเตือน Webhook ในอัตราที่สูงด้วย และจะต้องออกแบบโค้ดเพื่อให้แน่ใจว่าสามารถรับการแจ้งเตือนในอัตราที่คาดไว้ นักพัฒนาซอฟต์แวร์ต้องพิจารณาสถานการณ์ที่อาจทําให้เกิดการตอบสนองที่ไม่สําเร็จ ซึ่งรวมถึง500
การตอบกลับจากคอนเทนเนอร์เว็บ การหมดเวลา หรือการตอบกลับที่ไม่สําเร็จในระบบนิเวศ สิ่งที่ควรพิจารณามีดังนี้
- ตรวจสอบว่าได้กําหนดค่าการป้องกัน DDoS ให้จัดการอัตราการแจ้งเตือนผ่านเว็บฮุคที่คาดไว้
- ตรวจสอบว่าทรัพยากร เช่น พูลการเชื่อมต่อฐานข้อมูล จะไม่หมดและทำให้เกิดเวลาหมดหรือคำตอบ
500
นักพัฒนาแอปควรตรวจสอบว่าการประมวลผลเหตุการณ์ RBM ทำงานแบบไม่พร้อมกันและไม่ป้องกันไม่ให้ Webhook ส่งคืน 200 OK
โปรดอย่าประมวลผลเหตุการณ์ RBM ภายใน Webhook เอง ข้อผิดพลาดหรือความล่าช้าระหว่างการประมวลผลอาจส่งผลต่อรหัสผลลัพธ์ของ Webhook ดังนี้
ลักษณะการทํางานเมื่อนำส่งไม่สำเร็จ
RBM ใช้กลไกการหยุดชั่วคราวและลองอีกครั้งเมื่อได้รับการตอบกลับที่ไม่ใช่ 200 OK
จากคอล Webhook RBM จะเพิ่มระยะเวลารอระหว่างการพยายามใหม่สูงสุด 600 วินาที ระบบจะพยายามส่งข้อความอีกครั้งเป็นเวลา 7 วัน หลังจากนั้นระบบจะทิ้งข้อความ
ผลกระทบของเว็บฮุคระดับตัวแทน
RBM จะจัดคิวข้อความสำหรับพาร์ทเนอร์ไว้ในคิวเดียว เมื่อพาร์ทเนอร์ใช้ Webhook ระดับตัวแทน โปรดทราบว่า Webhook ที่ไม่ทำงาน 1 รายการจะส่งผลต่อการนําส่งไปยัง Webhook อื่นๆ ระบบจะเรียกใช้เว็บฮุคของตัวแทนรายอื่นในช่วงพักของข้อความที่ส่งไม่สำเร็จ อย่างไรก็ตาม เมื่อข้อความที่ส่งไม่สำเร็จอยู่ในคิวรอส่งอีกครั้ง อัตราการนำส่งโดยรวมจะลดลงและตัวแทนคนอื่นๆ จะได้รับผลกระทบ
นักพัฒนาซอฟต์แวร์ต้องเข้าใจรูปแบบนี้และเขียนโค้ดให้สอดคล้องกับรูปแบบดังกล่าว โดยรับข้อความและจัดคิวเพื่อประมวลผลให้มากที่สุดเพื่อลดโอกาสที่จะเกิดความล้มเหลว
ขั้นตอนถัดไป
เมื่อกำหนดค่า Webhook แล้ว ตัวแทนจะรับข้อความจากอุปกรณ์ทดสอบได้ ส่งข้อความเพื่อตรวจสอบการตั้งค่า