BroadNet
ЖурналИнженерия
Инженерия

Проверка соответствия стандарту E.164 и номера телефона: форматирование, нормализация MSISDN и почему это важно для доставки.

E.164 — это формат, в котором должен храниться каждый телефонный номер. Как работает нормализация MSISDN, как проверять номера и почему неправильное форматирование приводит к сбою доставки.

9 мин чтения
Инженерия · Выпуск 17
9 мин чтения

.164 — это стандарт ITU-T для записи телефонных номеров для международного использования: знак плюс в начале, код страны от одной до трех цифр и национальный номер без разделителей, содержащий не более 15 цифр. Хранение каждого номера в этой канонической форме — MSISDN, к которому обращается сеть, — обеспечивает возможность проверки и надежной доставки.

Хотите преобразовать номер прямо сейчас? Вставьте его в форматировщик телефонных номеров, чтобы увидеть его формат E.164, или пропустите весь список через валидатор списков номеров. В этом руководстве объясняется, как работают эти инструменты.

Что такое E.164: международная система нумерации.

E.164 — это рекомендация ITU-T E.164, международная система нумерации телекоммуникаций. Она присваивает каждому телефону на планете единый, уникальный в глобальном масштабе адрес, позволяющий маршрутизировать вызов или сообщение из любой сети в любую другую. Номер E.164 состоит из трех частей: кода страны (CC) от одной до трех цифр, национального кода назначения (NDC, часто это код оператора или города) и номера абонента. В совокупности они не должны превышать 15 цифр.

Каноническая строка начинается с символа '+', за которым следуют только цифры — например, +971500000000. Символ '+' служит заполнителем для международного префикса доступа, используемого исходной сетью (00 в большинстве стран мира, 011 в Северной Америке); хранение символа '+' вместо префикса, специфичного для страны, именно это обеспечивает переносимость номера между сетями и странами. В номере E.164 нет пробелов, тире, скобок или нулей в начале: это правила отображения, а не часть номера.

MSISDN: номер, на который фактически маршрутизируется сеть.

MSISDN расшифровывается как Mobile Station International Subscriber Directory Number (Международный номер абонента мобильной станции) — это набираемый номер E.164, идентифицирующий абонента мобильной связи. Именно его вы сохраняете, набираете и отправляете SMS. Он намеренно отделен от IMSI, идентификатора, хранящегося на SIM-карте в соответствии с ITU-T E.212 (код страны мобильной связи плюс код мобильной сети плюс идентификатор абонента). Регистр домашнего местоположения оператора сопоставляет MSISDN с его текущим IMSI и обслуживаемой сетью, благодаря чему сообщение, адресованное номеру E.164, достигает нужного телефона даже после того, как абонент переходит в роуминг или меняет номер.

Практический вывод: MSISDN — это просто номер E.164 для мобильной линии. Когда говорят «нормализовать до MSISDN», имеют в виду «сохранить номер мобильной линии в каноническом формате E.164». Правильное представление этого номера в точке захвата — это разница между номером, который корректно маршрутизируется, и номером, который незаметно выходит из строя на последующих этапах.

Нормализация: хранение каждого числа в одной канонической форме.

Пользователи вводят номера всеми возможными способами — с пробелами, скобками, национальным номером ноль, международным префиксом 00 или 011 или без него. Нормализация объединяет все эти варианты в одну каноническую строку E.164, так что одна и та же физическая строка всегда хранится идентично. Без нее невозможно удалить дубликаты из списка контактов, сопоставить номер со списком запрещенных номеров или надежно проверить номер перед отправкой.

Надежный нормализатор применяет эти правила в указанном порядке:

  • Удалите все символы форматирования: пробелы, тире, точки и скобки.
  • Преобразовать международный префикс доступа — ведущий символ 00 (ITU) или 011 (Северная Америка) — в знак '+'.
  • Если номер уже начинается с символа '+', оставьте код страны как есть.
  • Если используется национальный формат (без кода страны), удалите национальный префикс (обычно это один ведущий ноль) и добавьте в начало код страны региона по умолчанию.
  • Отклоняйте все, что не является знаком '+', за которым следуют цифры от 1 до 15, причем первая цифра должна быть от 1 до 9.
  • Сохраняйте только знак «+» и цифры; при отображении числа автоматически восстанавливайте красивые формы отображения.

Этап "нулевого канала" — вот что чаще всего ставит в тупик команды. В большинстве стран начальный 0, который вы набираете внутри страны, является префиксом канала, который отбрасывается в международном формате — мобильный номер ОАЭ, записанный как 050 000 0000, становится +971 50 000 0000, а не +971 050…. Применение кода страны без удаления этого 0 приводит к недействительному номеру, который выглядит правдоподобно. Нормализатор должен знать регион по умолчанию, чтобы обрабатывать ввод в национальном формате; одни и те же цифры означают разные линии в разных странах.

snippet
function toE164(raw, defaultRegion) {
// 1. Удаляем пробелы, тире, точки, скобки
let s = raw.trim().replace(/[\s().\-]/g, '');
// 2. Международный префикс 00 (ITU) или 011 (NANP) -> +
s = s.replace(/^(00|011)/, '+');
// 3. Уже в международном формате? Сохраняем код страны
if (s.startsWith('+')) return assertE164(s);
// 4. Национальный формат: удаляем основной код 0, добавляем код региона
s = s.replace(/^0/, '');
return assertE164('+' + defaultRegion.dialCode + s);
}
// assertE164 принимает только /^\+[1-9]\d{1,14}$/ (плюс, тогда <= 15 цифр)

Здесь та же логика применяется к реальным примерам из стран Персидского залива и других стран мира. Обратите внимание, как различные входные данные сводятся к одному чистому MSISDN:

Код страны)Ввод текста по мере его ввода.Канонический E.164 (MSISDN)
ОАЭ (+971)050 000 0000 / 00971 50 000 0000+971500000000
Саудовская Аравия (+966)0500000000+966500000000
Египет (+20)0100 123 4567+201001234567
Соединенное Королевство (+44)(07911) 123 456+447911123456
Соединенные Штаты (+1)011 1 202 555 0143+12025550143

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

Синтаксическая корректность не означает достижимость.

Нормализация и проверка длины показывают, что номер правильно сформирован — имеет правильную форму, содержит допустимый код страны и не превышает 15 цифр. Они не могут определить, присвоен ли номер активному абоненту. Синтаксически безупречный номер E.164 может быть нераспределен, деактивирован или перенесен к другому оператору, нежели указано в его префиксе. Отправка на такой номер все равно будет стоить вам денег и снизит процент доставки.

Для подтверждения реальной доступности необходимо запросить базу данных абонентов оператора. Поиск по HLR (/products/hlr-lookup) возвращает информацию о том, назначен ли номер в данный момент и активен ли он, его истинную домашнюю сеть (MCC/MNC, стоящий за любым перенесенным номером) и его роуминговый статус — истинные данные, которые невозможно получить только с помощью синтаксиса. Разумный алгоритм действий: сначала нормализовать до E.164, быстро удалить синтаксически некорректные строки, а затем выполнить поиск по HLR для оставшихся номеров перед отправкой большого или ценного номера.

Почему ошибки форматирования приводят к потере доставленных сообщений и денег

A2P SMS оплачивается за сегмент при отправке, а не при доставке. Неправильно сформированный номер — это сообщение, за попытку доставки которого вы платите, но которое так и не доходит, а при больших объемах рассылки такие сбои накапливаются. Плохое форматирование также маскирует дубликаты (одна и та же строка, сохраненная тремя разными способами, оплачивается трижды), искажает показатели скорости доставки и может вызывать срабатывание фильтров оператора, когда шлюз получает номера, которые он не может обработать.

Самое простое решение полностью находится на вашей стороне API: нормализация в точке захвата, проверка формы E.164 перед постановкой в очередь и резервирование поиска HLR для номеров, которые прошли проверку. Команды, внедряющие это в свой собственный стек, могут один раз подключить это к API обмена сообщениями — см. документацию для разработчиков — так что каждый номер будет каноническим до того, как за него будет взиматься плата. Обработка национальных и международных номеров также не является исключением в регионе MENA: отправители из стран Персидского залива регулярно получают номера ОАЭ, Саудовской Аравии и Египта в локальном формате, и для каждого из них требуется собственное правило префикса транка для корректной нормализации.

Чистые входящие номера, доставленные исходящие сообщения. Нормализуйте и проверьте каждый номер с помощью форматировщика телефонных номеров, затем подтвердите работоспособность номеров с помощью поиска HLR перед отправкой. С 2003 года BroadNet обеспечивает маршрутизацию многоканального трафика в 200+ стран через 1000+ операторских соединений, с уровнем обслуживания платформы 99,99%.

Часто задаваемые вопросы

Что такое формат E.164?

E.164 — это международный стандарт нумерации телефонных номеров, разработанный ITU-T. Номер в формате E.164 состоит из знака «+» в начале, кода страны от одной до трех цифр и национального номера, записанного только цифрами без пробелов и разделителей, максимум 15 цифр — например, +971500000000. Это каноническая форма для хранения любого телефонного номера, позволяющая осуществлять международную маршрутизацию.

Как подтвердить международный номер телефона?

Проверка в два этапа. Первый — синтаксический: нормализуйте входные данные в формате E.164 (удалите форматирование, преобразуйте префиксы 00/011 в '+', удалите все национальные нулевые символы, добавьте код страны) и подтвердите, что это '+', за которым следуют от 1 до 15 цифр. Второй — доступность: выполните поиск HLR, чтобы подтвердить, что номер действительно назначен и активен. Одна только синтаксическая корректность не доказывает, что номер может принимать сообщения.

Что такое нормализация MSISDN?

Нормализация MSISDN — это процесс преобразования номера мобильного телефона, записанного в любом локальном или отформатированном стиле, в его канонический MSISDN в формате E.164 — набираемый международный номер, на который маршрутизируется сеть. При этом удаляются разделители, определяется префикс транка и префикс международного доступа, а также применяется правильный код страны, поэтому одна и та же строка всегда хранится идентично для дедупликации, проверки и надежной доставки.

Ссылки

  • Рекомендация ITU-T E.164 — международный план нумерации общественных телекоммуникаций: itu.int
  • Рекомендация ITU-T E.212 — международный план идентификации для общедоступных сетей и подписок (IMSI, MCC/MNC): itu.int
  • BroadNet — форматировщик телефонных номеров и валидатор списка номеров для нормализации E.164.
  • BroadNet — HLR lookup для подтверждения истинной достижимости, выходящей за рамки синтаксической корректности.
Была ли эта информация полезна?

Как мы готовим и проверяем материалы

Автор:

Редакционная группа BroadNet

Редакционная группа публикует блог BroadNet. Статьи пишутся вместе с командами BroadNet по вопросам регулирования, продукту, инженерии, отраслевым исследованиям и решениям для операторов и проверяются по нашим редакционным стандартам.

Продолжайте читать

Ещё три статьи из журнала.

Посмотреть все эссе
К
Продукт

Как HLR Lookup позволяет сэкономить 18% на типичной SMS-кампании.

Проверка списков получателей с помощью HLR Lookup перед отправкой — это самый эффективный способ проведения SMS-кампаний с наибольшей окупаемостью инвестиций.

Редакционная группа BroadNet
4m
Р
Продукт

Репутация номеров и телефонная аналитика: снижение уровня мошенничества и повышение доставляемости звонков.

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

Редакционная группа BroadNet
10m
П
Продукт

Представляем MobileValidate: проверка номера телефона и e-mail перед отправкой от BroadNet

MobileValidate — это новый бренд BroadNet: API, который проверяет оператора и тип линии номера телефона, регистрацию в мессенджерах и наличие e-mail ящика перед тем, как вы что-либо отправите. Продукт находится в стадии закрытого превью. Ниже описано, что именно проверяет сервис, как происходит тарификация, как обрабатываются персональные данные и как MobileValidate интегрируется с рассылками BroadNet.

Редакционная группа BroadNet
7m
Журнал, по электронной почте

Одно эссе в месяц. Больше ничего.

Подпишитесь, и мы вышлем вам следующий материал — по инженерии, регулированию или промышленности — в день его отправки. Никаких рассылок, никаких рекламных предложений, никакого обмена информацией с третьими лицами. Отписаться можно одним щелчком мыши.

Одно письмо в месяц. Отписаться можно в любой момент. См. нашу политику конфиденциальности.

Что вы получите
  • Подробный текст, а не призыв к действию.
    Шесть-одиннадцать минут сосредоточенного письма на одну тему.
  • Написано операторами
    В штате компании работают инженеры, специалисты по регулированию и разработчики продуктов.
  • Регионально-зависимый
    Взгляд со стороны региона MENA на регулирующие органы, операторов и структуру каналов сбыта.
  • Раз в месяц
    Никаких рассылок по частям. Одно эссе, когда есть чем поделиться.
Прекратите читать. Начинайте отправлять.

Большую часть того, что мы пишем, мы освоили в процессе производства.

Если эта статья вас заинтересовала, нам, вероятно, стоит поговорить. Расскажите о сценарии использования, объемах, рынках — мы предложим маршруты, цены и контактные данные клиента, которому вы сможете позвонить.

$ curl -X POST https://api.broadnet.me/sms/sendSms