MEP Expression Language
Message Delivery Reports
Variable |
Description |
Type |
---|---|---|
request.deliveryReport. name |
This expression returns the delivery report state for an MT SMS. Delivery reports indicate whether a message was successfully delivered, failed, or was rejected. To provide more granularity for why a message was unsuccessful, there are multiple failure and rejected states. This enables you to create a service that can react based on why a message failed. This expression must come after a Send SMS handler that is set to wait for delivery reports. You can use this variable in the Services tab only. |
String |
Table of returned SMS Delivery Reports
Delivery reports are grouped into the following categories:
- DELIVERED — the message was successfully delivered to the mobile phone.
- REJECTED — the mobile operator rejected the request.
Depending on why the mobile operator rejected the message, OpenMarket may use our retry strategy to attempt to submit the message. In these instances, a delivery report state is returned only once the retry strategy is complete. - FAILED — the message failed after it was submitted to the mobile operator.
The handlers for sending SMS messages already include separate outcome options based on the success or failure of a message. Therefore, only delivery report states for failed/rejected messages are listed here.
Some mobile operators check a message request before accepting it (synchronous validation), while other operators perform message checking only after they have accepted the request (asynchronous validation). If a request is rejected during synchronous validation, then we will return a REJECTED delivery report. If a request is rejected during asynchronous validation, then we return a FAILED delivery report. In practice this means that the same issue can return either a REJECTED or FAILED response based on which mobile operator received the request. For example, REASON_FAILED_EXPIRED and REASON_REJECTED_EXPIRED are for the same issue. For brevity, only the REJECTED responses are listed in the table below.
General errors
State |
Description |
---|---|
General errors |
|
REASON_REJECTED |
Unknown error: An unexpected error occurred during delivery, where we cannot differentiate between a system failure (some part of system not functioning correctly) and an expected failure (unknown mobile number, etc). |
REASON_REJECTED_EXPIRED |
Message expired: The message exceeded its validity period before a delivery attempt could be made. |
Issues due to problems with your service setup |
|
REASON_REJECTED_SOURCE |
Invalid originator: The originator on this message was invalid. The originator is your source address and in different regions may be a short code, toll-free number, landline, virtual mobile number (long code) or alphanumeric string. |
REASON_REJECTED_SOURCE_NOTPROVISIONED |
Invalid short code: The short code has not been provisioned. Contact OpenMarket support. |
REASON_REJECTED_SOURCE_NOTPROVISIONEDTESTONLY |
Mobile number not in test list: An attempt was made to send a message to an unwhitelisted end user from a routing code which has only been provisioned for testing. |
Issues due to a temporary problem with reaching the mobile number |
|
REASON_REJECTED_DESTTEMP |
Invalid mobile number: The mobile number is unreachable; however, we believe this is a temporary delivery problem. |
REASON_REJECTED_DESTTEMP_BARRED
|
Barred (temporary): There is a temporary bar on delivering messages to the mobile number.
|
REASON_REJECTED_DESTTEMP_SIMFULL
|
SIM full: Message could not be delivered as handset message memory is full.
|
REASON_REJECTED_DESTTEMP_ABSENT |
End user absent: Message could not be delivered as handset is absent from the mobile operator.
|
REASON_REJECTED_DESTTEMP_DELIVFAIL |
Temporary delivery failure: Temporary delivery problem to the destination.
|
Issues due to a permanent problem with reaching the mobile number |
|
REASON_REJECTED_DESTPERM
|
Permanent failure: Delivery to this end user has failed for an unknown reason. It may be due to a premium-rate bar, so it may still be possible to deliver bulk messages to this user after failure of a premium message.
|
REASON_REJECTED_DESTPERM_BARRED |
Barred (permanent): Delivery to this end user has been barred. |
REASON_REJECTED_DESTPERM_NOSMS |
All SMS barred: This end user cannot receive bulk or premium SMS messages from any sender. |
REASON_REJECTED_DESTPERM_UNKNOWNSUB
|
Unknown number: The mobile number does not represent a known end user. For billing traffic, or traffic within the USA, this may be mobile operator specific - i.e. the end user may be known by another operator. For non-USA bulk messages it means the number is invalid. |
REASON_REJECTED_DESTPERM_PORTED
|
Number ported: This end user is known to have ported off-net; delivery through this mobile operator is no longer possible. |
REASON_REJECTED_DESTPERM_RESELLER |
End user connected through reseller: End user obtains connectivity via a reseller; messaging to this user is therefore barred. |
REASON_REJECTED_DESTPERM_MVNO |
End user connected through MVNO: End user obtains connectivity via a virtual mobile operator (MVNO); messaging to this user is therefore barred. |
Issues due to an unexpected error when processing the message |
|
REASON_REJECTED_SYSFAIL |
System problem: Some part of OpenMarket or mobile operator systems is not functioning correctly. Contact OpenMarket support for more details. |
REASON_REJECTED_SYSFAIL_BILLING |
System problem: As per REASON_REJECTED_SYSFAIL, but for errors occurring during billing phase. |
Issues due to the message content |
|
REASON_REJECTED_MSG |
Rejected by mobile operator: The mobile operator rejected the message contents. Used where we have no further information as to the problem with the contents. |
REASON_REJECTED_MSG_UNICODE |
Unicode unsupported: Unicode (UCS2) messages are not supported on this mobile operator or routing code. |
REASON_REJECTED_MSG_BINARY |
Binary unsupported: Binary (8-bit) messages are not supported on this mobile operator or routing code. |
REASON_REJECTED_MSG_OPTIN |
Invalid opt-in: Message could not be submitted to mobile operator due to invalid opt-in details. |
Billing errors
Billing issues begin with "REASON_REJECTED_BILLING" or "REASON_FAILED_BILLING".
State |
Description |
---|---|
Generic billing issues |
|
REASON_REJECTED_BILLING |
Generic billing issue: An unexpected error occurred during billing, where we cannot differentiate between a system failure (some part of system not functioning correctly) and an expected failure (subscriber out of credit, etc). |
REASON_REJECTED_BILLING_PREPAYUNSUP |
Prepay billing issue: Billing of prepay end users is not supported on this mobile operator. |
REASON_REJECTED_BILLING_PSMSBARRED |
Charges to account barred: Charges to this end user have been barred by the mobile operator - no further information available from mobile operator. |
REASON_REJECTED_BILLING_ACCOUNT_CLOSED |
End user account closed: Attempt to bill against a closed account. This end user should not be billed further. |
REASON_REJECTED_BILLING_ACCOUNT_LOCKED |
End user account locked: Attempt to bill against a locked/suspended account. |
REASON_REJECTED_BILLING_BARRED_RESELLER |
End user connected through reseller: The end user obtains connectivity via a reseller; billing of this user is therefore barred. |
REASON_REJECTED_BILLING_BARRED_ADULT |
End user is adolescent or age is unknown: Adult settings on end user account prevent billing of user. |
Billing issues where the charge was rejected, but the end user is still billable |
|
REASON_REJECTED_BILLING_CHARGEFAILED |
Charge failed but account still billable: The charge was rejected by the mobile operator. This state is returned when none of the reasons below apply, but we believe that the end user is still billable (unlike REASON_REJECTED_BILLING_PSMSBARRED). |
REASON_REJECTED_BILLING_OPTINEXPIRED |
Opt-in issue: On mobile operators where the operator controls an opt-in process (eg, AT&T ACM), this reason code is returned if no positive opt-in is received within the time limit allowed by the mobile operator, e.g. if the PIN has expired (the with-PIN workflow) or the opportunity to reply "Y" has expired (the without-PIN workflow). |
REASON_REJECTED_BILLING_MANDATE_TERMINATED |
Subscription finished: A previously-active subscription billing mandate has now terminated. No further billing should be performed under this subscription. |
REASON_REJECTED_BILLING_MANDATE_EXCEEDED |
Subscription charge incorrect: This charge exceeds the terms (eg, monthly limit) of a subscription billing mandate. |
REASON_REJECTED_BILLING_ACTIVE_OPTIN |
Opt-in already in progress: On mobile operators where the operator controls the opt-in process (e.g., AT&T or Verizon), this state is returned if there is already a pending opt-in process for this subscription. |
Billing issues where the end user has reached a credit or spending limit |
|
REASON_REJECTED_BILLING_SPENDCAP_OR_OUTOFCREDIT |
End user has credit issue: End user has reached a spending limit, or is out of credit. Used when we cannot distinguish which of these is correct. |
REASON_REJECTED_BILLING_SPENDCAP |
End user spend limit reached: The end user has reached a spending limit (eg, monthly spend cap). |
REASON_REJECTED_BILLING_OUTOFCREDIT |
End user credit limit reached: The end user has exceeded their credit limit. This is specific to limits which can be resolved by the end user adding credit to their account. Note that this may apply to either pre or postpay users. |