An event-triggered callback is returned after an event is sent to Vibes. In order to determine whether or not your event succeeded or failed, you will need to understand the components of an Event Processed Callback and register to receive those callbacks.
Before you register...
Set up your endpoint before sending any callback configurations. Do not use a "fake" URL to test the configuration, as this will result in errors.
What are events?
Events are primarily used for API-Triggered Messages. For more information on events and their uses, please see our Event-Triggered Messaging guide.
Callback Flow
Callback Configuration
When registering for this callback, your request body should look something like the below example.
{
"callback_type":"event_processed",
"event_processed": {
"event_type": "order_shipped"
},
"destination":{
"url":"YOUR_DESTINATION_URL_W_HTTPS", /*Do not use a "fake" URL (such as google.com).*/
"method":"POST",
"content_type":"application/json"
},
"start_date":"2017-01-01T00:00Z",
"end_date":"2017-02-01T00:00Z",
}
To receive callbacks for all processed events, simply remove the event_type
. See example below:
{
"callback_type":"event_processed",
"destination":{
"url":"YOUR_DESTINATION_URL_W_HTTPS", /*Do not use a "fake" URL (such as google.com).*/
"method":"POST",
"content_type":"application/json"
},
"start_date":"2017-01-01T00:00Z",
"end_date":"2017-02-01T00:00Z",
}
Callback Body Examples
To help you understand the body of this callback, we’ve provided examples for both successes and failures.
Routing
Success
If the event was received and the action is processing, you will see a success callback such as the one below.
{
"event_id":"3a083a69-2064-430a-8ab6-72f163692ed2",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:02:36Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"routing",
"status":"processing",
"status_reason":"accepted_by_event_triggered_message",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
}
}
Failures
No routing rules
This indicates that the system was not able to find an action in the system (such as an Event-Triggered Campaign triggered by the event. Therefore, the system did not have an action to perform in response to the received event.
{
"event_id":"fddbf770-f987-4928-91be-6b19c994562f",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:38:42Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"routing",
"status":"failed",
"status_reason":"event_routing_failed",
"failure":{
"reason":"no_route_rules_found_for_event"
}
}
}
}
Person doesn't belong to subscription list
This failure occurs if the person that is referenced in the event doesn’t belong to the subscription list that is associated to the event-triggered message.
{
"event_id":"x4a6dcfcf-16be-474d-b87f-ee64a08f6dab",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"routing",
"status":"failed",
"status_reason":"event_routing_failed",
"failure":{
"reason":"no_routes_accepted_event",
"errors":[
{
"error":"Person is not found",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
Person not found
This failure occurs when the person that is referenced is not found in our mobile database.
{
"event_id":"4a6dcfcf-16be-474d-b87f-ee64a08f6dab",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"routing",
"status":"failed",
"status_reason":"event_routing_failed",
"failure":{
"reason":"no_routes_accepted_event",
"errors":[
{
"error":"Person is not found",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
Carrier not supported
This failure occurs when the MDN referenced in the event cannot be reached. This may be because the number is a landline, or it is on an unsupported carrier.
{
"event_id":"k4a6dcfcf-16be-474d-b87f-ee64a08f6dab",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"et127_no_incentive_codes",
"event_data":{
"mdn": "+18609740638",
"something": "some value"
},
"action":{
"type":"send_message",
"status":"failed",
"status_reason":"event_message_action_failed",
"failure":{
"reason":"PermanentLookupFailureError",
"errors":[
{
"error":"Carrier Lookup for +18609740638 failed with error null is not a mobile phone number or its carrier [null] is currently not supported",
"resource_url": "/companies/zY5VnE7r/mobiledb/event_triggered_messages/276"
}
]
}
}
}
}
Message Processing
Success
SMS message queued to be sent to carrier
You will receive this callback when an SMS message was successfully generated for an event-triggered message and the message is queued to be sent to the carrier.
{
"event_id":"w4a6dcfcf-16be-474d-b87f-ee64a08f6dab",
"callback_type":"event_processed",
"event_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"send_message",
"status":"processing",
"status_reason":"queued",
"message_type":"sms",
"sms":{
"source":{
"resource_url":"/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
},
"person":{
"person_key":"w2e2127r-w413-841w-8t40-480b85dc6t3e",
"resource_url":"/companies/:company_key/mobiledb/persons/w2e2127r-w413-841w-8t40-480b85dc6t3e"
}
}
}
}
}
MMS queued to be sent to carrier
{
"event_id":"p4a6dcfcf-16be-474d-b87f-ee64a08f6dab",
"callback_type":"event_processed",
"event_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"send_message",
"status":"processing",
"status_reason":"queued",
"message_type":"mms",
"mms":{
"source":{
"resource_url":"/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
},
"person":{
"person_key":"w2e2127r-w413-841w-8t40-480b85dc6t3e",
"resource_url":"/companies/:company_key/mobiledb/persons/w2e2127r-w413-841w-8t40-480b85dc6t3e"
}
}
}
}
}
Failures
No incentive codes
This error may appear if the event-triggered message is attempting to distribute an incentive code from one of your incentive pools. If there are no incentive codes remaining in your pool, you will receive this failure message.
{
"event_id":"2a14821e-4835-45fe-a140-d5d8c2edeffb",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"send_message",
"status":"failed",
"status_reason":"event_message_action_failed",
"failure":{
"reason":"NoAvailableCodes",
"errors":[
{
"error":"The referenced incentive pool is out of codes.",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
SMS is not supported by targeted phone’s carrier
This error may appear if the targeted MDN’s carrier does not support SMS.
{
"event_id":"4a6dcfcf-16be-474d-b87f-ee64a08f6dab",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"routing",
"status":"failed",
"status_reason":"event_routing_failed",
"failure":{
"reason":"no_routes_accepted_event",
"errors":[
{
"error":"SMS is not supported by carrier",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
MMS is not supported by targeted phone’s carrier
This error may appear if the targeted MDN’s carrier does not support MMS.
{
"event_id":"0a6e28da-1cff-4d6b-8787-45f1aa4106ca",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"routing",
"status":"failed",
"status_reason":"event_routing_failed",
"failure":{
"reason":"no_routes_accepted_event",
"errors":[
{
"error":"MMS is not supported by carrier",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
MMS asset missing
If you are using a dynamic MMS token, this error can occur if your event did not include a URL to the intended media asset.
{
"event_id": "b4e31f74-fe43-464d-802f-04ea7225191a",
"callback_type": "event_processed",
"event_type": "event_processed",
"event_date": "2023-09-11T20:43:25Z",
"event_processed": {
"event_id": "3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type": "day_of_delivery",
"event_data": {
"external_person_id": "abcd12345"
},
"debug_data": {},
"action": {
"type": "send_message",
"status": "failed",
"status_reason": "event_message_action_failed",
"failure": {
"reason": "ValidationError",
"errors": [
{
"error": "Rendered media URL is blank",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
Dynamic media asset is not supported
If you are using a dynamic MMS token, you may receive an error if your media URL does not comply with the MMS Guidelines. Below are two examples.
If your media asset is not the correct content type:
{
"event_id": "87218c45-fb0a-46a1-9724-d3c9fc5ac53d",
"callback_type": "event_processed",
"event_type": "event_processed",
"event_date": "2023-09-11T20:45:33Z",
"event_processed": {
"event_id": "3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type": "day_of_delivery",
"event_data": {
"external_person_id": "abcd12345",
"media_url": "https://example.com/orders/12345"
},
"debug_data": {},
"action": {
"type": "send_message",
"status": "failed",
"status_reason": "event_message_action_failed",
"failure": {
"reason": "ValidationError",
"errors": [
{
"error": "Content of type application/pdf are not allowed",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
If your media URL asset is too big:
{
"event_id": "d53c0423-fa0a-4f6e-8156-636b3ac7adc6",
"callback_type": "event_processed",
"event_type": "event_processed",
"event_date": "2023-09-11T20:47:29Z",
"event_processed": {
"event_id": "3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type": "day_of_delivery",
"event_data": {
"external_person_id": "abcd12345",
"media_url": "https://example.com/orders/12345"
},
"debug_data": {},
"action": {
"type": "send_message",
"status": "failed",
"status_reason": "event_message_action_failed",
"failure": {
"reason": "ValidationError",
"errors": [
{
"error": "Image size cannot exceed 0.5 megabytes",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
Unexpected error
When some unexpected error has occurred during the event-triggered message, you may receive this code.
{
"event_id":"3a889c19-aa9d-466d-a6c0-9c4eaf12f402",
"callback_type":"event_processed",
"event_date":"2022-08-15T20:20:02Z",
"event_processed":{
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type":"day_of_delivery",
"event_data":{
"first_name":"Bob",
"external_person_id":"abcd12345",
"delivery_time":"5:00 PM",
"order_url":"https://example.com/orders/12345"
},
"debug_data":{
"field":"CUST_SYSTEM"
},
"action":{
"type":"send_message",
"status":"failed",
"status_reason":"UnexpectedError",
"failure":{
"reason":"UnexpectedError",
"errors":[
{
"error":"Reason for unexpected error.",
"resource_url": "/companies/:company_key/mobiledb/event_triggered_messages/:event_triggered_message_id"
}
]
}
}
}
}
Carrier Delivery Receipts
You will receive this callback after you attempt to send an SMS message to a carrier to be delivered to a device.
Success
Successfully delivered to carrier
The payload for a successful message delivery should look like the example below.
{
"event_id": "62f497bd0-d889-4817-866d-cde73182860e",
"callback_type": "event_processed",
"event_type": "event_processed",
"event_date": "2023-05-05T16: 15: 40Z",
"event_processed": {
"event_id": "3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type": "day_of_delivery",
"event_data": {
"first_name": "Bob",
"external_person_id": "abcd12345",
"delivery_time": "5:00 PM",
"order_url": "https://example.com/orders/12345"
},
"debug_data": {
"field": "CUST_SYSTEM"
},
"action": {
"type": "send_message",
"status": "success",
"status_reason": "sent",
"message_type": "sms",
"sms": {
"source": {
"url": "/companies/: company_key/mobiledb/event_triggered_messages/: event_triggered_message_id"
},
"person": {
"person_key": "7807b79a-db30-4975-99b0-b89f41a492ac",
"url": "/companies/: company_key/mobiledb/persons/7807b79a-db30-4975-99b0-b89f41a492ac"
}
}
}
}
}
Could not be delivered to carrier
The payload for a failed message delivery should look like the example below.
{
"event_id": "2f497bd0-d889-4817-866d-cde73182860e",
"callback_type": "event_processed",
"event_type": "event_processed",
"event_date": "2023-05-05T16: 15: 40Z",
"event_processed": {
"event_id": "3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type": "day_of_delivery",
"event_data": {
"first_name": "Bob",
"external_person_id": "abcd12345",
"delivery_time": "5:00 PM",
"order_url": "https://example.com/orders/12345"
},
"debug_data": {
"field": "CUST_SYSTEM"
},
"action": {
"type": "send_message",
"status": "failed",
"status_reason": "rejected",
"message_type": "sms",
"sms": {
"source": {
"url": "/companies/: company_key/mobiledb/event_triggered_messages/: event_triggered_message_id"
},
"person": {
"person_key": "7807b79a-db30-4975-99b0-b89f41a492ac",
"url": "/companies/: company_key/mobiledb/persons/7807b79a-db30-4975-99b0-b89f41a492ac"
}
},
"failure": {
"errors": [
{
"error_code": 23 ***
}
]
}
}
}
}
Please refer to our documentation error codes here. For status reasons, please see the below table.
status_reason | Description |
---|---|
rejected | Message was rejected by the endpoint. |
unroutable | No delivery route could be determined for this message. |
queued | Message is queued for delivery and waiting final confirmation. |
expired | The message was expired and not delivered. |
other_error | A catch-all error state for specific errors/issues that could not get classified. |
Notes:
When a customer event is sent into the platform, it may generate an SMS message that is required to be split into multiple parts to send to the carrier. In cases where the message is split into parts, there will be a Carrier DLR for each part of the SMS message that was attempted to be sent to the carrier.
- A Carrier DLR Callback will be generated for these scenarios:
- If an SMS message is small enough to not require splitting then there will be one Carrier DLR and in turn one Carrier DLR Callback generated indicating the success or failure of the attempted send.
- If an SMS message is large enough that it is required to be split into parts to be sent to the carrier then:
- A Carrier DLR Callback will be generated for each part that fails to be sent to the carrier.
- A Carrier DLR Callback indicating a successful send to the carrier will ONLY be generated for the last part that was sent to the carrier.
Handset Delivery Receipts
You will receive this callback after your SMS message has been sent to deliver to a device.
Success
The payload for a successful message delivery should look like the example below.
{
"event_id": "d8897bd0-2f49-4817-866d-cde73182860e",
"callback_type": "event_processed",
"event_date": "2023-05-05T16: 15: 40Z",
"event_processed": {
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type": "day_of_delivery",
"event_data": {
"first_name": "Bob",
"external_person_id": "abcd12345",
"delivery_time": "5:00 PM",
"order_url": "https://example.com/orders/12345"
},
"debug_data": {
"field": "CUST_SYSTEM"
},
"action": {
"type": "send_message",
"status": "success",
"status_reason": "delivered",
"message_type": "sms",
"sms": {
"source": {
"url": "/companies/: company_key/mobiledb/event_triggered_messages/: event_triggered_message_id"
},
"person": {
"person_key": "7807b79a-db30-4975-99b0-b89f41a492ac",
"url": "/companies/: company_key/mobiledb/persons/7807b79a-db30-4975-99b0-b89f41a492ac"
}
}
}
}
}
Failure
The payload for a failed message delivery should look like the example below.
{
"event_id": "2f497bd0-d889-4817-866d-cde73182860e",
"callback_type": "event_processed",
"event_date": "2023-05-05T16: 15: 40Z",
"event_processed": {
"event_id":"3b0e5871-d8b5-4393-b275-07ca0541c8de",
"event_type": "day_of_delivery",
"event_data": {
"first_name": "Bob",
"external_person_id": "abcd12345",
"delivery_time": "5:00 PM",
"order_url": "https://example.com/orders/12345"
},
"debug_data": {
"field": "CUST_SYSTEM"
},
"action": {
"type": "send_message",
"status": "failed",
"status_reason": "rejected",
"message_type": "sms",
"sms": {
"source": {
"url": "/companies/: company_key/mobiledb/event_triggered_messages/: event_triggered_message_id"
},
"person": {
"person_key": "7807b79a-db30-4975-99b0-b89f41a492ac",
"url": "/companies/: company_key/mobiledb/persons/7807b79a-db30-4975-99b0-b89f41a492ac"
}
},
"failure": {
"errors": [
{
"error_code": 23 ***
}
]
}
}
}
}
Please refer to our documentation error codes here. For status reasons, please see the below table.
status_reason | Description |
---|---|
default_vibes_unknown | Default unknown state of a delivery receipt. |
enroute | The message is in route to reach the customer. |
queued_on_aggregator | The message has been accepted by the aggregator and has been queued. |
queued_on_carrier | The message has been accepted by the carrier and queued for delivery to the phone. |
delivered | Message has delivered to the handset. |
expired | Message validity expired before the message was delivered to the destination. |
deleted | Message was deleted on the SMSC. |
undeliverable | The message is undeliverable. |
accepted | The message was accepted. (i.e. has been manually read on behalf of the subscriber by customer service). |
unknown | The message is in an invalid state. |
rejected | The message is in a rejected state. |
not_optin | VMP does not have an opt-in for the MDN. Verizon specific status. |
pending | Message is pending in VMP for submission. Verizon specific status. |
submission_error | Verizon specific status. |
submitted | Message has been submitted to the SMSC. |
Notes
- When a customer event is sent into the platform, it may generate an SMS message that is required to be split into multiple parts to send to the carrier and eventually to device. In cases where the message is split into parts, there will be a Handset DLR for each part of the SMS message that was attempted to be sent to the carrier.
- A Handset DLR Callback will be generated for these scenarios:
- If an SMS message is small enough to not require splitting then there will be one Handset DLR and in turn one Handset DLR Callback generated indicating the success or failure of the attempted delivery to the device.
- If an SMS message is large enough that it is required to be split into parts to be sent to the carrier then:
- A Handset DLR Callback will be generated for each part that fails to be sent to the device.
- A Handset DLR Callback indicating a successful send to the device will ONLY be generated for the last part that was sent to the device.
Elements & Attributes
Field | Provided On | Description | Values |
---|---|---|---|
event_id | Success/Failure | Unique Event ID for the callback event. | |
event_date | Success/Failure | When the event occurred. | ISO-8601 YYYY-MM-DDTHH:MM:SSZ |
callback_type | Success/Failure | The callback type that was registered for. | Will always be event_processed |
event_type | Success/Failure | The event_type that was sent in the original event. | |
event_processed | Success/Failure | An object containing data about the event that triggered the callback. | |
event_processed.event_id | Success/Failure | The event_id of the event that triggered the callback. | See elements & attributes of an event for more information. |
event_processed.event_type | Success/Failure | The event_type of the event that triggered the callback. | See elements & attributes of an event for more information. |
event_data | Success/Failure | An object containing any event_data that was sent in the original event . | |
debug_data | Success/Failure | An object containing any debug_data that was sent in the original event. | |
action | Success/Failure | An object describing the details of the success or failure of the actions that were taken during the processing of the event that was sent to Vibes’ API. | |
action.type | Success/Failure | routing send_message | |
action.status | Success/Failure | Indication whether the action related to the event is in a processing state, failed or succeeded. | success failed processing |
action.status_reason | Success/Failure | Indicates the reason for the action status. | |
action.message_type | Processing/Failure | Indication of what type of message is being referenced. | sms |
action.sms.source.resource_url OR action.mms.source.resource_url | Processing/Failure (SMS or MMS) | The path to the resource that generated the message. | |
action.sms.person.person_key OR action.mms.person.person_key | Processing/Failure (SMS or MMS) | The person key identifier for the person that was associated to the message that was generated. | |
action.sms.person.resource_url OR action.mms.person.resource_url | Processing/Failure (SMS or MMS) | The path to the person resource that was associated to the message that was generated. | |
failure | Failure | If a failure has occurred, this object contains failure information for the action being described, including reason and error(s). |