Skip to main content
Add actions in Integrations → Actions, with one HTTPS address on your server. When an agent presses a button, we send that address a POST:
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. message is optional: it appears in the chat as a private note, for the team only.
  • event is optional too, with the same shape as POST /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.