Meta Platform integration

How this application uses the Meta Platform — every callback Meta calls, every webhook field it subscribes to, every permission it asks for and what each one is actually used for, and what happens to a person's data when they ask for it to be removed.

Business: Connect with Bayezid Website: sayadbayezid.com Region: Bangladesh Last updated: 11 September 2026

What this application does

Connect with Bayezid is a web development and digital marketing studio in Bangladesh. This application supports three things, and nothing else:

It is not a consumer product, it has no app store listing, and it does not publish content on anyone's behalf.

Callback URLs

All four are served by a single Cloudflare Worker on bayezid-agency-api.sayadmdbayezidhosan.workers.dev. Every one verifies a Meta signature before it reads the request.

PurposeURLVerification
Webhook verification
GET
/api/messenger/webhook Answers hub.challenge only when hub.verify_token matches the configured value; 403 otherwise.
Webhook events
POST
/api/messenger/webhook X-Hub-Signature-256, HMAC-SHA256 over the raw request body, compared in constant time.
Deauthorize callback /api/facebook/deauthorize signed_request, HMAC-SHA256 over the encoded payload. An unsigned request changes nothing.
Data deletion request /api/facebook/data-deletion signed_request, as above. Returns a confirmation code and a status URL.

Related public URLs

Why the API is on a workers.dev address. The API and the website are in separate Cloudflare accounts, and Cloudflare only permits a Worker custom domain when the zone and the Worker share an account. The Worker therefore answers on its own origin. It is the same business and the same operator; the website links to it throughout.

Webhook fields, and what each is used for

Subscribed on the Page object for our own Facebook Page. Nothing is subscribed that is not used.

FieldWhat we do with it
messagesRead the customer's question so the assistant can answer it.
messaging_postbacksThe Get Started button and menu taps, so a person can choose a service instead of typing.
messaging_referralsRecords which advertisement or link a conversation came from, so an ad's real cost per enquiry can be measured.
messaging_optinsOpt-ins through a plugin, recorded so consent is on file.
message_echoesStops the assistant talking over a person. When a human on our team answers from the Page inbox, the echo tells the application to stay out of that conversation.
message_deliveries · message_readsConfirms a reply reached the customer, so a broken integration is visible rather than silent.
message_reactionsRecorded; never replied to.
messaging_policy_enforcementHow Meta tells us the Page is restricted. Recorded so it is not missed.

Events are stored as a small operational log: the message identifier, the Page identifier, the event type and whether a reply succeeded. Message text is not stored.

Permissions, and why each is needed

PermissionWhy it is required
pages_messagingTo receive a message sent to our Page and to send the reply. Without it there is no Messenger support.
pages_manage_metadataTo subscribe the Page to the webhook fields above.
pages_read_engagementTo read the Page's own profile details used in replies.
public_profileBusiness Login: to show a connecting client which account they signed in with.
emailBusiness Login: to contact the client about the work they hired us for.
ads_management · ads_readAdvertising clients only, on accounts they have granted us. Reading performance, and creating or adjusting campaigns we have been engaged to manage.
business_managementTo see which assets a client has shared with us, so we work only on those.
Advertising work is scoped to accounts a client has explicitly shared. Nothing here reads or changes an advertising account that has not been granted to us through Meta Business Manager, and a client removes that access themselves at any time without asking us.

What is stored, and for how long

DataWhyKept
Page-scoped ID of someone who messages the PageTo reply to the right conversation and to know whether a colleague already answered.Until deletion is requested
Name, phone, email and website — only when a person types them into the enquiry form and agreesSo we can call back about the work they asked about.Until deletion is requested
Which advertisement a conversation came fromTo measure which campaigns produce enquiries.Until deletion is requested
Client access token, from Business LoginTo manage the assets that client engaged us to manage.Encrypted at rest; removed on deauthorisation
Website conversion eventsConversions API delivery, deduplicated against the browser Pixel.Sent to Meta; a delivery receipt without personal data is retained

Message content is not stored. Contact details are never taken without the person being shown what will be kept and agreeing to it. Nothing collected here is sold, rented, or shared with any third party.

Deleting a person's data

Three routes, all of which work:

Deletion covers every table that holds anything about that person — the stored connection, any enquiry they submitted, a half-finished form, and the conversation log. Each is cleared independently, so a problem with one cannot leave the others behind.

Security

How to verify this integration

  1. Webhook verification — a GET to the webhook URL with the correct hub.verify_token returns the challenge; a wrong one returns 403.
  2. Webhook events — a POST with a valid X-Hub-Signature-256 is accepted; without it, or with a wrong signature, it is refused and nothing is written.
  3. Messenger — message the Page and a reply arrives. Reply from the Page inbox and the assistant stops for that conversation.
  4. Deletion — remove the app from a Facebook account; the callback returns a confirmation code, and the status page confirms the removal for that code.

For anything not covered here, write to info@sayadbayezid.com and we will answer with whatever detail is needed.