Подключение по SMPP
SMPP — это постоянное соединение с SMS-Docs: приложение подключается один раз и держит сессию открытой, сообщения уходят по ней, а отчёты о доставке приходят обратно по той же сессии, без единого запроса с вашей стороны.
Именно поэтому его выбирают под ровный поток. Ничего не нужно опрашивать и ничего планировать: как только оператор сообщил о сообщении, отчёт уже у вас в сокете.
Куда подключаться
| Адрес | Порт | |
|---|---|---|
| Без шифрования | smpp.alphasms.net | 3700, 2775 |
| TLS | smpp-tls.alphasms.net | 2995 |
Оба порта обычного адреса работают одинаково — берите тот, что ваша библиотека предлагает по умолчанию. У адреса TLS собственный сертификат, который выбирается по имени подключения, поэтому указывайте клиенту имя и оставляйте проверку сертификата включённой.
Учётные данные
Сессия использует вашу учётную запись кабинета:
| Поле | Что вписать |
|---|---|
system_id | Логин кабинета |
password | Пароль кабинета |
system_type | Оставить пустым |
Две вещи задаются один раз на экране настроек API:
- SMPP — переключатель, который открывает протокол для учётной записи.
- IP-адрес — впишите его, и сессия принимается только с этого адреса. Оставите пустым — принимается с любого адреса, где знают пароль.
Подключение сессии
Принимаются все три вида подключения: bind_transmitter, bind_receiver и
bind_transceiver. Одно подключение на соединение — чтобы отправлять и принимать
одновременно, подключайтесь как transceiver либо откройте второе соединение приёмником.
Отправка
Сообщения идут в submit_sm.
| Поле | Что означает здесь |
|---|---|
source_addr | Подпись отправителя. Зарегистрируйте её в кабинете заранее: сессия отправляет под подписями, согласованными для вашей учётной записи |
destination_addr | Номер получателя в международном формате |
data_coding | 0 — GSM 7-bit, 1 — ASCII, 3 — Latin-1, 8 — UCS-2 |
registered_delivery | Запросить отчёт о доставке |
validity_period | Сколько времени сообщение имеет смысл доставлять |
schedule_delivery_time | Отправить позже, а не сейчас |
Длина и части. Одиночное сообщение вмещает 160 символов в GSM 7-bit и 140 октетов в
UCS-2; в составном сообщении часть вмещает 153 и 134. Понятны оба способа разбивки — UDH
внутри тела сообщения и поля sar_msg_ref_num / sar_total_segments /
sar_segment_seqnum, — а части считаются так же, как и везде в кабинете, поэтому число в
вашем отчёте совпадает с числом в счёте.
submit_sm_resp возвращает message_id. Сохраните его: отчёт о доставке этого сообщения
придёт с тем же значением.
Отчёты о доставке
Отчёты приходят как deliver_sm в стандартном виде:
id:0199ab45-6c7d-7e8f-9012-3456789abcde sub:001 dlvrd:001 submit date:2609171432 done date:2609171433 stat:DELIVRD err:000 text:
id: — это message_id из submit_sm_resp, а stat: — исход:
stat: | Что произошло |
|---|---|
DELIVRD | Оператор подтвердил доставку на телефон |
ENROUTE | В пути, исход пока неизвестен |
ACCEPTD | Принято оператором |
EXPIRED | Срок жизни истёк раньше, чем телефон вернулся в сеть |
UNDELIV | Оператор не доставил |
REJECTD | Сообщение не принято к отправке |
DELETED | Сообщение отменено |
UNKNOWN | Оператор не сообщил исход |
На каждый отчёт отвечайте deliver_sm_resp. Одновременно в пути держится до двадцати
отчётов, а следующие идут сразу, как только вы подтвердите уже отправленные.
Как держится сессия
Отправляйте enquire_link на тихой сессии — раз в минуту достаточно, — и сессия живёт
столько, сколько её держит ваше приложение. unbind закрывает её аккуратно.
Что понимает сессия
| PDU | |
|---|---|
bind_transmitter, bind_receiver, bind_transceiver | Открыть сессию |
submit_sm | Отправить сообщение |
deliver_sm | Отчёты о доставке и входящие сообщения, от нас к вам |
deliver_sm_resp | Ваше подтверждение отчёта |
enquire_link | Поддержать сессию |
unbind | Закрыть сессию |
Всё отправленное по SMPP попадает в те же отчёты, что и остальное: отчёт об отправках через API и SMPP показывает эти сообщения построчно, с теми же статусами, что несут отчёты о доставке.