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=8080
cx.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.