В письмо добавьте подробности — так поможем быстрее
- Название компании
- system_id — логин для подключения к платформе
- описание проблемы
- пример сообщения: дата, время, system_id, имя отправителя, номер получателя, message_id, коды ошибок
- tcpdump, логи с ошибкой, статистика по ошибке
Почему SMS могут не отправляться
- Не куплен пакет SMS. Если у вас тестовый период — пакет нужно подключать каждый день. Посмотреть пакеты можно в личном кабинете иконка кошелька → пакеты SMS
- Не подключено имя отправителя. Проверить статус имени можно в личном кабинете Аккаунт → Имя отправителя
- Имя отправителя подключено не на всех операторов. Тогда SMS будут уходить только на подключённых операторов
Как настроить SMPP-подключение черeз Stunnel
Как настроить SMPP-подключение черeз IPsec
Требования к отправке сообщений
⚙️ Чтобы SMS отправлялись
- В личном кабинете МТС Маркетолога должно быть подключено имя отправителя для рассылок по своей базе PRO.
- Должен быть подключен пакет SMS.
Как настроить SMPP-подключение черeз Stunnel
- Напишите нам в поддержку на supmarketolog@mts.ru, чтобы мы добавили ваш IP-адрес в разрешённые.
Тема письма: Cетевой доступ для SMPP, ИНН организации
В письме: название организации и ИНН, логин от SMPP-подключения, IP-адрес, до которого нужно открыть доступ.
- Установите stunnel на компьютер и запустите его. Инструкция по установке на разные ОС есть в конце статьи.
- При подключении командой bind_transceiver, используйте ip-адрес stunnel 127.0.0.1 и порт 3800. Если stunnel и SMPP клиент находятся на разных хостах, укажите ip-адрес хоста, на котором установлен stunnel.
- При запуске сессии командой bind_ установите в PDU параметры:
system_id — логин, который вы получили при создании SMPP-подключения в кабинете МТС Маркетолога
password — пароль, оттуда же - Как запустите сессию — можно отправлять SMS командой submit_sm.
Подробнее о команды bind_* и submit_sm — в спецификации SMPP 3.4
❔ Как получить логин и пароль
В личном кабинете МТС Маркетолога: Рассылки по своей базе PRO → Интеграции → SMPP и создать подключение — сгенерируем логин и пароль.
Как настроить SMPP-подключение черeз IPsec
Сперва отправьте заявку
Напишите нам на почту templates@mts.ru.
Тема: SMPP IPsec, в письме: ИНН, лицевой счёт кабинета.
С вами свяжется менеджер и обсудит детали. После этого мы сделаем все настройки на стороне МТС.
После настроек на стороне МТС:
- Настройте L2L сеть через IPsec.
- Поднимите SMPP-подключение:
2. 1. При подключении командой bind_transceiver, используйте ip-адрес 10.241.88.195, порт 3700. Либо URL prov.omnichannel.vas.mts.ru:3700
2. 2. При запуске сессии командой bind_ установите в PDU параметры:
system_id — логин, который вы получили при создании SMPP-подключения в кабинете МТС Маркетолога
password — пароль, оттуда же.
2. 3. Как запустите сессию — можно отправлять SMS командой submit_sm.
Подробнее о команды bind_* и submit_sm — в спецификации SMPP 3.4
❔ Как получить логин и пароль
В личном кабинете МТС Маркетолога: Рассылки по своей базе PRO → Интеграции → SMPP и создать подключение — сгенерируем логин и пароль.
Требования к отправке сообщений
Термины
SMSC — SMS-центр
Пользователь — вы
Оборудование — например, ваш сервер
Абонент — получатель SMS
- Протокол взаимодействия с SMSC — SMPP v3.4
- Сервис работает в синхронном и асинхронном режимах. Размер окна — 99, пропускная способность — 10 SMS в секунду.
- Для обмена SMS между оборудованием и SMSC может использоваться любой из типов подключения: transmitter, receiver, transceiver — в зависимости от направления трафика: на Пользователя, от Пользователя, на и от Пользователя.
- Если SMPP- и TCP-сессии оборвутся, ожидайте 1,5 минуты — после установите новую TCP-сессию и отправьте в сторону SMSC PDU команду bind_transceiver/ bind_transmitter / bind_receiver. Если соединение оборвётся, увеличьте ожидание до 2 минут.
- При отправке PDU bind_transceiver выставите значения полей
Address TON (addr_ton) = 0
Address NPI (addr_npi) = 0
Address Range (address_range) = NULL
- Номер получателя в формате 79ххххххххх должен иметь:
destination_addr_ton = 1 и destination_addr_npi = 1
Буквенно-цифровой номер отправителя (alphanumeric) должен иметь:
source_addr_ton = 5, source_addr_npi = 0
- Оборудование должно отправлять на каждый полученный от SMSC PDU deliver_sm (data_sm) подтверждение deliver_sm_resp (data_sm_resp) со статусом 0 (OK). Отправка PDU generic_nack запрещена
- Оборудование должно отправлять PDU enquire_link каждые 30 секунд вне зависимости от наличия или отсутствия трафика в SMPP-соединении.
- SMS из более чем из одного сегмента, отправленные со стороны контент-провайдера, должны содержать UDH или SAR параметры — чтобы корректно соединить части сообщения абонентским терминалом Пользователя
- В одной части составного SMS можно передавать не более 67 символов в кириллице и 153 в латинице.
- Если SMSC получает от Оборудования составное SMS, то отправляет ответ в PDU submit_sm_resp — каждый раз, когда получает часть SMS. При этом Оборудование должно передать все части составного SMS за период не более 60 секунд. Если не соблюдать требование, SMSC не отправит полученные от Оборудования части составного SMS и отправит на Оборудование PDU deliver_sm с отчётом о доставке delivery report, содержащим код ошибки 0x00000384 (ESME_RCNCTTIMEOUT).
- Используйте схему кодировки DCS 0х03 (HEX) для текста на латинице и DCS 0х08 (HEX) для текста на кириллице — в соответствии со спецификациями SMPP v3.4/v.5.0, 3GPP TS 23.038.
- Значение параметра validity_period не должно быть меньше 60 секунд. Если значение будет меньше — оно принудительно изменится на 60.
- Кодировка поля destination_addr должна быть в ASCII (символы между 36 (0x24) и 126 (0x7E)).
- Значение поля protocol_id должно быть = 0.
- Контролируйте равномерность скорости отправки SMS. Например, если установлено ограничение 100 SMS в секунду — отправляйте SMS каждые 10 миллисекунд, а не 100 SMS за первые 100 миллисекунд.
- Если при разрыве TCP-сессии со стороны SMSC в сторону Оборудования отправляется TCP-пакет с флагом FIN, то в ответ Оборудование должно отправить пакет FIN (FIN, ACK). Любой другой ответ запрещён.
- Чтобы отслеживать правильность взаимодействия SMSC и Оборудования по протоколам TCP и SMPP, рекомендуем использовать протокольный анализатор — например, Wireshark. Если возникнут проблемы в работе сервиса следует провести анализ tcpdump, описать проблему и направить tcpdump на supmarketolog@mts.ru
Ошибки при отправке
Если SMS не отправилось, SMSC может передать код ответа в PDU submit_sm_resp, так и в PDU deliver_sm в виде отчёта о доставке.
Даже если SMS принято к отправке, доставка SMS не гарантирована
Операция | Код ошибки | Что делать |
---|---|---|
submit_sm_resp | Invalid Destination Address | Удалите сообщение из очереди и больше не пытайтесь отправить |
submit_sm_resp | Throttling error | Поместите сообщение, на которое пришла ошибка, в начало очереди на отправку. Время ожидания перед повторной отправкой сообщений с Оборудования в данном соединении должно составлять 1 секунду. |
submit_sm_resp | Message Queue Full | Поместите сообщение, на которое пришла ошибка, в конец очереди. И выполните от 3 до 5 повторных попыток отправки, каждый раз возвращая это SMS в конец очереди — если ошибка повторяется. Рекомендуем применять прогрессивный метод обработки этой ошибки: после первой ошибки делать паузу перед отправкой 5 секунд, при второй — 15 секунд, третьей — 45 секунд и т. д. Если после 3-5 попыток доставить SMS возвращается ошибка Message Queue Full, удалите его из очереди. |
deliver_sm | 620 | |
submit_sm_resp | Invalid Source Address | Заблокируйте отправку сообщений с данного номера отправителя. Не повторяйте отправки, пока не получите от МТС уведомление, что номер внесли в разрешённый список номеров отправителей на SMSC. |
submit_sm_resp | Message Length is invalid | Уменьшите количество символов в тексте сообщения в полях short_message или message_payload TLV в соответствии с ограничениями протокола GSM. Спецификация GSM 03.40/3GPP TS 23.040 |
deliver_sm | 950 | Приостановите отправку SMS, удалите сообщения из очереди и не отправляйте снова в течение 24 часов. |
Код ошибки 903 SMSC delivery timeout (ESME_RDLVRTIMEOUT) формируется, если через 72 часа после принятия SMS к отправке от SMSC не получен pdu deliver_sm c delivery_report. Либо после истечения срока, заданного в pdu submit_sm (validity period).
SMPP Error Code | Value (HEX) | Description | CDR ‘command_status’ field (message status) | Value (HEX) | Value (DEC) | Description |
ESME_ROK | 0x00000000 | No Error | MSG_ERROR_NONE | 0x00 | 0 | No error occurred |
ESME_RINVMSGLEN | 0x00000001 | Message Length is invalid | MSG_ERROR_VALIDATION | 0x84 | 132 | Message is invalid |
ESME_RSYSERR | 0x00000008 | System Error | MSG_ERROR_UNROUTABLE | 0x0b | 11 | Unroutable message |
ESME_RINVSRCADR | 0x0000000A | Invalid Source Address | MSG_ERROR_INVALID_SRC | 0x85 | 133 | Invalid source address |
ESME_RINVSRCADR | 0x0000000A | Invalid Source Address | MSG_ERROR_FORBIDDEN_SRC | 0x8b | 139 | Forbidden source address |
ESME_RINVDSTADR | 0x0000000B | Invalid Dest Addr | MSG_ERROR_UNKNOWN_RECIPIENT | 0x81 | 129 | The recipient is unknown |
ESME_RINVDSTADR | 0x0000000B | Invalid Dest Addr | MSG_ERROR_INVALID_DST | 0x88 | 136 | Invalid destination address(es) |
ESME_RINVDSTADR | 0x0000000B | Invalid Dest Addr | MSG_ERROR_FORBIDDEN_DST | 0x8c | 140 | Forbidden destination address |
ESME_RINVDSTADR | 0x0000000B | Invalid Dest Addr | MSG_ERROR_MNP_CHECK_BARRING | 0x8e | 142 | MNP check barring error |
ESME_RMSGQFUL | 0x00000014 | Message Queue Full | MSG_ERROR_CONGESTION | 0x0a | 10 | Congestion error |
ESME_RTHROTTLED | 0x00000058 | Throttling error (ESME has exceeded allowed message limits) | MSG_ERROR_THROTTLED | 0x09 | 9 | Throttling error |
ESME_RINVEXPIRY | 0x00000062 | Invalid message validity period (Expiry time) | MSG_ERROR_EXPIRED | 0xff | 255 | The message has expired |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_TEMPORARY | 0x01 | 1 | A temporary error occurred |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_TRANSPORT_ERROR | 0x02 | 2 | A transport error occurred |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_SRI_TRANSPORT_ERROR | 0x03 | 3 | A SRI transport error occurred |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_SIM_CARD_FULL | 0x04 | 4 | The SIM card of the receiver is full GSM MAP memoryCapacityExceed error |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_ABSENT_SUBSCRIBER | 0x05 | 5 | The mobile subscriber is absent GSM MAP absentSubscriber error |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_TIMEOUT | 0x06 | 6 | Transaction has timed out |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_ILLEGAL_EQUIPMENT | 0x07 | 7 | GSM MAP illegalEquipment error |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_CANCELLED | 0x08 | 8 | Message processing has been cancelled |
ESME_RX_T_APPN | 0x00000064 | ESME Receiver Temporary App Error Code | MSG_ERROR_NO_RETRY_LEFT | 0x82 | 130 | No retry left |
ESME_RX_P_APPN | 0x00000065 | ESME Receiver Permanent App Error Code | MSG_ERROR_DEFINITIVE | 0x80 | 128 | A definitive error occurred |
ESME_RX_P_APPN | 0x00000065 | ESME Receiver Permanent App Error Code | MSG_ERROR_VALIDATION | 0x84 | 132 | Message is invalid |
ESME_RPROHIBITED | 0x00000101 | ESME Prohibited from using specified operation. | MSG_ERROR_CHARGING | 0x8d | 141 | Charging error |
ESME_RPROHIBITED | 0x00000101 | ESME Prohibited from using specified operation. | MSG_ERROR_BLACKLISTED | 0x8f | 143 | Blacklisted recipient |
Код ошибки в DR (DEC) | Соответствует коду ошибки SMPP | Код ошибки в submit_sm_resp (HEX) |
601 | Message Length is invalid (ESME_RINVMSGLEN) | 0x000000001 |
608 | System Error (ESME_RSYSERR) | 0x000000008 |
610 | Invalid Source Address (ESME_RINVSRCADR) | 0x00000000A |
611 | Invalid Dest Addr (ESME_RINVDSTADR) | 0x00000000B |
620 | Message Queue Full (ESME_RMSGQFUL) | 0x000000014 |
688 | Throttling error (ESME has exceeded allowed message limits) (ESME_RTHROTTLED) | 0x000000058 |
698 | Invalid message validity period Expiry time (ESME_RINVEXPIRY) | 0x000000062 |
700 | ESME Receiver Temporary App Error Code (ESME_RX_T_APPN) | 0x000000064 |
701 | ESME Receiver Permanent App Error Code (ESME_RX_P_APPN) | 0x000000065 |
857 | ESME Prohibited from using specified operation (ESME_RPROHIBITED) | 0x000000101 |
900 | Сoncatenation timeout (ESME_RCNCTTIMEOUT) | 0x00000384 |
901 | Routing error (ESME_ROUTERR | 0x00000385 |
902 | SMSC response timeout (ESME_RRESPTIMEOUT) | 0x00000386 |
903 | SMSC delivery timeout (ESME_RDLVRTIMEOUT) | 0x00000387 |
904 – 949 | Резерв | |
950 | Временный код ошибки, формируется в течение 24 часов после замены SIM-карты абонентом «МТС». | 0x000007FFF |
951-998 | Резерв |
Как установить stunnel
Нужна версия 5.56+
- Скачайте программу stunnel-5.XX-win64-installer.exe для windows на сайте stunnel.org
- Запустите установщик (exe файл)
- По инструкции установщика установите stunnel на компьютер, оставьте все параметры по умолчанию
- После установки нажмите на ярлык на рабочем столе, чтобы запустить программу
- В открывшемся окне выберите пункт configuration → edit configuration
- Откроется файл конфигурации. Удалите из него всё и внесите новые данные:
1 2 3 4 | [smpp] client = yes accept = 0.0.0.0:3800 connect = smpp.marketolog.mts.ru:3800 |
7. Перезапустите stunnel
Ubuntu 20.04 и выше
1. Установите stunnel
sudo apt-get install stunnel4
2. Создайте файл conf и сконфигурируйте коннект:
sudo nano /etc/stunnel/stunnel.conf
[smpp]
client = yes
accept = 0.0.0.0:3800
connect = smpp.marketolog.mts.ru:3800
3. Запустите stunnel:
sudo systemctl start stunnel
sudo systemctl enable stunnel
1. Скачайте stunnel, не ниже версии 5.56
2. Распакуйте:
tar -xvf stunnel-5.59.tar.gz
3. Установите:
apt-get install stunnel4
4. Создайте файл conf и сконфигрурируйте коннект:
sudo nano /etc/stunnel/stunnel.conf
CentOS 7 и ниже
- Скачайте stunnel (вместо XX указать доступную версию):
wget https://www.stunnel.org/downloads/stunnel-5.XX.tar.gz
2. Распакуйте:
tar -xvf stunnel-5.XX.tar.gz
3. Соберите и установите. В процессе сборки могут потребоваться дополнительные пакеты в системе, их необходимо будет доставить.
cd stunnel-5.XX
./configure
make
make install
4. Создайте файл conf и сконфигурируйте коннект:
sudo vim /etc/stunnel/stunnel.conf
[smpp]
client = yes
accept = 0.0.0.0:3800
connect = smpp.marketolog.mts.ru:3800
5. Запустите stunnel:
stunnel /etc/stunnel/stunnel.conf
sudo docker run -d -e STUNNEL_CLIENT=yes -e STUNNEL_ACCEPT=0.0.0.0:3800 -e STUNNEL_CONNECT=smpp.marketolog.mts.ru:3800 -e STUNNEL_SERVICE=smpp -p 3800:3800 dweomer/stunnel