Всё, что стоит знать, и ничего лишнего.
Как работает SMPP, шаг за шагом.
ESME устанавливает TCP-соединение (в идеале TLS) и отправляет bind_transceiver с system_id и паролем. После привязки он отправляет каждое сообщение как submit_sm PDU; SMSC подтверждает это отправкой submit_sm_resp, содержащей message_id. Подтверждения доставки поступают асинхронно в виде deliver_sm PDU на тот же сокет, сопоставляясь с message_id. Сигнал подтверждения enquire_link каждые 30 секунд поддерживает сессию активной, а unbind корректно её закрывает. См. /answers/what-is-smpp и /answers/what-is-esme.
Типы и версии привязки
ESME может быть привязан как передатчик (только отправка), приемник (только прием) или приемопередатчик (оба в одном соединении). Приемопередатчик через SMPP 3.4 является современным вариантом по умолчанию. В SMPP 5.0 были добавлены заголовки, не содержащие символов Unicode, и поддержка широковещательной передачи данных по ячейкам, но почти никто его не использовал — подавляющее большинство пользователей используют версию 3.4. BroadNet принимает привязки SMPP 3.4; хост, порт и учетные данные предоставляются вместе с тестовым доступом. См. /answers/smpp-3-4-vs-5-0.
Преимущества по сравнению с REST API
Установление постоянного соединения ничего не стоит за каждое сообщение, поэтому при постоянном объеме запросов SMPP использует примерно десятую часть ресурсов процессора и четверть пропускной способности по сравнению с HTTPS-запросами. Это единственный способ достичь задержки p99 менее 100 мс до SMSC — на критическом пути отсутствует HTTP-рукопожатие — и он передает DLR-сообщения обратно в реальном времени. См. /compare/sms-api-vs-smpp.
Ограничения и подводные камни
SMPP — это бинарный протокол, с которым вам придётся работать: управление привязкой, переподключение с экспоненциальной задержкой, отслеживание порядковых номеров и сопоставление DLR по message_id (возвращается в шестнадцатеричном формате на некоторых SMSC, в десятичном — на других) — всё это ваша задача. Обработка ошибок лаконична — неудачная отправка возвращает числовой command_status, который вам нужно расшифровать. Используйте поиск /tools/smpp-error-codes, чтобы преобразовать эти коды в действие. Производственный SMPP-клиент — это многотысячестрочный код; лучше купить готовый, чем разрабатывать его самостоятельно.
В каких случаях следует отдавать предпочтение SMPP перед REST?
Выбирайте SMPP, если вы стабильно отправляете несколько сотен сообщений в секунду или вам нужны постоянные bind-сессии (пропускная способность на bind согласовывается с вашей командой по работе с клиентами), используете критичные к задержке OTP, где каждая миллисекунда на счету, или интегрируетесь в экосистему операторов/агрегаторов, которая уже повсеместно поддерживает SMPP. В остальных случаях REST SMS API (в BroadNet нет фиксированных лимитов скорости на аккаунт) проще в эксплуатации и доставляет по тем же маршрутам. См. /developers/smpp и /products/sms-api.
Какой порт использует протокол SMPP, и будет ли он использоваться в 2026 году?
В SMPP нет единого зарезервированного порта; исторически сложилось так, что порт по умолчанию для передачи текста в открытом виде — 2775, и операторы обычно предоставляют TLS через выделенный порт (BroadNet предоставляет свой порт TLS вместе с вашей учетной записью). И да — SMPP полностью актуален: это протокол, закрепленный в основе практически каждого договора на межсетевое соединение A2P, а BroadNet поддерживает более 1000 активных bind-сессий за 1000+ прямыми подключениями к операторам, передавая более 300 млн сообщений в день с вероятностью бесперебойной работы 99,99% с 2003 года.