Как настроить выгрузку статусов SMPP в 1С для интернет-магазина

Как настроить выгрузку статусов SMPP в 1С для интернет-магазина

После отправки SMS через SMPP-шлюз протокол возвращает статусы доставки (DLR). Если выгружать их в систему учёта 1С, можно автоматически отмечать оплаченные заказы, фиксировать неверные номера и не звонить клиенту с вопросом «пришло ли сообщение?». Статья объясняет, как построить такую схему для небольшого магазина без программиста в штате.

Почему статусы доставки важны для учёта заказов?

Когда интернет-магазин отправляет клиенту уведомление о статусе заказа, важно знать, дошло ли оно. SMPP-шлюз возвращает коды: DELIVRD (доставлено), EXPIRED (просрочено), UNDELIV (не доставлено), REJECTD (отклонено оператором). Если эти данные попадают в 1С, менеджер видит, что SMS получена, и не тратит время на ручную проверку. Для магазина с 20–50 заказами в день это экономит 2–3 часа в неделю.

Протокол SMPP версий 3.4 и 5.0 поддерживает подробные коды ошибок (источник dev.sms-assistent.by). В SMPP 5.0, если команда SUBMIT_SM_RESP возвращает ошибку, длина PDU составляет 16 октетов (источник BSG). Это значит, что парсер должен уметь обрабатывать разную длину пакетов. Но для малого бизнеса чаще используют SMPP 3.4 — с ним совместимы почти все белорусские операторы.

Что нужно для интеграции SMPP и 1С?

Минимальный набор:

  • SMPP-шлюз с возможностью отправки и получения DLR (обычно провайдер SMS даёт доступ к шлюзу);
  • скрипт-посредник (например, на PHP или Python), который забирает статусы из шлюза и передаёт их в 1С через HTTP-запросы;
  • обработка в 1С, принимающая POST-запросы и обновляющая документы (заказы, счета).

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

Схема работы: от отправки до отметки в 1С

  1. Отправка. Вы создаёте документ «Отправка SMS» в 1С. Обработка вызывает скрипт, который через SMPP отправляет сообщение и запоминает message_id.
  2. Получение DLR. SMPP-шлюз асинхронно отправляет скрипту уведомление о доставке (или ошибке) с тем же message_id.
  3. Передача в 1С. Скрипт передаёт в 1С POST-запрос с JSON: {"message_id":"...","status":"DELIVRD","timestamp":"..."}.
  4. Обновление статуса. В 1С обработчик находит заказ по message_id (или по номеру телефона+времени) и проставляет флаг «SMS доставлена» или «Ошибка доставки».

Всё это происходит за 1–3 секунды после фактической доставки. Для интернет-магазина такой подход позволяет сразу видеть, что клиент получил уведомление об оплате или отгрузке.

Какие статусы стоит обрабатывать?

Не все коды нужны в учёте. Вот таблица статусов, которые имеют практический смысл для магазина.

Код статусаЗначениеЧто делать в 1С
DELIVRDСообщение доставленоОтметить заказ как «Уведомление отправлено»
UNDELIVНе доставлено (номер неверный, абонент недоступен)Пометить контакт для проверки; предложить другой способ связи
EXPIREDИстекло время жизни SMSПохоже на UNDELIV — обновить телефон клиента
REJECTDОтклонено оператором (спам, блокировка)Проверить текст сообщения или имя отправителя
ACCEPTDПринято шлюзом, но ещё не доставленоНичего не делать; ждать финального статуса

Для автоматизации достаточно обрабатывать только DELIVRD, UNDELIV и REJECTD. Остальные можно логировать, но не влиять на учёт.

Типичные ошибки при настройке выгрузки

  • Не сопоставлен message_id. Если скрипт не сохраняет связь между отправленным сообщением и заказом, пришедший DLR не к чему привязать. Решение — передавать в SMPP дополнительный параметр (TLV), например номер заказа.
  • Дубликаты при повторной отправке. Если скрипт не проверяет, был ли уже обработан статус, 1С получит два одинаковых запроса. В обработчике 1С стоит проверять по уникальному message_id.
  • Игнорирование кодов ошибок SMPP. Протокол возвращает не только финальный статус, но и промежуточные ошибки (см. источник dev.sms-assistent.by). Не учитывая их, можно потерять сообщения.
  • Слишком высокая частота запросов к 1С. Если отправка идёт потоком, скрипт может завалить 1С HTTP-запросами. Лучше буферизовать статусы по 10–20 штук и передавать пачкой раз в минуту.
  • Нет обработки таймаутов. Если скрипт не получил DLR в течение 24 часов, стоит считать сообщение недоставленным и повторять попытку.

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

  1. Проверьте, возвращает ли ваш SMS-провайдер DLR и какие коды он использует. Большинство поддерживают стандарт SMPP 3.4 с кодами, описанными выше.
  2. Настройте простой скрипт-посредник, который забирает DLR из шлюза и складывает их в файл или базу данных. Это можно сделать за 2–3 часа на любом доступном языке.
  3. Добавьте в 1С обработчик HTTP-запроса, который принимает статусы и обновляет нужные документы. Пример кода для 1С:Предприятие 8.3 есть в типовых конфигурациях.
Полезные ссылки SMPP-статусы: как читать DLR и не тратить деньги на мёртвые номера, Как настроить транзакционные уведомления и избежать дублей сообщений.