Контроль доставки сервисных SMS начинается со статуса DLR, который показывает, что произошло с сообщением после отправки: оно доставлено, ожидает передачи или завершилось ошибкой. В статье разберём, какие статусы отслеживать, почему возникают задержки, как отличить сбой SMS-шлюза от проблемного номера и какие уведомления передать в систему. После настройки мониторинга бизнес сможет быстрее находить недоставленные сообщения и не оставлять клиента без подтверждения заказа, записи или кода входа.
Что такое DLR и какие статусы нужно отслеживать?
DLR, или Delivery Receipt, — это отчёт о прохождении SMS. Сервис отправляет сообщение через API, а оператор или промежуточный узел возвращает результат. Для бизнеса важен не сам факт передачи запроса в API, а финальный статус конкретного сообщения.
В интерфейсе или журнале отправки обычно встречаются статусы с похожим смыслом. Названия зависят от поставщика SMS и формата API, поэтому при интеграции нужно опираться на документацию используемого сервиса.
| Статус | Что он означает | Что делать бизнесу |
|---|---|---|
| Доставлено | Сообщение дошло до телефона или сети получателя. | Сохранить результат и не отправлять копию автоматически. |
| Принято к отправке | Система получила запрос, но конечная доставка ещё не подтверждена. | Ожидать финальный DLR и контролировать время ожидания. |
| Ожидает доставки | Сообщение находится в очереди или сеть временно недоступна. | Проверить, не превышен ли допустимый срок ожидания. |
| Истёк срок | Система не получила доставку за установленный период. | Зафиксировать сбой и выбрать сценарий повторной коммуникации. |
| Ошибка | Оператор или шлюз отклонил сообщение. | Разобрать код ошибки и проверить номер, маршрут или настройки. |
Статус «принято» нельзя считать подтверждением доставки. Например, клиент оформил заказ, API ответил без ошибки, но телефон находится вне сети. Пока не пришёл финальный DLR, система не знает, увидел ли человек уведомление.
Для каждого SMS полезно хранить внутренний идентификатор события: номер заказа, записи или операции, время отправки, телефон в техническом виде и идентификатор сообщения у SMS-провайдера. Это позволяет связать отчёт доставки с конкретным действием клиента, не просматривая журнал вручную.
Почему сервисное SMS задерживается или не доставляется?
Задержка начинается на разных участках цепочки. Запрос может долго стоять в очереди приложения, API может вернуть временную ошибку, сеть получателя может быть недоступна, а оператор может отклонить сообщение из-за некорректного номера или технического ограничения.
Сначала разделите путь сообщения на этапы:
- Бизнес-система создала событие: заказ подтверждён, пароль изменён или запись перенесена.
- Ваш сервер передал запрос в SMS API.
- SMS-сервис принял сообщение и назначил ему идентификатор.
- Сообщение попало в маршрут передачи оператору.
- Сеть получателя вернула финальный статус доставки.
Если на втором этапе нет ответа API, проблему нужно искать в соединении, ключе доступа или доступности сервиса. Если API ответил успешно, но DLR долго не приходит, проверяют очередь, маршрут и статус телефона. Если оператор вернул ошибку сразу, анализируют код отказа, а не повторяют отправку вслепую.
Временная ошибка и окончательная ошибка требуют разных действий. При временной проблеме допустима повторная попытка с ограничением количества повторов. При неверном номере повторная отправка только создаст лишнюю нагрузку и запутает журнал событий.
Как определить, где возник сбой?
Сравните три времени: создание события в вашей системе, ответ API и получение DLR. Если между первым и вторым временем большой разрыв, задержка появилась в приложении или его очереди. Если API ответил быстро, а отчёт не пришёл, проверяйте передачу сообщения и маршрут. Если DLR пришёл с ошибкой, откройте детализацию кода.
Для небольшого бизнеса подойдёт простой журнал с колонками «создано», «отправлено», «принято API», «получен DLR», «финальный статус» и «код ошибки». Уже такая таблица показывает, на каком участке чаще всего теряются уведомления.
Как настроить мониторинг SMS-интеграции?
Мониторинг лучше строить вокруг событий, а не вокруг ручного просмотра кабинета. Система должна принимать отчёт о доставке через webhook или периодически запрашивать статус по идентификатору сообщения. Для интеграции магазина, CRM или сайта с SMS-сервисом пригодится описание подхода с вебхуками для SMS.
На первом этапе задайте обязательные поля события:
- внутренний ID операции;
- ID сообщения в SMS-сервисе;
- время создания и отправки;
- текущий и финальный статус;
- код ошибки, если он передан;
- число повторных попыток;
- название сценария, например «подтверждение заказа» или «код входа».
На втором этапе настройте правила реакции. Если сообщение получило статус «доставлено», система закрывает задачу. Если оно остаётся в промежуточном статусе дольше установленного порога, создаётся предупреждение. Если пришёл окончательный отказ, запись попадает в журнал ошибок и передаётся сотруднику или в резервный сценарий.
Порог ожидания зависит от задачи. Для одноразового кода важна скорость, потому что клиент находится на экране входа. Для сообщения о готовности заказа задержка в несколько минут может быть приемлемой, но при долгом отсутствии DLR сотруднику нужен сигнал. Порог лучше задавать отдельно для каждого типа SMS.
Если в компании нет разработчика, начните с минимального варианта: выгрузка журнала, фильтр по промежуточным статусам и ежедневный список окончательных ошибок. Отдельно проверяйте транзакционные SMS без программиста, если бизнесу нужно понять базовую схему контроля до полноценной API-интеграции.
Как связать DLR с заказом, записью или авторизацией?
Один телефон не должен быть единственным идентификатором. Клиент может получить несколько SMS подряд: подтверждение заказа, уведомление о переносе и код авторизации. Если система связывает события только с номером, статусы легко перепутать.
Используйте связку из трёх значений: ID операции, тип сообщения и ID SMS. Например, заказ 1842 получил сообщение «заказ принят», а позже система отправила «заказ готов». У этих событий должны быть разные идентификаторы и отдельные DLR. Тогда задержка второго SMS не изменит статус первого.
Для CRM удобно передавать результат доставки обратно в карточку клиента или сделки. Менеджер увидит, что уведомление о переносе записи не дошло, и выберет другой способ связи по внутреннему регламенту компании. В автоматизированном сценарии такой возврат статуса можно настроить через API.
Не меняйте статус бизнес-операции только по факту отправки SMS. Заказ получает статус «уведомление доставлено» после финального DLR. Если отчёт не пришёл, сохраните состояние «доставка не подтверждена». Это разные ситуации, и отчётность по ним должна различаться.
Как повторять отправку и не создавать дубли?
Повторная отправка помогает при временных сбоях, но без защиты приводит к двум одинаковым SMS. Особенно часто это происходит, когда приложение не дождалось ответа API и повторило запрос, хотя первое сообщение уже приняли.
Для каждого события задайте уникальный ключ идемпотентности. В него можно включить ID операции и тип уведомления. Перед новой отправкой система проверяет, существует ли уже сообщение с таким ключом. Если существует, она запрашивает его статус, а не создаёт копию.
Повторы должны иметь ограничение по числу попыток и времени. После окончательной ошибки повторять отправку бессрочно нельзя. Для очередей в API и SMPP отдельно задают приоритеты: код авторизации обрабатывают раньше второстепенного уведомления, а число запросов ограничивают rate limit.
Для резервного сценария заранее определите условие перехода. Например, если сервисное SMS не получило финальный статус за установленный период, система создаёт задачу оператору. Автоматическая отправка второго сообщения через другой канал требует отдельного решения, чтобы клиент не получил два одинаковых уведомления одновременно.
Какие ошибки чаще всего мешают контролю доставки?
- Считать ответ API доказательством доставки. Он подтверждает приём запроса, но не факт получения сообщения.
- Хранить только текст SMS и номер телефона. Без ID операции и ID сообщения невозможно надёжно связать DLR с заказом.
- Повторять отправку при любой ошибке. Сначала определите, была ли ошибка временной или окончательной.
- Не фиксировать время каждого этапа. Без временных отметок задержку приложения легко принять за проблему оператора.
- Смешивать в одном отчёте коды авторизации и обычные уведомления. У этих сценариев разная допустимая задержка.
- Проверять статусы только вручную. Часть сообщений может оставаться без внимания до жалобы клиента.
Техническая схема мониторинга может быть небольшой: событие в CRM или магазине, очередь отправки, SMS API, обработчик DLR и журнал результатов. Для SMSⓘINFO такой подход естественно дополняется мгновенными уведомлениями, безопасной авторизацией и API-интеграцией: сервисное сообщение получает понятный статус, а бизнес-система знает, что делать дальше.
3 шага, которые можно сделать на этой неделе:
- Составьте список сервисных сценариев и назначьте каждому допустимое время ожидания DLR.
- Добавьте в журнал ID операции, ID SMS, время отправки, финальный статус и код ошибки.
- Настройте отдельные реакции на доставку, временную задержку и окончательный отказ, включая защиту от дублей.



