Как отправлять SMS о статусах заказов Wildberries через SMPP

Как отправлять SMS о статусах заказов Wildberries через SMPP

Чтобы отправлять покупателю SMS о выкупе и возврате товара Wildberries, интернет-магазину нужна связка из источника статусов, собственного обработчика событий и SMPP-шлюза. Сначала система получает изменение заказа из доступного интерфейса или внутреннего модуля, затем сопоставляет его с номером телефона, формирует текст и передаёт сообщение через SMPP. В статье разобраны схема интеграции, состав параметров, обработка DLR и типичные ошибки, из-за которых уведомления не доходят.

Как устроена схема SMS-уведомлений для заказа Wildberries?

Сам SMPP не подключает магазин к Wildberries. Это протокол обмена сообщениями между вашей системой и SMS-шлюзом. Источник статусов заказа находится отдельно: его предоставляет интеграционный модуль, личная система магазина или доступный для конкретного сценария интерфейс маркетплейса.

Рабочая схема выглядит так:

  1. Система магазина получает событие о заказе, выкупе, отмене или возврате.
  2. Обработчик проверяет статус и находит связанный номер телефона.
  3. Модуль уведомлений выбирает шаблон SMS.
  4. SMPP-клиент открывает соединение с шлюзом и отправляет PDU submit_sm.
  5. Шлюз возвращает submit_sm_resp с результатом приёма сообщения.
  6. Позже приходит DLR, по которому система фиксирует доставку или ошибку.

Для каждого события нужен отдельный внутренний идентификатор. Обычно это комбинация номера заказа, типа события и версии сообщения. Она не позволяет отправить два одинаковых уведомления, если источник повторно передал один и тот же статус.

Связку лучше разделить на два процесса. Первый принимает события и складывает их в очередь. Второй отправляет SMS через SMPP. Если шлюз временно недоступен, очередь сохранит задания, а основной модуль не остановит обработку заказов.

Какие статусы Wildberries стоит переводить в SMS?

Состав событий зависит от задачи магазина и того, какие статусы доступны в выбранном интерфейсе. Для уведомлений о выкупе и возврате достаточно начать с двух сценариев, затем добавить отмену или изменение заказа после проверки логики.

Событие Задача сообщения Что передать в обработчик
Выкуп товара Сообщить, что покупка завершена Идентификатор заказа, дату события, номер телефона
Возврат товара Уведомить об изменении результата заказа Идентификатор заказа, тип возврата, время события
Отмена или изменение Показать покупателю новый статус Новый статус, заказ, причину при наличии

Не отправляйте SMS на любое изменение записи. Сначала задайте список переходов, которые действительно требуют уведомления. Например, система может получить один и тот же статус несколько раз, а клиенту достаточно одного сообщения.

Для возврата полезно предусмотреть отдельный шаблон и отдельный код события. Материалы о настройке уведомлений о возврате помогают разобрать этот сценарий по шагам: SMS-уведомления о возврате.

Как подключить SMPP-шлюз к модулю магазина?

В конфигурации SMPP-клиента обычно нужны host, port, system_id, пароль, тип bind и параметры TON/NPI. Точные значения выдаёт поставщик шлюза. Их нельзя подставлять из примера: неправильный bind или порт приведёт к отказу ещё до отправки первой SMS.

Подключение удобно проверять по этапам:

  1. Открыть TCP-соединение с адресом и портом шлюза.
  2. Выполнить bind_transceiver, если система должна отправлять сообщения и принимать DLR.
  3. Проверить, что шлюз вернул bind_resp с успешным кодом.
  4. Отправить тестовую SMS на контрольный номер.
  5. Получить submit_sm_resp и сохранить message_id.
  6. Дождаться delivery receipt и связать его с исходным сообщением.

Клиенту нужен механизм enquire_link. Он поддерживает сессию и помогает заметить разрыв соединения. При потере связи приложение закрывает старую сессию, подключается заново и повторяет отправку только тех заданий, для которых нет подтверждённого результата.

Отдельно настройте ограничение скорости. Шлюз может принимать сообщения с определённой пропускной способностью, поэтому очередь должна выпускать SMS постепенно. Если отправлять все задания одновременно, приложение получит throttling, тайм-ауты или временные ошибки.

Для начала интеграции подготовьте небольшой тестовый контур: один тип события, один шаблон, несколько контрольных номеров и подробный журнал SMPP-команд. Такой подход быстрее показывает, где возник сбой: в статусе заказа, в обработчике или в транспортном соединении.

Как составить SMS о выкупе и возврате?

Текст должен объяснять событие без лишних деталей. В шаблон обычно включают название магазина, тип изменения, короткий идентификатор заказа и инструкцию, если покупателю нужно выполнить действие. Не вставляйте в SMS длинные технические идентификаторы или полный состав заказа.

Элемент Практическое правило
Отправитель Используйте согласованное имя отправителя из настроек шлюза.
Идентификатор Оставьте короткий номер заказа или его часть, если этого достаточно.
Кодировка Заранее проверьте, как шлюз обрабатывает кириллицу и сегментацию длинных SMS.
Ссылка Добавляйте её только при необходимости и проверяйте длину итогового сообщения.

Для выкупа и возврата лучше хранить шаблоны в настройках, а не зашивать их в код. Тогда менеджер сможет изменить формулировку без выпуска новой версии интеграции. Перед отправкой система должна подставить значения и проверить, что обязательные поля заполнены.

Если SMS состоит из нескольких частей, приложение должно корректно передать параметры esm_class, data_coding и UDH, когда это требуется конкретным шлюзом. Ошибки в этих полях приводят к повреждённому тексту или разделению сообщения на части. Поэтому тестируйте короткий текст и длинный текст отдельно.

Как контролировать доставку SMS через DLR?

Ответ submit_sm_resp означает, что шлюз принял запрос. Он не подтверждает, что телефон получил SMS. Для контроля нужен delivery receipt, который приходит отдельным сообщением SMPP и содержит идентификатор, статус доставки и иногда код ошибки.

Система должна сохранять как минимум:

  • внутренний идентификатор уведомления;
  • message_id, который вернул шлюз;
  • тип события заказа;
  • время отправки;
  • статус submit_sm_resp;
  • последний статус DLR и текст ошибки.

Если SMS не дошла, сначала сравните message_id в журнале отправки и в DLR. Затем проверьте код ошибки, формат номера, кодировку и состояние SMPP-сессии. При повторной отправке используйте ограниченное число попыток: бесконечный retry создаёт дубли и усложняет разбор заказов.

Практическая диагностика DLR подробно разобрана в материале почему SMS не доходит до клиента. Для самого статуса доставки важно различать принятие сообщения шлюзом, передачу оператору и финальный результат на телефоне.

Какие ошибки чаще всего ломают интеграцию?

  • Повторная отправка одного события. Источник статусов повторяет уведомление, а приложение не проверяет уникальность заказа и события.
  • Неверная связь message_id. Система принимает DLR, но не может найти исходную SMS, потому что идентификатор шлюза не сохранён.
  • Отправка до появления номера. Обработчик запускает SMS сразу после события, хотя телефон ещё не загрузился в локальную запись заказа.
  • Неправильная кодировка. Русский текст проходит тест на коротком сообщении, но ломается на длинном.
  • Игнорирование очереди. Модуль отправляет пачку сообщений напрямую в SMPP и получает временные отказы.
  • Одинаковый шаблон для всех статусов. Покупатель не понимает, что произошло: выкуп, отмена или возврат требуют разных формулировок.

Отдельно проверьте журнал повторных подключений. В нём должны быть время разрыва, причина закрытия bind-сессии, результат reconnect и количество сообщений, оставшихся в очереди. Без этих записей техническая поддержка видит только жалобу «SMS не пришла», но не путь сообщения.

Для интернет-магазина с небольшим потоком достаточно простого обработчика событий и очереди в базе. При большом объёме лучше вынести отправку в отдельный сервис, который поддерживает SMPP-сессию, принимает DLR и ограничивает скорость. Схема автоматизации SMS-статусов интернет-магазина описана в материале как автоматизировать SMS-статусы доставки.

3 шага, которые можно сделать на этой неделе:

  1. Составить карту событий Wildberries и выбрать для теста выкуп и возврат.
  2. Проверить SMPP bind, кодировку, submit_sm_resp и приём DLR на контрольных номерах.
  3. Добавить очередь, защиту от дублей и журнал с message_id для каждого уведомления.