Кратко
phone-stringв RFC 3601 соединяет DTMF, паузу, tonewait и визуальные разделители. Локальная форма может включать выход с АТС, код оператора, пароль услуги и команды после соединения.- Источник, классификация, контекст, разрешение, действия устройства, сигнализация, соединение и итог требуют отдельных доказательств. Предыдущий этап не подтверждает следующий.
Самая опасная ошибка начинается не с неправильной цифры, а с неправильного типа. Поле назвали phone_number, и все последующие системы стали обращаться с ним как с идентификатором. Но устройство прочитало в нём команды: подождать, дождаться сигнала, набрать код, а после ответа отправить ещё одну группу цифр.
RFC 3601 опубликован в сентябре 2003 года как Standards Track. Он определяет текстовую запись последовательностей набора и набираемых адресов GSTN/E.164. Dial Sequence — это ряд DTMF-элементов и действий человека либо устройства. phone-string включает цифры, #, *, A-D, p для паузы, w для ожидания тона, а также дефис и точку как письменные разделители.
Роли различаются. Дефис и точка нужны для чтения и не должны вызывать действие; реализация может вставлять или удалять их. p и w управляют ходом исполнения. Удаление визуальных разделителей может быть эквивалентным сравнением. Удаление всех нецифровых знаков способно переписать программу.
Единой временной семантики тоже нет. RFC рекомендует считать одну паузу одной секундой, а tonewait — ожиданием гудка или другого признака готовности принять следующие символы; таким признаком может стать off-hook. Но точное толкование зависит от устройства и реализации. Одинаковая строка на двух аппаратах не гарантирует одинаковую временную трассу.
Парсер здесь знает только синтаксис. Он не видел отправленный DTMF, реальную длительность паузы или событие, снявшее ожидание. Запись «tonewait завершён» доказывает решение локального детектора. Она не устанавливает удалённую личность, факт соединения и доставку дальнейших цифр нужному сервису.
Вторая граница отделяет sequence от address. gstn-phone бывает global и local. global-phone начинается с + и представляет набираемый числовой адрес E.164. При этом полные абстрактные адреса E.164 имеют ненабираемые элементы и, как говорит RFC, не переводятся целиком в эту запись. Плюс отмечает пространство имён, но не превращает всю адресную модель в исполняемые цифры.
local-phone особенно зависит от окружения. Он может включать exit-code и dial-number. В exit-code входят цифра выхода на городскую линию, доступ к междугороднему оператору, пароль услуги и другие элементы. Копия строки на другую АТС сохраняет байты, но не местный план, политику оператора и версию настройки.
RFC 3966 позже провёл более строгую черту. URI tel — идентификатор, а не инструкция по достижению номера. Он не задаёт семантику набора и не обещает доступность отовсюду. Dial strings, паузы и post-dial были исключены из его области. Локальный номер требует phone-context, однако контекст обозначает область валидности, а не префикс для гарантированного получения E.164.
RFC 4967 затем ввёл user=dialstring для SIP/SIPS. Dial string всегда существует в контексте и должна отличаться от user part с теми же символами. RFC 6116 сохраняет ведущий + у полностью квалифицированного E.164 для ENUM и запрещает подавать локально набранные цифры как такой вход. К одному глобальному номеру могут вести разные местные последовательности.
Поэтому массовое превращение телефонных полей в tel URI не является чистой сменой формата. Сначала нужна классификация: identifier, global-phone, local-phone, Dial Sequence, subaddress или post-dial. Затем адрес, действия и секрет можно разнести по подходящим типам.
post-dial имеет предусловие. RFC 3601 описывает его как последовательность после установления соединения с целевым устройством, например для автоматического меню. Наличие значения в базе не доказывает, что соединение было. Нужны связанный receipt ответа, фактически отправленные DTMF и реакция сервиса.
В строке может находиться секрет. Пример RFC помещает туда ID голосового ящика и PIN, а раздел безопасности предупреждает о раскрытии частных кодов при незащищённой передаче. Значение, выглядящее как контакт, одновременно может быть credential и исполняемой программой.
Репликация расширяет утечку. Поиск, CRM-экспорт, аналитическое хранилище, debug log и снимок поддержки копируют поле целиком. Полная маскировка уничтожает связь для расследования, открытое хранение разносит пароль. Правильная модель разделяет публичный адрес, план действий и защищённую ссылку на секрет, оставляя в журнале hash, структуру и события.
Цепочка доказательств начинается с поставщика, исходного типа, hash и времени. Далее идут классификация и версия парсера. Контекст фиксирует площадку, АТС, план нумерации, правило оператора и эпоху конфигурации. Каждое преобразование символа записывается. Перед исполнением требуется разрешение. Затем логируются DTMF, длительность паузы и условие снятия ожидания. Маршрут, соединение, post-dial и бизнес-результат остаются отдельными слоями.
Так исчезает ложное сжатие статусов. Импортировано — не значит классифицировано. Валидно — не значит разрешено. Набрано — не значит соединено. Ответ не доказывает ожидаемую сторону. Отправленные цифры не доказывают принятие меню. Каждый receipt должен говорить только о своём наблюдении.
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
