Формат номера E.164: как преобразовать и проверить номер
Формат номера телефона E.164: правила, таблица примеров преобразования, требования API WhatsApp и SMS, регулярное выражение и проверка через libphonenumber.
Автор: OmniChannels.ai Editorial Team · Проверил: BroadNet Messaging Solutions Team
Интеграции
Короткий ответ
E.164 — это международный план нумерации ITU-T. Номер E.164 записывается со знаком «+» в начале, затем код страны и национальный номер, не более 15 цифр, без пробелов и знаков препинания, например +971501234567. Чтобы преобразовать местный номер, отбросьте национальный префикс междугородной связи (обычно 0), если в стране он есть, добавьте «+» и код страны и удалите пробелы и скобки.
На этой странице
- Что такое формат E.164?
- Как преобразовать местный номер телефона в E.164?
- Как выглядят номера E.164 в разных странах?
- Почему в Италии сохраняется ведущий 0?
- Почему API для SMS и WhatsApp требуют E.164?
- Как проверять и нормализовать номера в коде?
- Как исправить номера телефонов в таблице?
- Пример: очистка списка клиентов
- Какие бывают типичные ошибки?
- Чем помогает OmniChannels.ai
Главное
- Номер E.164 — это знак «+», код страны и национальный номер: всего до 15 цифр, без пробелов, дефисов и скобок.
- Преобразование означает удаление национального префикса, обычно 0, но он есть не везде: в таблице процедур набора ITU для Италии, Испании и Катара его нет.
- Meta рекомендует указывать в запросах на отправку в WhatsApp знак «+» и код страны, потому что к номеру без них добавляется код страны отправителя, и сообщение может попасть не тому человеку.
- Регулярное выражение проверяет форму номера, а библиотека вроде libphonenumber проверяет, что он допустим для своей страны.
- Excel может отбрасывать ведущие нули и показывать длинные числа в экспоненциальной записи, поэтому держите столбцы с телефонами в текстовом формате.
Это руководство для маркетологов, аналитиков и разработчиков, которые работают с номерами телефонов для SMS или WhatsApp и хотят привести их к виду, который принимает API. Оно объясняет, что такое E.164, показывает, как преобразовывать номера разных стран, и рассказывает о проверке в коде и о проблемах электронных таблиц, портящих номера ещё до отправки.
Что такое формат E.164?
E.164 — это международный план нумерации сетей связи общего пользования, опубликованный ITU-T как рекомендация E.164. На практике этим термином описывают способ записи номера: знак «+», код страны и национальный номер, только цифрами.
Номер E.164 состоит из следующих частей:
+заменяет международный префикс набора, который в разных странах разный (00 во многих местах, 011 в США).- Код страны, от одной до трёх цифр, например 971 для ОАЭ или 1 для США и Канады.
- Национальный номер, то есть остаток номера без национального префикса междугородной связи.
Рекомендация устанавливает максимальную длину в 15 цифр без международного префикса. Поэтому +971501234567 — допустимый E.164 (12 цифр), а значение из 17 цифр допустимым быть не может. Краткое определение дано в статье глоссария об E.164.
Как преобразовать местный номер телефона в E.164?
Уберите оформление, отбросьте национальный префикс, если он есть, и добавьте знак «+» и код страны.
- Удалите пробелы, дефисы, точки и скобки.
050 123 4567превращается в0501234567. - Удалите международный префикс набора, если он есть:
00971...или011...превращается в971.... - Отбросьте национальный префикс, если в стране он используется. Во многих странах это
0; в США и Канаде —1. - Добавьте код страны, если его ещё нет.
- Добавьте знак «+».
Для этого нужно знать страну. 0501234567 имеет смысл только вместе со страной, поэтому в таблицах должен быть столбец страны.
Как выглядят номера E.164 в разных странах?
В таблице приведены примеры. Номера условные, это не настоящие абоненты. Коды набора взяты из наших данных о нормах; префиксы междугородной связи — из таблицы процедур набора ITU.
| Страна | Код набора | Префикс междугородной связи (таблица ITU) | Местная форма (пример) | E.164 |
|---|---|---|---|---|
| ОАЭ | +971 | 0 | 050 123 4567 | +971501234567 |
| Саудовская Аравия | +966 | 0 | 051 234 5678 | +966512345678 |
| Катар | +974 | не указан | 5512 3456 | +97455123456 |
| Кения | +254 | 0 | 0712 345 678 | +254712345678 |
| Великобритания | +44 | 0 | 07700 900123 | +447700900123 |
| Германия | +49 | 0 | 0151 12345678 | +4915112345678 |
| Индия | +91 | 0 | 098765 43210 | +919876543210 |
| Испания | +34 | не указан | 612 345 678 | +34612345678 |
| Италия (мобильный) | +39 | не указан | 312 345 6789 | +393123456789 |
| Италия (стационарный) | +39 | не указан | 06 1234 5678 | +390612345678 |
| США | +1 | 1 | (202) 555-0123 | +12025550123 |
Таблица ITU отражает опубликованное положение на декабрь 2011 года, поэтому считайте её ориентиром по общей закономерности, а конкретную страну уточняйте через библиотеку или у регулятора.
Почему в Италии сохраняется ведущий 0?
Потому что в Италии 0 — часть самого номера, а не префикс междугородной связи. В таблице процедур набора ITU у Италии (код страны 39) национального префикса нет, так что отбрасывать нечего. Итальянские географические номера начинаются с 0, как в римском примере 06 1234 5678, и сохраняют его в международной форме: +390612345678. Итальянские мобильные номера начинаются с 3 и не содержат нуля, который нужно сохранять, поэтому 312 345 6789 превращается в +393123456789.
Не применяйте правило «всегда отбрасывать нуль» как универсальное. В той же таблице нет префикса междугородной связи также для Испании и Катара, а данные меняются, и это веская причина использовать библиотеку для всего, что нельзя проверить вручную.
Почему API для SMS и WhatsApp требуют E.164?
Потому что маршрутизация зависит от однозначного номера. Номер без кода страны может принадлежать многим странам, и платформа может отправить сообщение не на тот рынок, применить не те правила имени отправителя и выставить не тот тариф. Тарифы, регистрация имени отправителя и часы рекламной рассылки применяются по стране назначения, а определяется она по коду страны.
Что Meta говорит о номерах WhatsApp?
В документации Meta о форматах номеров телефонов пользователей WhatsApp сказано, что в запросах на отправку сообщений поддерживаются знаки «+», дефисы, скобки и пробелы, и настоятельно рекомендуется указывать знак «+» и код страны. Если знака «+» нет, к номеру добавляется код страны отправителя, и сообщение может уйти на неверный номер. Пример Meta: для отправителя из Индии (код 91) (631) 555-1234 доставляется на +916315551234, а +1 (631) 555-1234 доставляется правильно. Meta также отмечает, что для Бразилии и Мексики Cloud API может изменять лишний префикс, который встречается в некоторых номерах, и называет такое поведение стандартным.
Надёжный подход: храните чистый E.164 и отправляйте именно его.
А что с SMS?
API для SMS тоже ожидают полный международный номер. Некоторым нужны цифры без знака «+»; формат различается между API и протоколами, поэтому изучите документацию используемого вами API и проверьте на своём номере. Рабочие примеры см. в материалах отправка SMS через API и отправка сообщения WhatsApp через API.
Как проверять и нормализовать номера в коде?
Используйте регулярное выражение для быстрой проверки формы и библиотеку для настоящей проверки.
Распространённая проверка формы E.164:
// Plus, a non-zero first digit, then 1 to 14 more digits: 15 digits at most
const E164 = /^\+[1-9]\d{1,14}$/;
function looksLikeE164(value) {
return E164.test(value);
}
looksLikeE164("+971501234567"); // true
looksLikeE164("0501234567"); // false: no plus or country code
looksLikeE164("+0501234567"); // false: country codes do not start with 0
Регулярное выражение проверяет только длину и символы. Оно пропустит +99999999999, хотя такого номера не существует. Для настоящей проверки используйте библиотеку Google с открытым исходным кодом libphonenumber, предназначенную для разбора, форматирования и проверки международных телефонных номеров, доступную для Java, C++ и JavaScript, с портами сообщества для других языков. В её README isValidNumber описана как полная проверка для региона по данным о длине и префиксах, а также показано форматирование разобранного номера в E.164.
# pip install phonenumbers (a Python port of libphonenumber)
import phonenumbers
def to_e164(raw, default_region):
try:
number = phonenumbers.parse(raw, default_region) # e.g. "AE", "SA", "GB"
except phonenumbers.NumberParseException:
return None
if not phonenumbers.is_valid_number(number):
return None
return phonenumbers.format_number(number, phonenumbers.PhoneNumberFormat.E164)
print(to_e164("050 123 4567", "AE")) # +971501234567 if the number is valid for the UAE
print(to_e164("+44 7700 900123", "GB"))
Порты пишут сторонние разработчики, поэтому оцените качество выбранного. Разбирайте номер с регионом по умолчанию, взятым из страны клиента, затем сохраняйте результат E.164. Сохраняйте и исходный ввод, чтобы можно было разобрать его заново при изменении правил.
Нормализуйте при вводе: в форме регистрации, при импорте в CRM или в API, а не при отправке. Номер, записанный двумя способами, становится двумя контактами, и каждый получит одну и ту же кампанию.
Как исправить номера телефонов в таблице?
Задайте столбцу с телефонами текстовый формат до того, как вводить или вставлять номера. Типичные проблемы:
| Проблема | Что происходит | Как исправить |
|---|---|---|
| Ведущий нуль удалён | 0501234567 превращается в 501234567 |
Сначала задайте ячейкам текстовый формат; или начните ввод с апострофа |
| Экспоненциальная запись | Длинный номер показан как 9.71501E+11 |
Задайте текстовый формат; Excel хранит числовую точность до 15 цифр |
| Потерян знак «+» | Числовая ячейка может не сохранить + |
Задайте текстовый формат, затем проверьте первые символы столбца |
| Пробелы и дефисы | 971 50 123 4567 |
Удалите через «Найти и заменить» или SUBSTITUTE |
| Нет кода страны | Только местные номера | Добавьте столбец страны; соберите номер формулой |
Microsoft сообщает, что Excel удаляет ведущие нули и преобразует большие числа в экспоненциальную запись, а номера, введённые до применения текстового формата, нужно вводить заново. При прямом открытии файла CSV Excel применяет к каждому столбцу форматы по умолчанию, поэтому используйте мастер импорта текста или «Из текста/CSV», чтобы пометить столбец телефонов как текст.
Для списка мобильных номеров ОАЭ, хранящихся в виде 050 123 4567 в столбце A, эта формула собирает E.164 как текст:
="+971"&RIGHT(SUBSTITUTE(A2," ",""),9)
Она берёт последние девять цифр после удаления пробелов, поэтому подходит только для номеров такого вида. Перед сохранением в CSV скопируйте результат и вставьте как значения. Форматтер номеров преобразует номер без формулы, а наше руководство по массовой SMS-рассылке из Excel или CSV показывает весь процесс загрузки.
Пример: очистка списка клиентов
«Souq Rafiq» (вымышленный пример), розничная компания из Дубая, выгружает 8000 контактов из трёх систем с номерами вида 0501234567, 971 50 123 4567, +971-50-123-4567 и 00971501234567.
- Аналитик добавляет столбец страны по стране выставления счёта каждого клиента.
- Скрипт разбирает каждую строку с этой страной в качестве региона по умолчанию, так что все четыре формата превращаются в
+971501234567. - Строки, не прошедшие проверку, попадают на лист для проверки, а не отправляются.
- Дубликаты удаляются после нормализации, которая сводит четыре формата к одному контакту.
- HLR-проверка перед кампанией отмечает неактивные номера. См. HLR-проверка: объяснение.
- Чистый столбец сохраняется как текст и загружается.
Именно нормализация в начале делает проверку на дубликаты рабочей; до неё один и тот же клиент выглядел как четыре человека.
Какие бывают типичные ошибки?
- Всегда отбрасывать ведущий нуль. В некоторых странах, например в Италии, нет префикса междугородной связи.
- Сохранять нуль и добавлять код страны, получая
+9710501234567. - Отправлять в WhatsApp без знака «+», из-за чего добавляется код страны отправителя.
- Использовать регулярное выражение как проверку. Оно проверяет форму, а не допустимость.
- Позволять Excel воспринимать телефоны как числа, теряя нули или переходя на экспоненциальную запись.
- Нормализовать при отправке вместо ввода.
- Считать, что допустимый формат означает досягаемый номер. Перенесённые или отключённые номера всё равно дают сбой.
- Доверять статичной таблице. Планы нумерации меняются; используйте поддерживаемую библиотеку.
Чем помогает OmniChannels.ai
OmniChannels.ai принимает международные номера для SMS и WhatsApp через один REST API, а его кампании принимают загрузку Excel и CSV с предпросмотром и фильтрацией дубликатов. BroadNet предлагает HLR-проверку и проверку номера, так что вы можете убедиться, что правильно оформленный номер активен. Точные поля запросов смотрите в документации SMS API и документации WhatsApp API, а по вопросам подключения поговорите с нашей командой.
Часто задаваемые вопросы
Что такое формат E.164?
E.164 — это международный план телефонной нумерации, определённый рекомендацией ITU-T E.164. В повседневном использовании номер E.164 — это знак «+», код страны и национальный номер, записанный только цифрами, всего не более 15 цифр. Он однозначно определяет номер во всём мире, поэтому платформы сообщений и API требуют именно его.
Как преобразовать номер телефона в E.164?
Удалите пробелы, дефисы и скобки. Отбросьте национальный префикс, если в стране он используется, обычно это ведущий 0. Добавьте знак «+» и код страны. Так номер ОАЭ 050 123 4567 превращается в +971501234567. В таких странах, как Италия, у стационарных номеров ведущий 0 сохраняется, поэтому проверьте правило страны или используйте библиотеку.
Сколько цифр может быть в номере E.164?
Не более 15, считая код страны и национальный номер и не считая международный префикс набора. Знак «+» не является цифрой. Многие национальные номера гораздо короче. Значение длиннее 15 цифр не может быть допустимым номером E.164 и обычно указывает на ошибку при вставке или повреждённую ячейку таблицы.
Нужен ли API WhatsApp знак «+»?
В документации Meta сказано, что знаки «+», дефисы, скобки и пробелы поддерживаются в запросах на отправку сообщений, и настоятельно рекомендуется указывать знак «+» и код страны. Без «+» к номеру добавляется код страны отправителя, и сообщение может уйти на другой, неверный номер. Для надёжности отправляйте полный E.164.
Почему Excel убирает нуль или меняет мои номера телефонов?
Excel воспринимает номер, введённый как число, числовым значением. Microsoft сообщает, что это убирает ведущие нули и показывает длинные числа в экспоненциальной записи, поскольку Excel хранит 15 цифр точности. Задайте столбцу текстовый формат до ввода или вставки номеров либо начинайте ввод с апострофа и заново введите ранее набранные номера.
Означает ли допустимый номер E.164, что он досягаем?
Нет. Номер может быть правильно оформлен, но не назначен, отключён или перенесён к другому оператору. Проверка формата проверяет форму и длину для страны. Чтобы узнать, активен ли номер и в какой он сети, перед большой отправкой выполните HLR-проверку или проверку номера.
Источники
- Recommendation ITU-T E.164: The international public telecommunication numbering plan
- Dialling procedures (international prefix, national (trunk) prefix and national (significant) number), ITU Operational Bulletin No. 994, 15.XII.2011
- WhatsApp user phone number formats — WhatsApp Business Platform, Meta for Developers
- Keeping leading zeros and large numbers — Microsoft Support
- libphonenumber — Google, open-source library on GitHub
Читайте дальше
Ещё руководстваИнтеграции
Автоподстановка OTP из SMS: форматы для Android, iOS и веба
Как работает автоподстановка OTP на Android, iOS и в вебе: хеш SMS Retriever, коды с привязкой к домену, WebOTP, единый формат SMS для трёх платформ и WhatsApp.
9 мин чтения
Интеграции
Пропускная способность и лимиты скорости WhatsApp Cloud API
Пропускная способность и лимиты WhatsApp Cloud API: сообщений в секунду, как её повысить, парный лимит и лимиты Graph API, коды ошибок и повторы с отсрочкой.
9 мин чтения
Маркетинг
Автоматические напоминания о записи в WhatsApp и SMS: гайд
Автоматизируйте напоминания о записи в WhatsApp и SMS для клиник, салонов, отелей и сервисов: время отправки, шаблоны, кнопки подтверждения и резервный канал.
8 мин чтения
