เอกสารนี้จะอธิบายวิธีตั้งค่า Webhooks ซึ่งจะแจ้งให้คุณทราบทุกครั้งที่ผู้ใช้แอพของคุณเผยแพร่การเปลี่ยนแปลงกับรูปภาพผู้ใช้ของตนเอง เมื่อคุณเข้าใจวิธีตั้งค่า Webhook นี้แล้ว คุณจะทราบวิธีตั้งค่า Webhooks ทั้งหมด
ในการตั้งค่า Webhook ใดๆ ก็ตาม คุณจะต้องทำสิ่งต่อไปนี้
ซึ่งคุณสามารถดูคำอธิบายโดยละเอียดของขั้นตอนเหล่านี้ได้ด้านล่าง
This step must be completed before you can subscribe to any webhook fields in the App Dashboard.
Your endpoint must be able to process two types of HTTPS requests: Verification Requests and Event Notifications. Since both requests use HTTPs, your server must have a valid TLS or SSL certificate correctly configured and installed. Self-signed certificates are not supported.
The sections below explain what will be in each type of request and how to respond to them. Alternatively, you can use our sample app which is already configured to process these requests.
Anytime you configure the Webhooks product in your App Dashboard, we'll send a GET request to your endpoint URL. Verification requests include the following query string parameters, appended to the end of your endpoint URL. They will look something like this:
GET https://www.your-clever-domain-name.com/webhooks? hub.mode=subscribe& hub.challenge=1158201444& hub.verify_token=meatyhamhock
| Parameter | Sample Value | Description |
|---|---|---|
|
| This value will always be set to |
|
| An |
|
| A string that we grab from the Verify Token field in your app's App Dashboard. You will set this string when you complete the Webhooks configuration settings steps. |
Note: PHP converts periods (.) to underscores (_) in parameter names.
Whenever your endpoint receives a verification request, it must:
hub.verify_token value matches the string you set in the Verify Token field when you configure the Webhooks product in your App Dashboard (you haven't set up this token string yet).hub.challenge value.If you are in your App Dashboard and configuring your Webhooks product (and thus, triggering a Verification Request), the dashboard will indicate if your endpoint validated the request correctly. If you are using the Graph API's /app/subscriptions endpoint to configure the Webhooks product, the API will indicate success or failure with a response.
When you configure your Webhooks product, you will subscribe to specific fields on an object type (e.g., the photos field on the user object). Whenever there's a change to one of these fields, we will send your endpoint a POST request with a JSON payload describing the change.
For example, if you subscribed to the user object's photos field and one of your app's Users posted a Photo, we would send you a POST request that would look something like this:
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"
}Payloads will contain an object describing the change. When you configure the webhooks product, you can indicate if payloads should only contain the names of changed fields, or if payloads should include the new values as well.
We format all payloads with JSON, so you can parse the payload using common JSON parsing methods or packages.
You will not be able to query historical webhook event notification data, so be sure to capture and store any webhook payload content that you want to keep.
Most payloads will contain the following common properties, but the contents and structure of each payload varies depending on the object fields you are subscribed to. Refer to each object's reference document to see which fields will be included.
| Property | Description | Type |
|---|---|---|
| The object's type (e.g., |
|
| An array containing an object describing the changes. Multiple changes from different objects that are of the same type may be batched together. |
|
| The object's ID |
|
| An array of strings indicating the names of the fields that have been changed. Only included if you disable the Include Values setting when configuring the Webhooks product in your app's App Dashboard. |
|
| An array containing an object describing the changed fields and their new values. Only included if you enable the Include Values setting when configuring the Webhooks product in your app's App Dashboard. |
|
| A UNIX timestamp indicating when the Event Notification was sent (not when the change that triggered the notification occurred). |
|
We sign all Event Notification payloads with a SHA256 signature and include the signature in the request's X-Hub-Signature-256 header, preceded with sha256=. You don't have to validate the payload, but you should.
To validate the payload:
X-Hub-Signature-256 header (everything after sha256=). If the signatures match, the payload is genuine.Your endpoint should respond to all Event Notifications with 200 OK HTTPS.
Event Notifications are aggregated and sent in a batch with a maximum of 1000 updates. However batching cannot be guaranteed so be sure to adjust your servers to handle each Webhook individually.
If any update sent to your server fails, we will retry immediately, then try a few more times with decreasing frequency over the next 36 hours. Your server should handle deduplication in these cases. Unacknowledged responses will be dropped after 36 hours.
Note: The frequency with which Messenger event notifications are sent is different. Please refer to the Messenger Platform Webhooks documentation for more information.
เมื่อตำแหน่งข้อมูลหรือแอพตัวอย่างของคุณพร้อมแล้ว ให้ใช้แดชบอร์ดของแอพของแอพคุณเพื่อเพิ่มและกำหนดค่าผลิตภัณฑ์ Webhooks นอกจากนี้คุณยังสามารถดำเนินการดังกล่าวได้โดยใช้โปรแกรม โดยใช้ตำแหน่งข้อมูล /{app-id}/subscriptionsสำหรับ Webhooks ทั้งหมดยกเว้น Instagram
ในตัวอย่างนี้ เราจะใช้แดชบอร์ดเพื่อกำหนดค่า Webhook ที่สมัครรับข้อมูลการเปลี่ยนแปลงในรูปภาพของผู้ใช้แอพของคุณ

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

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

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

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

Mutual TLS (mTLS) is a method for mutual authentication.
mTLS ensures that the parties at each end of a network connection are who they claim to be by verifying that they both have the correct private key. The information within their respective TLS certificates provides additional verification.
Once you enable mTLS on your subscription to WhatsApp Business Account, Meta will present a client certificate together with its signing intermediate certificate. Both certificates are used to create a TLS handshake of Webhook requests to your server. Your server then can verify the sender’s identity of these requests by the trust chain and the common name (CN).
The client certificate is signed by an intermediate CA certificate, DigiCert SHA2 High Assurance Server CA, and then by a root CA certificate, DigiCert High Assurance EV Root CA. Note that the intermediate certificate also signs the certificate for graph.facebook.com:
After setting up HTTPS for receiving Webhook requests, complete the following steps to verify the client certificate and its common name client.webhooks.fbclientcerts.com:
client.webhooks.fbclientcerts.com) of the client certificateNote: Servers receiving Webhooks must be using HTTPS; and we are always verifying the certificate from your HTTPS server for security.
Depending on your server’s setup, the above steps vary in details. We illustrate by two examples, one for Nginx and one for AWS Application Load Balancer (ALB).
Download the root certificate (DigiCert High Assurance EV Root CA) from DigiCert to your server, e.g. /etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.pem
Turn on mTLS by Nginx directives (example screenshot)
ssl_verify_client on;
ssl_client_certificate /etc/ssl/certs/DigiCert_High_Assurance_EV_Root_CA.pem;
ssl_verify_depth 3;
Verify the CN from Nginx embedded variable $ssl_client_s_dn equals "client.webhooks.fbclientcerts.com" (example screenshot)
if ($ssl_client_s_dn ~ "CN=client.webhooks.fbclientcerts.com") {
return 200 "$ssl_client_s_dn";
}
“client.webhooks.fbclientcerts.com”.เมื่อคุณรู้วิธีตั้งค่า Webhooks แล้ว คุณอาจต้องการอ้างอิงจากเอกสารเพิ่มเติมของเราที่อธิบายขั้นตอนเพิ่มเติมที่เกี่ยวข้องเมื่อทำการตั้งค่า Webhooks สำหรับผลิตภัณฑ์ที่เฉพาะเจาะจง