ENUM o mapeo de números telefónicos, está constituido por una serie de protocolos que permiten crear una convergencia entre la red telefónica tradicional y Internet. Permite asociar (utilizando el protocolo DNS) un numero telefónico a todas una serie de servicios típicos de la red internet (VoIP, correo electrónico, pagina web, etc.).
¿Cómo funciona?
Se ha creado una nueva jerarquía de dominios bajo el DNS e164.ARPA donde se almacenan los servicios asociados a un determinado numero telefónico.
Un ejemplo:
tenemos un numero telefónico: +5712345678
Este se almacenará bajo la jerarquía e164.ARPA siguiendo un orden inverso y poniendo entre cada digito un punto:
8.7.6.5.4.3.2.1.7.5.e164.arpa
Este numero estará asociado a unos registros DNS (Name Authority Pointer o NAPTR) que podrán conocerse a través de una consulta:
$ORIGIN 8.7.6.5.4.3.2.1.7.5.e164.arpa.
IN NAPTR 100 10 "u" "E2U+sip" "!^.*$!sip:phoneme@example.net!"
IN NAPTR 102 10 "u" "E2U+mailto" "!^.*$!mailto:myemail@example.com!"
En este caso dos:
Como queda claro a través de este ejemplo una vez que tengamos estos datos podremos usarlos en nuestra centralita. Llamar directamente la SIP URI en lugar del numero telefónico (ahorrando los costos de llamadas) o enviar un correo electrónico.
Si queremos hacer una prueba podemos registrar nuestro numero telefónico y asociarlo a distintos servicios Internet a través de E164.org, un directorio ENUM publico.
Primero tenemos que modificar el fichero enum.conf
nano /etc/asterisk/enum.conf
[general]
search => e164.arpa
search => e164.org
h323driver => H323
Ponemos estas líneas que nos permitirán hacer búsqueda en la jerarquía DNS e164.arpa y e164.org
Guardamos los cambios y echamos una mirada a las funciones disponibles en asterisk para hacer consultas a estos DNS
ENUMLOOKUP
Sintaxis:
ENUMLOOKUP(number[,Method-type[,options[,record#[,zone-suffix]]]])
Ejemplos:
exten => _00.,1,Set(Enum1=${ENUMLOOKUP(+${EXTEN:2},SIP,c,,e164.org)})
El ejemplo funciona si para marcar un numero usamos el formato internacional: 00 + código país + código ciudad + numero.
El resultado de la consulta será un numero entero que indicará cuantos SIP URI están asociados al numero telefónico indicado
exten => _00.,1,Set(Enum1=${ENUMLOOKUP(+${EXTEN:2},ALL,c,,e164.org)})
parecido al ejemplo precedente con la única diferencia que la consulta restituirá todos los NAPTRs asociados al numero telefónico indicado.
Sintaxis:
ENUMQUERY(number[,Method-type[,zone-suffix]])
Ejemplos:
exten => _00.,1,Set(Enum1=${ENUMQUERY(+${EXTEN:2},SIP,e164.org)})
El resultado de la consulta será un numero (ID) que luego podremos usar con la función ENUMRESULT
Vamos a verlo en seguida:
Sintaxis:
ENUMRESULT(id,resultnum)
Ejemplos:
exten => _00.,1,Set(NUM=${ENUMRESULT(${Enum1},1)})
Con este línea vamos a mirar el primer NAPTR resultado de la consulta hecha con ENUMQUERY. La variable ${Enum1} es la que contiene el ID de la consulta y es la misma que indicamos como ID en la función ENUMRESULT
Vamos a construir nuestro plan de llamadas de modo que antes de llamar cualquier numero (nacional o internacional) haga una consulta en ENUM para ver si es posible usar una SIP URI en lugar del numero telefónico:
exten => _00.,1,Set(Enum1=${ENUMLOOKUP(+${EXTEN:2},sip,c)}|counter=0)
exten => _00.,2,GotoIf($["${counter}"<"${Enum1}"]?3:6)
exten => _00.,3,Set(counter=$[${counter}+1])
exten => _00.,4,Dial(SIP/${ENUMLOOKUP(+${EXTEN:2},sip,,${counter})})
exten => _00.,5,GotoIf($["${counter}"<"${sipcount}"]?3:6)
exten => _00.,6,Dial(SIP/MyproveedorVoIP/${EXTEN})
exten => _00.,7,Hangup
Lo mismo podemos hacer para el protocolo IAX:
exten => _00.,1,Set(Enum1=${ENUMLOOKUP(+${EXTEN:2},iax2,c)}|counter=0)
exten => _00.,2,GotoIf($["${counter}"<"${Enum1}"]?3:6)
exten => _00.,3,Set(counter=$[${counter}+1])
exten => _00.,4,Dial(IAX2/${ENUMLOOKUP(+${EXTEN:2},sip,,${counter})})
exten => _00.,5,GotoIf($["${counter}"<"${sipcount}"]?3:6)
exten => _00.,6,Dial(SIP/MyproveedorVoIP/${EXTEN})
exten => _00.,7,Hangup
Estos son solamente dos ejemplos. Podemos pensar en construir una macro que se ocupe de las consultas ENUM y si no resultara volver al dialplan y efectuar la llamada vía proveedor SIP o a través de la línea telefónica tradicional.
Referencias: RFC3761 RFC2915 RFC3401 RFC3402 RFC3403 RFC3404
Comentarios recientes
hace 1 día 12 horas
hace 6 días 6 horas
hace 6 días 17 horas
hace 1 semana 1 día
hace 1 semana 4 días
hace 2 semanas 1 día
hace 2 semanas 2 días
hace 2 semanas 2 días
hace 2 semanas 3 días
hace 2 semanas 3 días