SMPP протокол
підключення
Приклад налаштувань для підключення (формат kannel): group = smsc
smsc = smpp
smsc-id = smsc
host = smpp.smsc.ru
port = 3700
smsc-username =
smsc-password =
system-type = ""
interface-version = 34
source-addr-autodete ct = yes
source-addr-ton = 5
source-addr-npi = 1
dest-addr-ton = 1
dest-addr-npi = 1
validityperiod = 1440
transceiver-mode = true
receive-port = 0
enquire-link-interva l = 60
wait-ack-expire = 0
max-pending-submits = 300
throughput = 100
Максимально можливий інтервал бездіяльності становить 2 хвилини. Протягом цього часу Клієнту необхідно відправити повідомлення або виконати порожню команду ENQUIRE_LINK, інакше з'єднання буде розірвано через не активності.
Приклад додаткових налаштувань для підключення по SSL-протоколу (kannel версії 1.4.4 і вище).
port = 3443
ssl-client-certkey-f ile = "/etc/kannel.pem"
use-ssl = 1
.
Сертифікат можна згенерувати командою (Linux CentOS): / etc / ssl / certs / make-dummy-cert kannel.pem
Логін і пароль використовуються від особистого кабінету, але вони не повинні бути російською мовою.
Даний розділ містить тільки короткий опис SMPP-протоколу. Подробиці дивіться в специфікації.
Завантажити специфікацію протоколу SMPP v3.4 smpp34.zip (500 Кб) smpp34rus.zip (1,1 Mб).
швидкість розсилок
множинні підключення
За замовчуванням сервер обробляє одночасно з одного логіна тільки одне підключення для більш коректною віддачі статусів, тому під час наступного з'єднання раніше підключений з'єднання з таким же логіном буде автоматично завершуватися. Якщо ж необхідно мати кілька одночасних підключень для підвищення швидкості відправки, то можна в налаштуваннях всіх підключень задати наступне параметр (multi connection):
system-type = "MCON2"
або
system-type = "MCON9" Значення після MCON може бути від 1 до 9 і задає кількість одночасних підключень.
Відправка SMS-повідомлення
Для відправки SMS-повідомлення використовуйте команду SUBMIT_SM згідно специфікації.
Підтримуються наступні кодування:- 7-бітна GSM для латинського тексту з підтримкою європейських символів - (coding = 0);
- 8-бітна ISO-8859-1 (ASCII) для латинського тексту або бінарних даних - (coding = 1);
- UCS2 (UCS-2BE або UTF-16BE) для національних алфавітів (наприклад, російського) - (coding = 2).
Команда SUBMIT_MULTI для множинної розсилки поки не реалізована.
Сервер не приймає більше одного однакового запиту на відправку SMS-повідомлень протягом хвилини для захисту від помилок і зациклення в програмі на стороні Клієнта для того, щоб знизити навантаження і не витрачати кошти Клієнта, а також не допустити багаторазової відправки повідомлення одному абоненту.
Сервер також блокує відправку більше 50 повідомлень одному абоненту, які були відправлені з перервою між повідомленнями менше 30-ти секунд, для захисту від флуду і зайвого списання коштів з рахунку Клієнта, так як багато оператори не пропускають велику кількість повідомлень одному абоненту за короткий проміжок часу .
Відправка MMS-повідомлення
Для відправки MMS-повідомлення використовуйте команду SUBMIT_SM з текстом "__MMS__:
Відправка голосового повідомлення (дзвінок)
Для відправки голосового повідомлення використовуйте команду SUBMIT_SM з текстом "__CALL__:
- m (за замовчуванням) - чоловічий голос.
- m2 - чоловічий альтернативний голос.
- w - жіночий голос.
- w2 - жіночий альтернативний голос 1.
- w3 - жіночий альтернативний голос 2.
- w4 - жіночий альтернативний голос 3.
\ N "(переклад рядка, 3 тильди і знову новий рядок), після якої передати параметр param. Визначальний деякі характеристики дзвінка (більш докладно можна подивитися в описі).
Відправка viber-повідомлення
Для відправки viber-повідомлення використовуйте команду SUBMIT_SM з текстом "__VIBER__:
При формуванні тексту повідомлення можна використовувати спеціальні макроси для створення кнопки, при натисканні на яку буде відбуватися відкриття браузера і перехід за вказаною в макросі посиланням, а також прикріплювати файли. Більш докладно додаткові можливості при відправці viber-повідомлень описані в документації до http-протоколу.
Відправка HLR-запиту
Для відправки HLR-запиту використовуйте команду SUBMIT_SM з текстом __HLR__. Результат запиту приходить в звичайний статус (Delivery Report), який можна отримати як за SMPP-підключенню, так і по HTTP на свій обробник.
Формат статусу з результатом HLR-запиту, що повертається по SMPP: id:
Опис параметрів:
Назва оператора реєстрації абонента.
Назва роумінговій країни абонента при знаходженні в чужій мережі.
Назва роумінгового оператора абонента при знаходженні в чужій мережі.
Строкові дані, наприклад, країна і оператор, закодовані через функцію urlencode.
Приклад результату HLR-запиту: id: 855469 stat: DELIVRD err: 000 imsi: 250023012345678 msc: 79232510066 mcc: 250 mnc: 02 cn: Russian + Federatio n net: MegaFON + open + Joi nt + Stock + Company rcn: rnet:
Приклад коду на PHP для розбору рядка з результатом HLR-запиту:
$ Dlr = strtr ($ dlr. ":". "="); // $ dlr - рядок статусу
parse_str ($ dlr. $ m); // $ m - масив параметрів, $ m [ "id"], $ m [ "err"], $ m [ "imsi"] і тд.
Приклад розбору через регулярні вирази:
preg_match ( "/ ^ id: (\ d +) stat: (\ w +) err: (\ d +) imsi: (\ d *) msc: (\ d *) mcc: (\ d *) mnc: (\ d * ) cn: ([^] *) net: ([^] *) rcn: ([^] *) rnet: ([^] *) / ". $ dlr. $ m); // $ dlr - рядок статусу
for ($ i = 6; $ i <= 9 ; $i ++)
$ M [$ i] = urldecode ($ m [$ i]);
// $ m - масив параметрів, $ m [1] = id, $ m [2] = status, $ m [3] = err і тд.
Для відправки Ping-SMS використовуйте команду SUBMIT_SM з текстом __PING__.
Перевірка статусу
Отримувати статус доставки відправленого SMS-повідомлення по SMPP-протоколу можна як в автоматичному режимі, отримуючи від сервера відповідну PDU-команду DELIVER_SM відразу після зміни статусу, так і за запитом окремою командою QUERY_SM. Для автоматичного отримання статусу необхідно підключатися в режимі transceiver або receiver і при відправці SMS вказати прапор запиту статусу (registered_delivery). Крім цього, можливо отримувати статуси на HTTP-обробник.