Skip to contentSkip to navigationSkip to topbar
Rate this page:
On this page

Best Practices for Messaging Delivery Status Logging


Financial regulations require some companies to maintain a record of all communications, including unsuccessful attempts.

This best practices documentation focuses on logging for mobile-terminated or outbound messaging, but the process is similar for inbound messaging using Twilio-supported Messaging Channels, but the process is similar for inbound messaging.


How Twilio Message delivery status works

When you first make a request to the Programmable Messaging API, Twilio responds synchronously with either a 200 (success) or a 400 (failure) HTTP status code. If the request was successful, Twilio returns the Message SID in the response.

The Message SID is your record that an outbound message was created. Twilio recommends that you store this Message SID along with the initial status of the message at the time Twilio returned the Message SID to you.

Twilio's response to your outbound Message request


_24
{
_24
"account_sid": "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
_24
"api_version": "2010-04-01",
_24
"body": "Join Earth's mightiest heroes. Like Kevin Bacon.",
_24
"date_created": "Thu, 30 Jul 2015 20:12:31 +0000",
_24
"date_sent": "Thu, 30 Jul 2015 20:12:33 +0000",
_24
"date_updated": "Thu, 30 Jul 2015 20:12:33 +0000",
_24
"direction": "outbound-api",
_24
"error_code": null,
_24
"error_message": null,
_24
"from": "+15017122661",
_24
"messaging_service_sid": "MGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
_24
"num_media": "0",
_24
"num_segments": "1",
_24
"price": null,
_24
"price_unit": null,
_24
"sid": "SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
_24
"status": "sent",
_24
"subresource_uris": {
_24
"media": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Media.json"
_24
},
_24
"to": "+15558675310",
_24
"uri": "/2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages/SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.json"
_24
}

Message statuses

Your outbound message changes status throughout its lifecycle - from creation, through sending, to delivery, and even read receipt for supporting messaging channels.

See the complete list of Message Status values for an explanation of each status.

There are two ways for a user to receive message status updates:

  • Poll the API
  • Receive a Status Callback

Poll the API

At any point after a successful message creation, you can make a GET request to the Programmable Messaging API using the Message SID to determine the status of the message. Twilio returns the message record including the message status.

See Fetch a Message Resource for request details and a sample response which includes the message status. This works fine for small-volume use cases and ad hoc analysis but for large-scale logging, you should use status callbacks.

Receive a status callback

Twilio status callbacks allow you to track message status changes for outbound messages.

Outbound Message Status in Status Callbacks provides details on the expected transitions between message status values and for which status changes Twilio sends status callbacks.

You can follow our guide on tracking the message status of outbound messages for a foundational understanding of how to use these status callbacks.

Sample status callback

Example Callback for Status 'Delivered'


_10
MessageStatus: delivered
_10
MessageSid: SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
_10
MessagingServiceSid: MGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
_10
AccountSid: ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
_10
From: +16232320112
_10
ApiVersion: 2010-04-01
_10
To: +15622089096
_10
SmsStatus: delivered
_10
SmsSid: SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

The Programmable Messaging API's raw response may appear different from the above example.

High-volume callback data storage using Twilio Functions

For customers sending millions of messages in a given day, handling a high volume of callbacks can present an operational risk. Imagine sending 10 million messages and receiving 20 million callbacks. Using Twilio Functions, you can configure your status callback endpoint to write proactively to an external location such as AWS for post processing later.

Twilio Functions have the same reliability as other Twilio platform capabilities. For using Twilio Functions at scale, see Twilio Serverless Status Callback Handler built in AWS


Recommendations for maintaining messaging records

  • Record the relevant message details in persistent storage.
  • Update messages with the status and associated Message SID once known (whether you're using polling or status callbacks. Twilio recommends using Status Callbacks ). This persistent data store becomes the record of whether a message was sent successfully or not.
  • If a message status hasn't been updated to delivered or undelivered within 12 hours, make a polling request to the Programmable Messaging API to retrieve the status of the message based on the Message SID. It is possible that the status callback was not received.
  • It is always best practice to reconcile message statuses at least once a day to verify that no status events have been missed. Additionally, as part of the reconciliation process Twilio can return a list of all messages SIDs for a given time frame. See this Support article for details on Exporting SMS Logs in bulk.

    This list of SIDs can be used to determine if any messages got created during the sync phase for which no Message SID was returned. You can use the message envelope details like the message timestamp and recipient phone number (To) to find matching messages in your store that are missing these SIDs. If you're redacting data, the last 4 digits of the recipient phone number may be removed, but the remaining digits may be enough to match the SIDs appropriately.


Sending additional message identifiers

While a message returns the Twilio-defined SID by default, you may add more identifiers as URL query parameters when setting your status callback programmatically.

(information)

Info

For debugging purposes, you can also subscribe to the Twilio debugger webhook and get notified immediately when errors with your messages occur.


References & additional tools

  1. Outbound Message Status in Status Callbacks
  2. Track the Message Status of Outbound Messages
  3. Help Center article on Exporting SMS and Call Logs
  4. API Guide for the Message Resource
  5. Help Center article on Twilio Serverless Status Callback Handler built in AWS

Rate this page: