POST requests to the URLs you provide, and they will be resent if the request fails.
If you navigate to the Webhooks tab on a Campaign page, you can see a history of the events that have been sent to your URLs and check for any failures.
As of February 7th, you can configure your webhooks to send events for a subset of the phone numbers attached to your campaign. This can be helpful if you have a testing number.
Authentication
When you create a webhook URL on your dashboard, the system will generate a unique secret token. This token will be sent as aX-Webhook-Token header with each request. You should verify the token to ensure that the request is coming from Sendo.
Retry policy
If our attempt to deliver thePOST request to your webhook URL fails with an HTTP response that is not 2XX, we will retry the request up to 6 times with a 60 second delay between each attempt. With each subsequent failure, the wait time will double. If after all attempts the webhook is still not acknowledged, no further attempts will be made.
message.incoming
Whenever a user sends a message to a phone number associated with a campaign, a POST request will be sent to your provided webhook URL with the following JSON body:
message.status
Whenever the status of a sent message changes (see full list below), a POST request will be sent to your provided webhook URL with the following JSON body:
Statuses
| Status | Description |
|---|---|
CREATED | The message has been created |
QUEUED | The message is queued for sending |
SCHEDULED | The message is scheduled for sending |
SENT | The message has been sent |
DELIVERED | The message has been delivered |
READ | The message has been opened |
FAILED | The message send has failed |
EXPIRED | The send has failed. Contact support |
See a full list of message errors here for the
FAILED statusrecipient.optout
When a recipient texts STOP or another keyword to unsubscribe from messages, a POST request will be sent to your webhook URL with the following JSON body:
These opt-out texts will also be sent as
message.incoming events
