contact is your own record of the person, when you’ve sent it through the API. Otherwise it’s null and you can match on customer.phone.
Check the signature
The signature is the HMAC-SHA256 of the timestamp, a full stop and the raw request body, keyed with your webhook secret.- Refuse the request if it doesn’t match, or if the timestamp is more than five minutes old.
- While a rotation overlaps, the header carries two signatures separated by a comma. Accept the request if either matches.
Node.js (Express)
What to send back
- Answer within 10 seconds with a 2xx status.
messageis optional: it appears in the chat as a private note, for the team only. eventis optional too, with the same shape asPOST /events. It goes into the customer’s history beside the chat.- Any other status counts as failed. If you send
{ "message": "…" }, agents see it as the reason. - We don’t follow redirects, and only public HTTPS addresses are allowed.

