Відправка СМС за протоколом SMPP - опис, параметри, команди

SMPP (Short message peer-to-peer protocol) - протокол, що описує взаємодію кінцевого клієнта з SMS-сервером (SMSC).

SMS-центр (SMSC) - відповідає за роботу служби коротких повідомлень мережі мобільного зв'язку. Його завданнями є зберігання, передача, конвертація та доставка SMS повідомлень.

SMPP v3.4 - для підключення до нашого сервера використовується протокол SMPP найбільш актуальною на сьогоднішній день версії 3.4 (додаток)

Параметри підключення

Основні параметри:

Додаткові параметри:

Підтримувані команди

Команда Опис
BIND_RECEIVERПідключитися як RECEIVER (клієнт може лише отримувати повідомлення від SMSC)
BIND_TRANSMITTERПідключитися як TRANSMITTER (клієнт може лише надсилати повідомлення на SMSC)
BIND_TRANSCEIVERПідключитися як TRANSCEIVER (клієнт здійснює двосторонню передачу повідомлень
SUBMIT_SMНадіслати повідомлення
QUERY_SMЗапитати статус повідомлення
DELIVER_SMНадсилання Delivery Receipt сервером
ENQUIRE_LINKПеревірка зв'язку
GENERIC_NAKПомилкова команда
UNBINDВимкнення

*На не підтримувані команди сервер відповідатимеGENERIC_NAK повідомленням з кодом помилкиESME_RINVCMDID.

Підтримувані команди

Параметр Опис Значення
source_addr_tonType of Number (TON) Тип номеру відправника0x00 - Невідомий (Unknown) 0x01 - Міжнародний (International) 0x02 - Державний (National) 0x03 -Мережевий Спеціальний (Network Specific) 0x04 - Номер Абонента (Subscriber Number) 0x05 - Алфавітно-цифровий (Alphanumeric) 0x06 - Скорочений (Abbreviated)
source_addr_npiNumbering Plan Indicator (NPI) Ідентифікатор плану нумерації відправника0x00 - Unknown 0x01 - ISDN (E163/E164) 0x02 - Data (X.121) 0x03 - Telex (F.69) 0x04 - Land Mobile (E.212) 0x05 - Національний 0x06 - Приватний 0x07 - 0x07 ) 0x09 - WAP Client Id (його повинен визначати WAP Forum)
dest_addr_tonType of Number (TON) Тип номера одержувача0x01 - Міжнародний (International)
dest_addr_npiNumbering Plan Indicator (NPI) Ідентифікатор плану нумерації одержувача0x01 - ISDN (E163/E164) (для номерів) 0x02 - National (для решти)
esm_classВказує Message Mode & Message Type Використовується для визначення спеціальних атрибутів короткого повідомлення0x00 - Тип стандартного повідомлення 0x40 - UDHI індикатор встановлено User Data Header Indicator - Вказівник Заголовка Даних користувача
registered_deliveryПараметр запиту статусу0x00 - прапор запиту статусу вимкнено 0x01 - прапор запиту статусу включено
data_codingВизначає схему кодування даних користувача короткого повідомлення.0x01 - IA5(CCITT T.50)/ASCII (ANSI X3.4) латинський алфавіт 7 біт на 1 символ максимальна довжина одного повідомлення 160 символів 0x07 - Latin/Hebrew(ISO-8859-8) латинський алфавіт 8 біт на 1 довжина повідомлення 140 символів 0x08 - UCS2(ISO/IEC-10646) для національних алфавітів (наприклад, українська) максимальна довжина повідомлення 70 символів

Правила роботи зі SMPP підключенням

Під час встановлення підключення клієнту дається 10 секунд, щоб відправити команду BIND_TRANSMITTER або BIND_TRANSCEIVER. Інакше з'єднання буде розірвано сервером.

Клієнт повинен відповідати на всі пакети, надіслані сервером відповідним resp пакетом протягом 1 хвилини. Інакше з'єднання буде розірвано сервером без надсилання UNBIND.

Для завершення сесії SMPP використовується команда UNBIND.

Якщо під час надсилання у пакеті Submit_sm встановлено прапорець registered_delivery, статус повідомлення буде повернено лише у підключення, встановлене від імені користувача, що надіслало повідомлення.

Одночасно можливе лише одне підключення від одного імені користувача. На всі додаткові підключення буде надіслано помилку (0x00000005 ESME Already in Bound State). Якщо потрібно зробити кілька підключень для одного кабінету, для кожного необхідно створити окремого користувача та використовувати його підключення.

Набуття статусу доставки повідомлення

Є дві можливості набуття статусу доставки (активний та пасивний). Пасивний варіант є кращим.

Пасивний варіант передбачає встановлення прапора registered_delivery пакета SUBMIT_SM. Після переходу повідомлення у фінал сервер відправить DELIVER_SM пакет з Delivery Receipt повідомленням. Формат Delivery Receipt повідомлення нижче.

Активний варіант передбачає періодичне опитування статусу повідомлення надсиланням QUERY_SM.

Формат Delivery Receipt

Розшифровка формату відповіді Delivery Receipt:

Поле Опис
idID повідомлення
subКількість надісланих повідомлень
dlvrdКількість доставлених повідомлень
submit dateЧас відправлення повідомлення
done dateЧас переходу повідомлення у фінальний стан
statСтатус повідомлення (розшифрування статусів див. нижче)
errМоже містити код помилки у разі не доставки повідомлення
textПерші 20 байт повідомлення

Розшифровка сатусів поляstat :

Статус Опис
delivrdДоставлено
expiredНе доставлено через перевищення періоду очікування доставки
deletedВилучено
undelivНе може бути доставлено
acceptdПрийнято на обробку
unknownСтатус не відомий (поле err може містити код помилки)
rejectdПовідомлення відкинуто

Зарезервовані коди помилок

Код HEX Код DEC Опис
0x04001024Кодування не розпізнане.
0x04011025Надто великий текст повідомлення. Максимальна довжина має перевищувати 160 байт.
0x04021026Помилка реєстрації повідомлення на надсилання. У разі виникнення цієї помилки зверніться до служби підтримки.
0x04031027Не пройшла перевірка тексту повідомлення на наявність неприпустимих слів та/або фраз.
0x04041028Відправник чи одержувач у чорному списку.
0x04531107Спрацювало обмеження щодо надсилання однакового тексту на той самий номер протягом невеликого проміжку часу.Зверніть увагу на підтримку, якщо хочете вимкнути або зменшити період.
0x043C1084Немає доступного тарифу для запитуваного напряму.
0x043F1087Немає відповідного тарифу у вищого контрагента.
0x045A1114Політика маршрутизації не знайдено.
0x04461094Помилка транспорту. У разі виникнення цієї помилки зверніться до служби підтримки.
0x04331075Недостатньо коштів на рахунку.

*Розшифровку помилок протоколу можна знайти у специфікації SMPP версії 3.4.