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.