Channels
Messenger
Meta Page webhook signed with X-Hub-Signature-256. Catalog name is messenger — not facebook. HMAC fail-closes without app_secret.
Self-host
Add the Messenger product, copy the page access token and app secret, set a verify token, point the callback at public HTTPS, subscribe messages.
export MESSENGER_PAGE_ACCESS_TOKEN='…'
export MESSENGER_APP_SECRET='…'
export MESSENGER_VERIFY_TOKEN='…'
export PORT=8080cx.channels.add(
"messenger",
via="self-host",
page_access_token=page_access_token,
app_secret=app_secret,
bot_token="local",
)
# POST -> cx.handle("messenger", body, headers)
# GET hub.mode=subscribe on the same HTTP front (not handle())await cx.channels.add("messenger", {
via: "self-host",
page_access_token,
app_secret,
bot_token: "local",
})
// POST → await cx.handle("messenger", body, headers)
// GET hub.mode=subscribe on the same HTTP front (not handle())What it can do
Plans Post (including a button menu), Typing, and echo. No pin, react, edit, or delete. The example uses overlap: "drop" on /typing — see Overlap.