Відправка СМС за протоколом 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_ton | Type of Number (TON) Тип номеру відправника | 0x00 - Невідомий (Unknown) 0x01 - Міжнародний (International) 0x02 - Державний (National) 0x03 -Мережевий Спеціальний (Network Specific) 0x04 - Номер Абонента (Subscriber Number) 0x05 - Алфавітно-цифровий (Alphanumeric) 0x06 - Скорочений (Abbreviated) |
| source_addr_npi | Numbering 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_ton | Type of Number (TON) Тип номера одержувача | 0x01 - Міжнародний (International) |
| dest_addr_npi | Numbering 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:
| id | ID повідомлення |
| sub | Кількість надісланих повідомлень |
| dlvrd | Кількість доставлених повідомлень |
| submit date | Час відправлення повідомлення |
| done date | Час переходу повідомлення у фінальний стан |
| stat | Статус повідомлення (розшифрування статусів див. нижче) |
| err | Може містити код помилки у разі не доставки повідомлення |
| text | Перші 20 байт повідомлення |
Розшифровка сатусів поляstat :
| delivrd | Доставлено |
| expired | Не доставлено через перевищення періоду очікування доставки |
| deleted | Вилучено |
| undeliv | Не може бути доставлено |
| acceptd | Прийнято на обробку |
| unknown | Статус не відомий (поле err може містити код помилки) |
| rejectd | Повідомлення відкинуто |
Зарезервовані коди помилок
| 0x0400 | 1024 | Кодування не розпізнане. |
| 0x0401 | 1025 | Надто великий текст повідомлення. Максимальна довжина має перевищувати 160 байт. |
| 0x0402 | 1026 | Помилка реєстрації повідомлення на надсилання. У разі виникнення цієї помилки зверніться до служби підтримки. |
| 0x0403 | 1027 | Не пройшла перевірка тексту повідомлення на наявність неприпустимих слів та/або фраз. |
| 0x0404 | 1028 | Відправник чи одержувач у чорному списку. |
| 0x0453 | 1107 | Спрацювало обмеження щодо надсилання однакового тексту на той самий номер протягом невеликого проміжку часу.Зверніть увагу на підтримку, якщо хочете вимкнути або зменшити період. |
| 0x043C | 1084 | Немає доступного тарифу для запитуваного напряму. |
| 0x043F | 1087 | Немає відповідного тарифу у вищого контрагента. |
| 0x045A | 1114 | Політика маршрутизації не знайдено. |
| 0x0446 | 1094 | Помилка транспорту. У разі виникнення цієї помилки зверніться до служби підтримки. |
| 0x0433 | 1075 | Недостатньо коштів на рахунку. |
*Розшифровку помилок протоколу можна знайти у специфікації SMPP версії 3.4.