เริ่มต้นใช้งาน

เอกสารนี้จะอธิบายวิธีตั้งค่า Webhook ซึ่งจะแจ้งให้คุณทราบทุกครั้งที่ผู้ใช้แอพของคุณเผยแพร่การเปลี่ยนแปลงกับรูปภาพของผู้ใช้ เมื่อคุณเข้าใจวิธีตั้งค่า Webhook นี้แล้ว คุณจะทราบวิธีตั้งค่า Webhooks ทั้งหมด

ในการตั้งค่า Webhook ใดๆ ก็ตาม คุณจะต้องทำสิ่งต่อไปนี้

  1. สร้างตำแหน่งข้อมูลบนเซิร์ฟเวอร์ที่ปลอดภัยที่สามารถประมวลผลคำขอ HTTPS ได้
  2. กำหนดค่าผลิตภัณฑ์ Webhooks ในแดชบอร์ดของแอพในแอพของคุณ

ซึ่งคุณสามารถดูคำอธิบายโดยละเอียดของขั้นตอนเหล่านี้ได้ด้านล่าง

การสร้างตำแหน่งข้อมูล

ตำแหน่งข้อมูลของคุณต้องสามารถประมวลคำขอ HTTPS ได้ 2 ประเภท ได้แก่คำขอให้ตรวจสอบยืนยัน และการแจ้งเตือนเหตุการณ์ เนื่องจากคำขอทั้ง 2 ประเภทนี้ใช้ HTTP เซิร์ฟเวอร์ของคุณจึงต้องมีการกำหนดค่าและติดตั้งใบรับรอง TLS หรือ SSL ที่ใช้งานได้ไว้อย่างถูกต้อง โดยระบบจะไม่รองรับใบรับรองที่ลงนามเอง

ส่วนด้านล่างนี้จะอธิบายสิ่งที่จะอยู่ในคำขอแต่ละประเภทและวิธีตอบกลับคำขอเหล่านั้น หรือคุณสามารถใช้แอพตัวอย่างของเรา ซึ่งได้รับการกำหนดค่าเพื่อประมวลผลคำขอเหล่านี้ไว้แล้ว

คำขอให้ตรวจสอบยืนยัน

ทุกครั้งที่คุณกำหนดค่าผลิตภัณฑ์ Webhooks ในแดชบอร์ดของแอพ เราจะส่งคำขอ GET ไปที่ URL ตำแหน่งข้อมูลของคุณ คำขอให้ตรวจสอบยืนยันจะมีพารามิเตอร์สตริงสืบค้นต่อไปนี้ ซึ่งอยู่ต่อท้าย URL ตำแหน่งข้อมูลของคุณ โดยจะมีลักษณะดังนี้

ตัวอย่างคำขอให้ตรวจสอบยืนยัน

GET https://www.your-clever-domain-name.com/webhooks? hub.mode=subscribe& hub.challenge=1158201444& hub.verify_token=meatyhamhock
พารามิเตอร์ค่าตัวอย่างคำอธิบาย

hub.mode

subscribe

ระบบจะตั้งค่านี้เป็น subscribe เสมอ

hub.challenge

1158201444

int ที่คุณจะต้องส่งกลับมาให้เรา

hub.verify_token

meatyhamhock

สตริงที่เราดึงมาจากช่อง "โทเค็นการตรวจสอบยืนยัน" ในแดชบอร์ดของแอพในแอพของคุณ เราจะตั้งค่าสตริงนี้เมื่อคุณดำเนินขั้นตอนการตั้งค่าการกำหนดค่า Webhooks เสร็จสมบูรณ์แล้ว

หมายเหตุ:PHP จะแปลงจุด (.) เป็นขีดล่าง (_) ในชื่อพารามิเตอร์

การตรวจสอบความถูกต้องของคำขอให้ตรวจสอบยืนยัน

ตำแหน่งข้อมูลของคุณต้องดำเนินการต่อไปนี้ เมื่อใดก็ตามที่ได้รับคำขอให้ตรวจสอบยืนยัน

  • ตรวจสอบยืนยันว่าค่า hub.verify_token ตรงกับสตริงที่คุณตั้งค่าไว้ในช่อง "โทเค็นการตรวจสอบยืนยัน" เมื่อคุณกำหนดค่าผลิตภัณฑ์ Webhooks ในแดชบอร์ดของแอพ (คุณยังไม่ได้ตั้งค่าสตริงโทเค็นนี้)
  • ตอบกลับด้วยค่า hub.challenge

หากคุณอยู่ในแดชบอร์ดของแอพและกำลังกำหนดค่าผลิตภัณฑ์ Webhooks ของคุณ (และทริกเกอร์คำขอให้ตรวจสอบยืนยัน) แดชบอร์ดจะระบุว่าตำแหน่งข้อมูลของคุณตรวจสอบคำขออย่างถูกต้องหรือไม่ API จะตอบกลับเพื่อระบุว่าสำเร็จหรือล้มเหลว หากคุณใช้ตำแหน่งข้อมูล /app/subscriptions ของ API กราฟ เพื่อกำหนดค่าผลิตภัณฑ์ Webhooks

การแจ้งเตือนเหตุการณ์

เมื่อคุณกำหนดค่าผลิตภัณฑ์ Webhooks คุณจะสมัครรับข้อมูลจาก fields ที่เฉพาะเจาะจงในประเภท object (เช่น ช่อง photos บนอ็อบเจ็กต์ user) เมื่อใดก็ตามที่มีการเปลี่ยนแปลงในช่องใดช่องหนึ่ง เราจะส่งคำขอ POST ไปที่ตำแหน่งข้อมูลของคุณโดยมีเพย์โหลด JSON ที่อธิบายการเปลี่ยนแปลงดังกล่าว

ตัวอย่างเช่น หากคุณสมัครรับข้อมูลจากช่อง photos ของอ็อบเจ็กต์ user และหนึ่งในผู้ใช้แอพของคุณได้โพสต์รูปภาพ เราจะส่งคำขอ POST ให้คุณซึ่งจะมีลักษณะดังนี้

POST / HTTPS/1.1 Host: your-clever-domain-name.com/webhooks Content-Type: application/json X-Hub-Signature-256: sha256={super-long-SHA256-signature} Content-Length: 311 { "entry": [ { "time": 1520383571, "changes": [ { "field": "photos", "value": { "verb": "update", "object_id": "10211885744794461" } } ], "id": "10210299214172187", "uid": "10210299214172187" } ], "object": "user" } 

เนื้อหาเพย์โหลด

เพย์โหลดจะมีอ็อบเจ็กต์ที่อธิบายการเปลี่ยนแปลง เมื่อคุณกำหนดค่าผลิตภัณฑ์ Webhooks คุณจะสามารถระบุได้ว่าเพย์โหลดควรมีเฉพาะชื่อของช่องที่เปลี่ยนแปลงหรือไม่ หรือเพย์โหลดควรรวมค่าใหม่ไว้ด้วยหรือไม่

เราจัดรูปแบบเพย์โหลดทั้งหมดด้วย JSON ดังนั้น คุณจึงสามารถแยกวิเคราะห์เพย์โหลดโดยใช้วิธีการหรือแพ็คเกจการแยกวิเคราะห์ JSON ทั่วไปได้

เราจะไม่จัดเก็บข้อมูลการแจ้งเตือนเหตุการณ์ของ Webhook ที่เราส่งให้คุณ ดังนั้นอย่าลืมบันทึกและจัดเก็บเนื้อหาเพย์โหลดที่คุณต้องการเก็บไว้

เพย์โหลดส่วนใหญ่จะมีคุณสมบัติทั่วไปดังต่อไปนี้ แต่เนื้อหาและโครงสร้างของเพย์โหลดแต่ละรายการจะแตกต่างกันไปตามช่องอ็อบเจ็กต์ที่คุณสมัครรับข้อมูล โปรดดูเอกสารอ้างอิงของอ็อบเจ็กต์แต่ละรายการเพื่อดูว่าจะมีช่องใดรวมอยู่บ้าง

คุณสมบัติ คำอธิบาย ประเภท

object

ประเภทของอ็อบเจ็กต์ (เช่น user, page ฯลฯ)

string

entry

อาร์เรย์ที่มีอ็อบเจ็กต์ที่อธิบายการเปลี่ยนแปลง การเปลี่ยนแปลงหลายรายการจากอ็อบเจ็กต์ต่างๆ ที่เป็นประเภทเดียวกันอาจถูกรวมเข้าด้วยกันเป็นแบตช์

array

id

ID ของอ็อบเจ็กต์

string

changed_fields

อาร์เรย์ของสตริงที่ระบุชื่อของช่องที่มีการเปลี่ยนแปลง จะรวมไว้ก็ต่อเมื่อคุณปิดใช้งานการตั้งค่า "รวมค่า" เมื่อกำหนดค่าผลิตภัณฑ์ Webhooks ในแดชบอร์ดของแอพในแอพของคุณ

array

changes

อาร์เรย์ที่มีอ็อบเจ็กต์ที่อธิบายช่องที่มีการเปลี่ยนแปลงและค่าใหม่ของช่องดังกล่าว จะรวมไว้ก็ต่อเมื่อคุณเปิดใช้งานการตั้งค่า "รวมค่า" เมื่อกำหนดค่าผลิตภัณฑ์ Webhooks ในแดชบอร์ดของแอพในแอพของคุณ

array

time

การประทับเวลา UNIX ที่ระบุเวลาที่ส่งการแจ้งเตือนเหตุการณ์ (ไม่ใช่เวลาที่เกิดการเปลี่ยนแปลงที่ทริกเกอร์การแจ้งเตือน)

int

การตรวจสอบความถูกต้องของเพย์โหลด

เราลงนามเพย์โหลด "การแจ้งเตือนเหตุการณ์" ทั้งหมดด้วยลายเซ็น SHA256 และรวมลายเซ็นไว้ในส่วนหัว X-Hub-Signature-256 ของคำขอ ซึ่งนำหน้าด้วย sha256= คุณไม่จำเป็นต้องตรวจสอบความถูกต้องของเพย์โหลด แต่ก็เป็นสิ่งที่ควรทำ

วิธีตรวจสอบความถูกต้องของเพย์โหลดมีดังนี้

  1. สร้างลายเซ็น SHA256 โดยใช้เพย์โหลดและข้อมูลลับของแอพในแอพของคุณ
  2. เปรียบเทียบลายเซ็นของคุณกับลายเซ็นในส่วนหัว X-Hub-Signature-256 (ทุกอย่างที่อยู่หลัง sha256=) หากลายเซ็นตรงกัน แสดงว่าเพย์โหลดเป็นของแท้

การตอบกลับการแจ้งเตือนเหตุการณ์

ตำแหน่งข้อมูลของคุณควรตอบกลับการแจ้งเตือนเหตุการณ์ทั้งหมดด้วย 200 OK HTTPS

ความถี่

การแจ้งเตือนเหตุการณ์จะถูกรวบรวมและส่งเป็นแบตช์ โดยมีการอัพเดตสูงสุด 1,000 รายการ อย่างไรก็ตาม เราไม่สามารถรับประกันการรวมเป็นแบตช์ได้ ดังนั้นอย่าลืมปรับเซิร์ฟเวอร์ของคุณเพื่อจัดการกับ Webhook แต่ละรายการ

หากการอัพเดตที่ส่งไปยังเซิร์ฟเวอร์ของคุณล้มเหลว เราจะลองส่งอีกครั้งทันที จากนั้นจะลองอีก 2-3 ครั้ง โดยลดความถี่ลงในช่วง 36 ชั่วโมงข้างหน้า เซิร์ฟเวอร์ของคุณควรจัดการเรื่องการลบข้อมูลซ้ำซ้อนในกรณีเหล่านี้ การตอบกลับที่ไม่ได้รับการตอบรับจะหายไปหลังจากผ่านไป 36 ชั่วโมง

หมายเหตุ: ความถี่ในการส่งการแจ้งเตือนเหตุการณ์ของ Messenger จะแตกต่างกัน โปรดดูข้อมูลเพิ่มเติมที่เอกสารประกอบเกี่ยวกับ Webhooks ของแพลตฟอร์ม Messenger

การกำหนดค่าผลิตภัณฑ์ Webhooks

เมื่อตำแหน่งข้อมูลหรือแอพตัวอย่างของคุณพร้อมแล้ว ให้ใช้แดชบอร์ดของแอพของแอพคุณเพื่อเพิ่มและกำหนดค่าผลิตภัณฑ์ Webhooks นอกจากนี้คุณยังสามารถดำเนินการดังกล่าวได้โดยใช้โปรแกรม โดยใช้ตำแหน่งข้อมูล /{app-id}/subscriptionsสำหรับ Webhooks ทั้งหมดยกเว้น Instagram

ในตัวอย่างนี้ เราจะใช้แดชบอร์ดเพื่อกำหนดค่า Webhook ที่สมัครรับข้อมูลการเปลี่ยนแปลงในรูปภาพของผู้ใช้แอพของคุณ

  1. ใน "แดชบอร์ดของแอพ" ให้ไปที่ "ผลิตภัณฑ์" > "Webhooks" เลือก "ผู้ใช้" จากเมนูดร็อปดาวน์ จากนั้นคลิก "สมัครรับข้อมูลอ็อบเจ็กต์นี้"
    การเลือกอ็อบเจ็กต์ผู้ใช้
  2. ป้อน URL ของตำแหน่งข้อมูลของคุณลงในช่อง URL การเรียกกลับ และป้อนสตริงลงในช่อง "โทเค็นการตรวจสอบยืนยัน" เราจะรวมสตริงนี้ไว้ในคำขอให้ตรวจสอบยืนยันทั้งหมด หากคุณกำลังใช้หนึ่งในแอพตัวอย่างของเรา สตริงนี้ควรเป็นสตริงเดียวกับที่คุณใช้สำหรับตัวแปรการกำหนดค่า TOKEN ของแอพคุณ

    หากคุณต้องการให้เพย์โหลดการแจ้งเตือนเหตุการณ์รวมชื่อของช่องที่เปลี่ยนแปลงไปพร้อมกับค่าใหม่ ให้สลับปุ่ม "รวมค่า" เป็น "ใช่"
    การป้อน URL ของตำแหน่งข้อมูลและสตริงโทเค็นการตรวจสอบยืนยัน
  3. เมื่อคุณคลิก "ตรวจสอบยืนยันและบันทึก" เราจะส่งคำขอให้ตรวจสอบยืนยันไปที่ตำแหน่งข้อมูลของคุณซึ่งคุณจะต้องตรวจสอบ หากตำแหน่งข้อมูลของคุณตรวจสอบคำขอสำเร็จ คุณควรเห็นดังต่อไปนี้

    การตรวจสอบสำเร็จ
  4. ขั้นตอนสุดท้ายคือการสมัครรับข้อมูลแต่ละช่อง สมัครรับข้อมูลจากช่อง photos และส่ง "การแจ้งเตือนเหตุการณ์" ขั้นทดสอบ

    การสมัครรับข้อมูลจากช่อง "รูปภาพ" บนอ็อบเจ็กต์ "ผู้ใช้"

    หากตำแหน่งข้อมูลของคุณได้รับการตั้งค่าอย่างถูกต้อง ตำแหน่งข้อมูลของคุณควรตรวจสอบความถูกต้องของเพย์โหลดและใช้โค้ดใดก็ตามที่คุณตั้งไว้เมื่อตรวจสอบเสร็จเรียบร้อย หากคุณกำลังใช้แอพตัวอย่างของเรา ให้โหลด URL ของแอพในเว็บเบราว์เซอร์ของคุณ โดยระบบควรแสดงเนื้อหาของเพย์โหลดดังต่อไปนี้

    แอพตัวอย่างที่แสดงเพย์โหลดการแจ้งเตือนขั้นทดสอบ

ขั้นตอนถัดไป

เมื่อคุณรู้วิธีตั้งค่า Webhooks แล้ว คุณอาจต้องการอ้างอิงจากเอกสารเพิ่มเติมของเราที่อธิบายขั้นตอนเพิ่มเติมที่เกี่ยวข้องเมื่อทำการตั้งค่า Webhooks สำหรับผลิตภัณฑ์ที่เฉพาะเจาะจง