SMS API

DecisionTelecom SMS API allows you to send SMS messages to any country in the world via API. Each message is identified by a unique random ID, so users can always check the status of a message using given endpoint.

The SMS API uses HTTPS with access key that is used as the API authorization. Request and response payloads are formatted as JSON using UTF-8 encoding and URL-encoded values.

API Authorization - Base64 access key.

Please contact your account manager to get an API key.

Send SMS

https://web.it-decision.com/v1/api/send-sms
{
    "phone":380632132121,
    "sender":"InfoItd",
    "text":"This is messages DecisionTelecom",
    "validity_period":120
}

Response:

{
    "message_data": [
        {
            "message_id": 26348338,
            "phone": 380632132122,
            "part_count": 1,
            "concat_part": 1,
            "status": "ACCEPTD"
        }
    ]
}

SMS Status

https://web.it-decision.com/v1/api/status?message_id=234234234

Response:

{
    "message_id": 26348265,
    "status": "DELIVRD"
}

Parameters:

message_id: int - A unique random ID which is created on the DecisionTelecom platform.

Phone: int - The telephone number that you want to do a network query on. - Required.

Text: string – sms message text

validity_period: int - SMS lifetime in minutes (min 1 minute, max 4320)

sender: string - The sender of the message, the maximum length is 11 characters

part_count: int - amount of messages

concat_part: int - Number of pieces of the message

status: string - possible sms status

Possible values of status:

DELIVRD, UNDELIV, ACCEPTD, EXPIRED, REJECTD, ENROUTE, DELETED, UNKNOWN

DELIVERED (DELIVRD) - The message has been successfully delivered to the end user.

EXPIRED (EXPIRED) - The message was not delivered because the delivery time expired.

DELETED (DELETED) - The message has been deleted and cannot be delivered.

UNDELIVERABLE (UNDELIV) - The message cannot be delivered due to a permanent error (e.g., incorrect number or other issues with the recipient).

ACCEPTED (ACCEPTD) - The message has been accepted by the operator's system but has not yet been delivered.

UNKNOWN (UNKNOWN) - The status of the message is unknown, possibly due to a temporary issue or an unidentified cause.

REJECTED (REJECTD) - The message was rejected by the system and will not be delivered (possibly due to operator policies or other technical reasons).

ENROUTE (ENROUTE) - The message has been forwarded to the network but has not yet been delivered to the end user.

Send SMS examples

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://web.it-decision.com/v1/api/send-sms',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{"phone":380632132121,"sender":"InfoItd","text":"This is messages DecisionTelecom","validity_period":300}',
  CURLOPT_HTTPHEADER => array(
    'Authorization: Basic api_key',
    'Content-Type: application/json',
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

SMS Delivery Report

SMS Callbacks

You can create analytics on your SMS traffic by using event-based webhooks — user-defined HTTP callbacks — to track the delivery status of outgoing messages.

For every SMS message you send, IT-Decision Telecom sends a status update to a URL you configure as a callback. You can store the information on your server for delivery status analysis. Upon one of these events, IT-Decision Telecom makes an HTTP request (POST) to an endpoint URL you’ve configured for the webhook. To handle a webhook, you must create a listener (web app) that can accept these HTTP requests from IT-Decision Telecom. IT-Decision Telecom automatically retries webhooks three times if an HTTP 200 status code is not returned:

Interval - 15 minutes, 12 hours , 1 day, If your URL is not available for the whole retry period, the data will be lost (Delivery Reports).

http://client.com/callback
[
    {
        "message_id": "26381482",
        "time_delivery": "2022-05-27 12:31:25",
        "phone": "380632132122",
        "status": "2",
        "part_count": "1",
        "concat_part": "1"
    },
    {
        "message_id": "26381475",
        "time_delivery": "2022-05-27 07:17:44",
        "phone": "380631211121",
        "status": "2",
        "part_count": "1",
        "concat_part": "1"
    },
    {
        "message_id": "26381473",
        "time_delivery": "2022-05-27 07:04:15",
        "phone": "380631111111",
        "status": "2",
        "part_count": "1",
        "concat_part": "1"
    }
]

Possible values of status:

Params:

phone: - The telephone number that you want to do a network query on. - Required.

Time_delivery - SMS delivery time format DATETIME (utc + 0)

part_count: - amount of messages

concat_part: - Number of pieces of the message

status: - possible sms status

ENROUTE = 1;

DELIVERED = 2;

EXPIRED = 3;

DELETED = 4;

UNDELIVERABLE = 5;

ACCEPTED = 6;

UNKNOWN = 7;

REJECTED = 8;

Bulk SMS Messaging

HTTP Authorization - Basic access key Base64

Send messages

https://web.it-decision.com/v1/api/multiple-message
{
	"phones": [380631111112, 380636151111],
	"sender": "info",
	"text": "when the text is more than 160 characters, the SMS is divided into several parts",
	"validity_period": 300
}

Response :

[
    [
        {
            "message_id": 26381268,
            "phone": 380631111112,
            "part_count": 2,
            "concat_part": 1,
            "status": "ACCEPTD"
        },
        {
            "message_id": 26381269,
            "phone": 380631111112,
            "part_count": 2,
            "concat_part": 2,
            "status": "ACCEPTD"
        }
    ],
    [
        {
            "message_id": 26381270,
            "phone": 380636151111,
            "part_count": 2,
            "concat_part": 1,
            "status": "ACCEPTD"
        },
        {
            "message_id": 26381271,
            "phone": 380636151111,
            "part_count": 2,
            "concat_part": 2,
            "status": "ACCEPTD"
        }
    ]
]

Params:

message_id int A unique random ID which is created on the DecisionTelecom platform.

Phones array The telephone number that you want to do a network query on.

sender string The sender of the message. This can be a mobile phone number (including a country code) or an alphanumeric string. The maximum length of alphanumeric strings is 11 characters.

text string Each multi-part text message is limited to 153 characters rather than 160 due to the need for user-data headers (UDHs) information.( 306 (2x153 characters) ,459 characters (3 x 153)…)

Mobile phones use UDH information to enable them to link long messages together so that they appear as single SMS messages in recipient’s phone inbox. Using Unicode, for languages such as Hindi, restricts your message to a maximum of 70 characters per SMS .

The maximum lengths of two-part and three-part multi-part Unicode text messages are 134 (2 x 67) and 201 (3 x 67) characters, respectively.

part_count int Count of parts

concat_part int Part number

validity_period int SMS lifetime min 2 minute max 4320

Bulk sms messages examples

curl --location --request POST 'https://web.it-decision.com/v1/api/multiple-message' \
--header 'Authorization: api key base64' \
--header 'Content-Type: application/json' \
--data-raw '{"phones":[380631111112,380636151111],"sender":"info","text":"when the text is more than 160 characters, the SMS is divided into several parts","validity_period":300}'

Check balance

Method GET

HTTP Authorization - Basic access key Base64

Request: header ‘Authorization basic api key’

{
    "balance": "6123.9500000",
    "currency": "UAH",
    "credit": 0
}

Examples Check balance

curl --location --request GET 'https://web.it-decision.com/v1/api/balance' \
--header 'Authorization: Basic api key' \

JAVA:
OkHttpClient client = new OkHttpClient().newBuilder()
  .build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
  .url("https://web.it-decision.com/v1/api/balance")
  .method("GET", body)
  .addHeader("Authorization", "Basic api key")
  
Response response = client.newCall(request).execute();

SMPP SMS API

Short Message Peer-to-Peer (SMPP protocol)

Used to send and receive large volumes of SMS traffic. The SMPP protocol is especially popular among SMS providers and telecom operators.

Please contact one of our consultants to get the data for connecting via the SMPP protocol.

SMPP Server

Below you can find the data for connection to the DecisionTelecom SMPP server:

Host name port TLS port

web.it-decision.com 2888 2999

User name and password

Your account manager in DecisionTelecom will provide you with a username (system_id) and password. If you haven't received them yet, or if you still need to make a request, simply send us an email at support@it-decision.com; We will be happy to help you.

Bindings and throughput

Whenever an SMPP account is set up for you, you will get the required number of connections (binds) and throughput. In most cases these values will be 1 bind and 50 messages per second.

It is interesting to note that these values can be higher at the request of the client.

Security

If you are connecting to any server via a TLS connection, be sure to select TCP port 2999. Also be aware that servers only accept methods SSLv1, SSLv2 and SSLv3.

Bind PDU

The bind_receiver, bind_transceiver, or bind_transmitter SMPP PDU request has a fixed set of fields. Most of the fields don't matter to us; in fact, we only read the system_id, password, and interface_version fields, and ignore the rest.

Interface_version

The DecisionTelecom SMPP server supports SMPP protocol version 3.4. Be aware that if you configure your SMPP client for version 3.3, you will miss out on some features, primarily the TLV information in the Deliver_sm PDUs.

Submit_sm PDU

You can use the submit_sm PDU to send us your messages. The submit_sm PDU request also has a couple of fields that are not used by our platform and can be safely ignored.

Data_coding

The values of the data_coding field are not explicitly declared in the SMPP specification, so each SMPP server is required to give its own definition. Below is a list of data encodings that we accept as input.

Last updated