Documentation

What Conext does with each Meta event.

There is no public API to push contacts into another system. This page says what comes in from Meta, how it is verified, and what stays in the inbox.

A single URL receives every customer. The CRM does not read an API key on the webhook: Meta signs it, and the business is resolved from an id in the payload.

Authentication: Meta’s signature, not a key of yours.

The verification GET echoes `hub.challenge` if `hub.verify_token` matches the app’s. The POST carries Meta’s HMAC signature in the header; if it does not match, it is dropped. We handle that with the app secret. When you connect the channel there is no webhook token to paste into a panel.

If the payload id belongs to no business —a `phone_number_id`, a PAGE_ID, or an IGID nobody connected— the event is thrown away. The recipient is not guessed.

The three objects.

WhatsApp arrives with `object: whatsapp_business_account` and `entry[].changes[]`. The business comes from `value.metadata.phone_number_id`. Text is in `messages[]` when `type` is `text`; any other type is ignored and logged. Receipts come in `statuses[]` (sent, delivered, read, failed) and name the outbound wamid.

Instagram and Messenger arrive with `entry[].messaging[]`. The `instagram` object resolves by IGID (`entry[].id`); the `page` object, by PAGE_ID. A `message.is_echo` is dropped. The contact id is stored with a prefix (`ig:…`, `fb:…`) so it does not collide with a `wa_id` of the same shape. On these two channels the receipt is a watermark: everything before that mark is delivered or read, without listing messages.

Statuses, dedup, and what does not come in.

The CRM answers 200 and processes afterwards, so Meta does not retry on time. The message id is inserted into an events table; if it was already there, the pipeline does not run again. A receipt that arrives out of order cannot lower the status: delivered does not overwrite read.

Inbound attachments, comments, mentions, and non-text messages are not processed. There is no outbound webhook into your database, and no schema for Make or Zapier. What stays in Conext is the thread, the bubble status, and, if it applies, the AI draft.

In practice

  1. 1

    Connect the channel in the CRM

    That is where the ids are stored. Without them Meta’s webhook has no one to attribute the event to.

  2. 2

    Meta POSTs to our URL

    The signature is checked. The business is resolved. 200 is returned.

  3. 3

    The pipeline runs or it is dropped

    New text: classify and draft. Receipt: update the bubble. Echo, attachment, or unknown id: it does not enter the inbox.

This reference describes the path from Meta into Conext. It is not an API for another system to write to us, and not a connector going out.

Want to see it with your own threads?

Essential includes one channel, 500 AI conversations per month, and one active agent.