DLT Error Code Details

dlt error codes updated

Introduction:

The SMSINDIAHUB Messaging Platform uses the SMPP v3.4 Protocol Specification Issue 1.5, However it has been designed to be backward compatible with SMPP v3.3.

This document should be read in conjunction with SMPP v3.4 Specification v1.5 and assumes with SMPP a level of familiarity functionality. All the TSP’s have been mandated to comply to the TCCCPR regulation of 2019 by TRAI. In regards to the same, there are several changes which have been triggered in the way the A2P SMS business is being performed.

Scrubbing Model

For understanding the preference scrubbing model, we would need to establish certain definitions and their inter-relationships.

Note:

The terms ‘Sender’, ‘Entity’ and ‘Principal Entity’ will be used interchangeably in this document depending on the context however they mean the same

TermsDefinition and Remark
TransactionCheck for Sender registration, header registration and template
Service ImplicitCheck for Sender registration, header registration and template
Service ExplicitCheck for Sender registration, header registration, check for consent and template   If the consent scrub fails then preferences will be checked w.r.t Fully Block.   If preference scrub passes (i.e. Customer is not on FULLY BLOCK) then the message will be delivered. If both of these fail (i.e. Customer is on FULLY BLOCK), message will not be delivered.
PromotionalCheck for Sender registration, header registration, check for consent and template   If the consent scrub fails then preferences will be checked. If preference scrub passes then the message will be delivered. If both of these fails, message will not be delivered.
TermsDefinition and Remark
Sender/Principal EntityAs per the regulation – the definition is: “The person or entity who owns the telephone number or the header(s) that were used. A person or entity that publicly asserts or uses a Calling Line Identity (CLI) or the phone number(s) referred to in the communication, except where such assertion is fraudulent The person who sent the message or made a voice call, caused the message to be sent or the voice call to be made or authorized the sending of the message or making of the voice call The person or legal entity dealing with goods, or services, or land or property, or a business or investment opportunity that is offered or promoted; except where such entity maintains a distinct legal identity for the division or line of business dealing with offered goods, services or opportunity, in which case such division or line of business”   Interpretation for implementation: When they will register on DLT – they will be given a unique ID – “Principal Entity ID (PE ID)”Have one category from the categories listed in the preference regulations (e.g. Real Estate, Health, and Education etc.). An Entity can have association with only one type of category of businessEntity will own Headers, Registered Templates
TelemarketerAs per regulation – means a person or legal entity engaged in the activity of transmission or delivery of commercial communication or scrubbing or aggregation.   Interpretation for implementation: Once they register on DLT – they will be given a unique ID – “Telemarketer ID (TM ID)”They cannot own headers or templatesThey will have a billing relationship with the Operator.They do not have to prove their relationship with an entity to the Operator. They will directly send messages and the Operator will accept them for scrubbing on DLT. Based on scrubbing output the SMS will either be rejected or delivery will be attempted
Header/CLIHeader can be associated to Entities only and not to any TMHeader can be of two categories – Promotional or OthersOthers will encompass – government, stocks, transaction, service etc. all types of headers which are not promotional
Content Template (Script)                                This is the message text that the sender wishes to send to the subscriber. It may contain some fixed part and variable partOnce it is registered on DLT – a unique ID will be associated with this. This ID is called “Content Template ID”Each content template will need to be associated with a header using which it can be sent
TermsDefinition and Remark
ConsentAs per regulation – “Consent” means any voluntary permission given by the customer to sender to receive commercial communication related to specific purpose, product or service. Consent may be explicit or inferred as defined in these regulations   Interpretation for implementation: There are total of three separate processes associated with consent:   Consent Acquisition: process where the subscriber or the sender will initiate a consent acquisition process. The process will be initiated with bulk consent upload – other channels will be enabled subsequentlyConsent verification: process via which the TAP will verify the consent acquisition request received – Verification will be done by TAPConsent scrubbing: check whether the customer has provided the consent to the entity or notConsent will be stored in hashed format and encrypted format on DLT for added security measure
Consent TemplateMeans a template of content which is presented to the customer while acquiring his consent and clearly mentions purpose of the consent and details of sender   When consent template is approved, consent template ID will be generated from DLT.   When the subscriber gives the consent using the consent verification process, the consent template ID used to acquire it will be associated with the subscriber.   This association of the consent template ID will be checked with the MSISDN for sending the message.
PreferencesDefinition as per Regulation: “Means preference exercised by the customer to permit only a selected category of commercial communications out of available choices prescribed by relevant regulations” These preferences will map back to the category of business which the entity has selected during registration.

Figure below provides an understanding of scrubbing framework for preference scrubbing.

What will SIH Need to scrub from Entity?

The list below provides the minimum set needed for scrubbing.

  1. PE ID (New)
  2. Content Template ID (New)
  3. CLI/Header (already part of request)
  4. SMS Content (already part of request)

Sending a Message

How to send a message?

  • To Register on DLT to have – PE ID, Content Template ID and approved Header
  • For sending the messages, the entity can either approach SIH directly or come via any of their preferred TM who have connectivity with SIH.
  • There are three modes via which the messages can be sent using SIH as an Aggregator.
  1. Using SIH Web Interface
  2. Using SMPP interface
  3. Using SIH API interface

SMPP Interface

The SIH SMPP interface is provide the below facility.

  • Connectivity between Telemarketer and Operator
  • PDU validation check on Header, MSISDN, PE DLT ID, TM ID, Template ID
  • Data Encoding (DCS)
  • Scrubbing

For using the SMPP interface of SIH, there will four new mandatory parameters introduced in the SMPP PDU

ParameterReason
Principal Entity ID (PE ID)This will help the system execute overall scrubbing modelIn case of future customer complaints, PE will be held responsible for any message which has goneThis is also going to be used for the identity assertion by the TM for having an authority of sending the message on behalf of the PE.
Template IDTo check registration status of the messageTo perform scrubbing
Telemarketer ID (TM ID)This is field will define the billing relation with the Operator. If a PE is having a direct billing relationship with the Operator, then in that case PE ID = TM IDThis will be used for executing billing.This field is also used to check the authenticity of the Telemarketer and its identity assertion.

SMPP Protocol:

  • SMPP will contain optional TLV fields which can be used for the purpose of submission of additional parameters. To integrate fully, PE ID would have to add the same TLVs on their end. This additional TLVs will need to be added within every message in Submit SM.
  • Ref to new TLV Parameter, PE need to send the PE ID & TEMPLATE ID under the Two Optional Tag Value HEX 0x1400 & 0x1401.

Sample PDU for reference:

PDU:Submit_SM

BINARY:00000062000000040000000000000007000000424E4B425A5200000039 313931353835353539313500000000000001000000137465737420444C5420706C617

466726F6D20321490000631323334350014920006343536373800147C000400001C31c

ommand_length:98comman_d:0x00000004command_status:0x00000000sequenc e_number:7service_type:src_ton:0x00src_npi:0x00src_address:XXXXXXdest_ton:0x0 0dest_npi:0x00dest_address:919158XXXXXXesm_class:0x00protocol_id:0x00priority_ flag:0x00schedule_delivery_time:validity_period:registered_delivery:0x01replace_if_ present:0x00data_coding:t0x00sm_default_msg_id:0x00sm_length:0x0013 short

_message:7465737420444c5420706c617466726f6d2032 text:test DLTplatfrom 2 ExtraOptional 0x1400:(oct: (tlv: 5120) 313233343500) ExtraOptional0x1401:(oct:

(tlv:5121) 343536373800)

Hereafter, the revised definition of TLV fields are as follows:

Principal Entity ID TLV: 0x1400 (Hex), string, len = 30: this will be a unique client identifier on DLT platform.

Content Template ID TLV: 0x1401 (Hex), string, len = 30: this data corresponds to the content Template ID received when template is registered on DLT platform.

Sample PCAP screenshot is attached below which provides the information for SMPP new parameters:

TAGS

These new tags will be introduced in the optional parameter list; however, they will be checked mandatorily at operator’s end.

Optional ParametersOptional Tag value DecimalOptional Tag value Hex
PE_ID51201400
Template_ID51211401
Telemarketer_ID (TM_ID)51221402
  • Tag- PE_ID TAG_OPTIONAL_PARAM_1= 5120
  • Tag- TEMPLATE_ID TAG_OPTIONAL_PARAM_2=5121
  • Tag- TELEMARKETER_ID TAG_OPTIONAL_PARAM_3=5122

Connectivity

Clients may connect to the SMSINDIAHUB Messaging Platform Server multiple numbers of times. This may be of importance if the client wishes to deploy multiple applications simultaneously. To connect to the SMSINDIAHUB Messaging Platform one needs to specify the following parameters:

  • IP Address and Port: This is the TCP/IP endpoint on which the ESME should connect to the SMSINDIAHUB Messaging Platform.
  • system_id: This is the username of your account configured on the SMSINDIAHUB Messaging Platform.
  • Password: Password for the above account. Required for security reasons to prevent unauthorized access to your account.
  • system_type: This field is not used by us, hence set to null.
  • interface_version: The client application should connect with the interface_version field set to 0x34 (52 decimal), if it is using SMPP v3.4, otherwise the SMSINDIAHUB Messaging Platform assumes that the application is using SMPP v3.3.

If the application uses SMPP v3.3 then the optional fields cannot be used. These optional fields may be required to implement extra facilities like long SMS, etc.

  • enquire_link: The application should issue an enquire_link every minute. This will ensure the link stays active even when it is not in use. The SMSINDIAHUB Messaging Platform will automatically disconnect any link which is inactive for more than 5 min.

Submitting Messages

Submission Types

Messages may be submitted with either submit_sm or data_sm, using either the short_message or message_payload fields. The message length may not exceed the byte limit for the network that the message is being sent to (for example 140 bytes on GSM networks).

The SMSINDIAHUB Messaging Platform does not support submit_multi. If the same message has to be sent to multiple destinations, each message must be sent separately.

These are optional parameters are also not supported.

Concatenated messages are supported by using the User Data Header (UDH), which is included in the message size byte limit.

Submit Responses

A positive response to a ‘submit’ will contain an error code of zero and a non-null message reference.

A negative response will contain a SMSINDIAHUB vendor specific error code. The complete set of SMPP Error Codes and their associated values are defined in the following table.

Table 1 – SMPP Submission Error Codes

Error CodeValueDescription
ESME_ROK0x00000000No error.
ESME_RINVMSGLEN0x00000001Message length is invalid.
ESME_RINVCMDLEN0x00000002Command length is invalid.
ESME_RINVCMDID0x00000003Invalid command ID.
ESME_RINVBNDSTS0x00000004Incorrect BIND status for given command.
ESME_RALYBND0x00000005ESME already in bound state.
ESME_RINVPRTFLG0x00000006Invalid priority flag.
ESME_RINVREGDLVFLG0x00000007Invalid registered delivery flag.
ESME_RSYSERR0x00000008System error.
ESME_RINVSRCADR0x0000000AInvalid source address.
ESME_RINVDSTADR0x0000000BInvalid destination address.
ESME_RINVMSGID0x0000000CMessage ID is invalid.
ESME_RBINDFAIL0x0000000DBind failed.
ESME_RINVPASWD0x0000000EInvalid password.
ESME_RINVSYSID0x0000000FInvalid system ID.
Error CodeValueDescription
ESME_RINVSERTYP0x00000015Invalid service type.
ESME_RINVESMCLASS0x00000043Invalid esm_class field data.
ESME_RSUBMITFAIL0x00000045submit_sm failed.
ESME_RINVSRCTON0x00000048Invalid source address TON.
ESME_RINVSRCNPI0x00000049Invalid Source address NPI.
ESME_RINVDSTTON0x00000050Invalid destination address TON.
ESME_RINVDSTNPI0x00000051Invalid destination address NPI.
ESME_RINVSYSTYP0x00000053Invalid system_type field.
ESME_RTHROTTLED0x00000058Throttling error (ESME has exceeded allowed message limits)
ESME_RINVEXPIRY0x00000062Invalid message validity period (Expiry time).
ESME_RINVOPTPARSTREAM0x000000C0Error in the optional part of the PDU body.
ESME_ROPTPARNOTALLWD0x000000C1Optional parameter not allowed.
ESME_RINVPARLEN0x000000C2Invalid parameter length.
ESME_RMISSINGOPTPARAM0x000000C3Expected optional parameter missing.
ESME_RINVOPTPARAMVAL0x000000C4Invalid optional parameter value.
ESME_RDELIVERYFAILURE0x000000FEDelivery failure (used for data_sm_resp).
ESME_CREDIT_ERROR0x00000401Credits are over.
ESME_SPAM_MESSAGE0x00000404Spam content.
ESME_RINVSMLEN0x00000405Message length is exceeding in short_sm (e.g. for message type text max message length is 160 char).
ESME_RINVUDHLEN0x00000406Invalid UDH length indicator (Currently we allow 05, 06 with all type of data coding and 0b with data coding 245).
ESME_RINSMSEMPTY0x00000407Message body not found in either short_sm or message_payload.
ESME_RINDSTDND0x00000408Destination in DND.
ESME_RINSRCMSG0x00000409Invalid source/template.
ESME_RINSRCMSG0x00000410Source/template long message error code.
ESME_RINSRCMSG0x00000411Duplicate submission.
ESME_RINSRCMSG0x00000412Destination barred/Source barred.

Character Sets, Class and Data Coding

The SMSINDIAHUB Messaging Platform supports the following two types of data coding schemes:

  • GSM 03.38 Encoding (default)
  • Latin 1 (ISO-8859-1) encoding

The default character set is GSM 338. Although for data_coding=1 the character set

GSM 03.38 is supported it is NOT RECOMMENDED, as it is known to cause problems with character encoding. Please set data_coding = 3 for ISO-8859-1(if and only if told so explicitly) encoded messages and data_coding=0 for GSM 03.38 encoded messages.

For Unicode messages you have to set data_coding = 8 and the message is expected in UTF-16 Big Endean format.

Originators and Destination

The default originator type is full International MSISDN. Alpha numeric o network short code originators can be sent by using the following ton values in source_addr_ ton field.

Alpha-numeric5
National / Network Short Code3
International MSISDN1

Destination Address types are not supported. They can be set to any value but are always interpreted as 1. This requires all the destination numbers to be sent in an international format without the leading 00.

Long Messages

Long messages as the name suggests are messages whose length exceeds the normal length imposed on short messages (160 for text and 70 for Unicode).

The user can send long messages via the SMSINDIAHUB Messaging Platform using the following two methods:

•   Concatenated Messages

In this method the long message is sent in parts as multiple short messages which are then joined together on the mobile (If the mobile supports long messages, else each message part will be displayed as a separate message).

In this method the client sends the UDH (User Data Header) as part of the short_ message field. The UDH contains all the details required for the mobile join the parts and make the complete message at its end. In this method the client has to set the esm_class field in the submit_sm pdu to 0x43 (Store and Forward with UDHI)

•   Message Payload

Here the SMSINDIAHUB Messaging Platform can accept a message with length up to 64K octets. In this method the client uses the optional message_payload of the submit_sm pdu. To use this method the client should set the interface_version to 0x34; else this field will not be available for sending messages.

Delivery Reports

The SMSINDIAHUB Messaging Platform will return a delivery report (Intermediate and/or final depending on the route) for a specific message to the client application when the registered_delivery field, while submitting the message, is set to 1. In order to retrieve the delivery report from our server the client will have to connect to the SMSINDIAHUB Messaging Platform in the receiver or transceiver mode.

Table 2 – Delivery Statuses

StatusDescription
DELIVRDMessage delivered to device.
FAILEDMessage could not be delivered.
EXPIREDMessage validity period expired, before any successful tries of submission.
UNDELIVMessage is undeliverable.
REJECTDMessage rejected.

Adding the error codes and statuses which can be returned by Messaging Platform.

Table 3 – Error Codes and Statuses

Status ErrorStatusDescription
000DELIVRDDelivered to SIM.
001UNDELIVUnidentified subscriber.
005EXPIREDUnidentified subscriber.
009UNDELIVIllegal subscriber.
011UNDELIVTele service not provisioned.
012UNDELIVIllegal equipment.
013UNDELIVCall barred.
021UNDELIVFacility not supported.
027EXPIREDAbsent subscriber.
031EXPIREDSubscriber busy for MT_SMS.
032EXPIREDSM-Delivery Failure.
034EXPIREDSystem failure.
035UNDELIVData missing.
036UNDELIVUnexpected data value.
144UNDELIVUnrecognized component.
145UNDELIVMistyped component.
146UNDELIVBody structured component.
160EXPIREDDuplicate invoke ID.
161UNDELIVUnrecognized operation.
162UNDELIVMistyped parameter.
Status ErrorStatusDescription
163EXPIREDResource limitation.
164EXPIREDInitiating release.
165EXPIREDUnrecognized linked ID.
166EXPIREDLinked response expected.
167EXPIREDUnexpected linked operation.
176UNDELIVUnrecognised invoke ID.
177EXPIREDReturn result expected.
178UNDELIVMistyped parameter.
192EXPIREDUnrecognised invoke ID.
193EXPIREDReturn error unexpected.
194UNDELIVUnrecognised error.
195UNDELIVUnexpected error.
196UNDELIVMistyped parameter.
200UNDELIVUnable to decode response.
201EXPIREDProvider abort.
202UNDELIVUser abort.
203EXPIREDTimeout.
204UNDELIVAPI error.
205UNDELIVUnknown error.
404REJECTDInvalid message content.
408REJECTDDND error code.
409REJECTDSource/template error code.
410REJECTDSource/template long message error code.
411REJECTDDuplicate submission.
412REJECTDDestination barred/Source barred.
600REJECTDEntity not found.
601REJECTDEntity not registered.
602REJECTDEntity inactive.
603REJECTDEntity blacklisted.
604REJECTDInvalid entity ID.
605REJECTDInvalid optional parameter value.
606 – 609REJECTDEntity reserved.
610REJECTDTelemarketer not registered.
611REJECTDTelemarketer inactive.
612REJECTDTelemarketer blacklisted.
613REJECTDInvalid or missing TLV TM_ID.
614-619REJECTDTelemarketer reserved.
620REJECTDHeader not found.
621REJECTDHeader inactive.
622REJECTDHeader blacklisted.
Status ErrorStatusDescription
623REJECTDEID not matched with header.
624REJECTDSMS type of header is not match template.
625REJECTDSMS type is not match with header/Template SMS type.
626-629REJECTDHeader reserved.
630REJECTDInvalid or missing TLV template ID.
631REJECTDTemplate inactive.
632REJECTDTemplate blacklisted.
633REJECTDTemplate not matched.
634REJECTDHeader not registered for template.
635REJECTDTemplate variable exceeded max length.
636REJECTDError identifying template.
637REJECTDInvalid template ID.
638REJECTDInvalid SMS type.
639-649REJECTDTemplate reserved.
650REJECTDPreference not matched.
651-659REJECTDPreference reserved.
660REJECTDConsent failed.
661-669REJECTDConsent reserved.
670REJECTDScrubbing failed.
671REJECTDDLT scrubbing timeout.
672REJECTDInvalid or missing mandatory TLV.
673REJECTDInvalid or missing TLV PE_ID.
674-699REJECTDScrubbing reserved.
700PRSBMITPromo submitted to operator.
Like