Как известно, существует рекомендация E.164 ITU-T, определяющая план нумерации для телефонных сетей и формат телефонных номеров. Номера по E.164 могут иметь максимум 15 цифр и обычно записываются с префиксом «+». Кроме того, они могут быть использованы в DNS с помощью электронной нумерации (ENUM, Electronic Numeration) для определения порядка вызова абонента с таким номером. Это дает нам некоторый простор при использовании традиционных сетей телефонии и сетей пакетной передачи данных. В частности, это позволит нам сэкономить пару рублей на звонках уже сегодня.
Итак, подобно ip адресам с обратным DNS, использующим зону in-addr.arpa, телефонным номерам при помощи зоны e164.arpa могут быть сопоставлены записи, определяющие возможности по связи с абонентским номером. Например, номеру +7 123 123-23-23 будут соответствовать записи в зоне 3.2.3.2.3.2.1.3.2.1.7.e164.arpa — разумеется, в этом случае, как и с ip адресами, можно делегировать зону более высокого уровня для управления оператором, который использует соответствующий пул номеров. Получить зону в e164.arpa может только национальный координатор, выбираемый правительством. Сами понимаете, в нашей стране этот бюрократический вопрос не решен и когда будет решен — не известно никому. На этом можно было бы и закрыть вопрос, если бы не существовало альтернативных ENUM сервисов, например e164.org, регистрация в которых доступна любому абоненту.
В соответствующей номеру зоне хранятся NAPTR записи, определяющие возможности для вызова абонента, например:
$ORIGIN 3.2.3.2.3.2.1.3.2.1.7.e164.org. IN NAPTR 100 10 "u" "E2U+sip" "!^.*$!sip:mysipid@example.net!" . IN NAPTR 102 10 "u" "E2U+mailto" "!^.*$!mailto:myemail@example.com!" .
Тут, в зависимости от того, что именно мы хотим абоненту передать, можно либо вызвать его голосом по SIP, либо, если планировалось отправить факс, эти данные можно сразу послать по e-mail. Возможно описание переадресации вызова, работа с http и другими ресурсами, в зависимости от того, на что способны терминалы сторон.
И, в заключение, пример работы с ENUM из Asterisk:
exten => _+7.,1,Noop(${EXTEN:1}) exten => _+7.,2,Set(peer=${ENUMLOOKUP(${EXTEN},sip,,1,e164.org)}) exten => _+7.,3,GotoIf($["${peer}" != ""]?4:failed) exten => _+7.,4,Dial(SIP/${peer}) exten => _+7.,5,Hangup exten => _+7.,n(failed), ...
Это вводная статья, которая позволит вам сделать быстрый старт. Если тема будет интересна, могу написать еще несколько статей о ENUM и DUNDi. Прошу в комментариях оставить ваше мнение о нужности этой тематики. Помните, чем больше нас, тем в итоге интереснее использование ip-телефонии.
Автор: Rumka