Luis Abenza

Blog sobre temas como: Asterisk, VoIP, Mikrotik, Wireless, Web, Publicidad, …

Archive for the ‘Asterisk’ Category

Horarios en Outbound Routes

La semana pasada me surgió la necesidad de configurar la salida de las llamadas a móviles por dos líneas diferentes según el horario. Para hacerlo con FreePBX (versión 2.3), lo que hice fue:

  1. Eliminar la máscara 6XXXXXXXX de la ruta saliente para móviles en la interfaz de FreePBX.
  2. Editar el fichero extensions_custom.conf, y añadir las siguiente líneas dentro de contexto [from-internal-custom], que automáticamente es llamado desde el contexto por defecto para todas las extensiones: [from-internal]:

    exten => _6XXXXXXXX,1,Answer()
    ;exten => _6XXXXXXXX,n,GotoIfTime(9:00-13:00|*|*|*?orange1)
    exten => _6XXXXXXXX,n,GotoIfTime(16:00-20:00|*|*|*?orange2)

    exten => _6XXXXXXXX,n(orange1),Dial(ZAP/3/${EXTEN})
    exten => _6XXXXXXXX,n,Dial(ZAP/4/${EXTEN})
    exten => _6XXXXXXXX,n,Dial(ZAP/2/${EXTEN})
    exten => _6XXXXXXXX,n,Hangup()

    exten => _6XXXXXXXX,n(orange2),Dial(ZAP/4/${EXTEN})
    exten => _6XXXXXXXX,n,Dial(ZAP/3/${EXTEN})
    exten => _6XXXXXXXX,n,Dial(ZAP/2/${EXTEN})

    exten => 6XXXXXXXX,n,Hangup()

Es un ejemplo muy sencillo, pero seguro que a alguien le puede venir bien.

Ya soy dCap!

Buen, pues ayer me comunicaron que superé tanto la prueba práctica como la teórica, así que ya soy oficialmente dCap.

dCap

Que ¿qué es dCap?. Pues podéis leer un post de Elio en el que lo define bastante bien, y del que extraigo un pequeño fragmento:

El título de certificado dCap es, como su mismo nombre indica (Digium Certified Asterisk Profesional), un Profesional de Asterisk Certificado por Digium y el mayor certificado que un profesional que trabaja con Asterisk puede tener.

FreePBX ¿Sí o no?

Eterna discusión.

Los más puristas de Asterisk se muestran siempre en contra de esta herramienta y sus similares. Estoy de acuerdo en que se debe tener un profundo conocimiento de Asterisk, y saber configurarlo sin problemas con sus ficheros de configuración. Si no se tiene una base, cuando aparecen problemas con FreePBX estás perdido.

En cambio, desde un punto de vista empresarial, tanto por ofrecer una herramienta gráfica al cliente como por la velocidad de reacción ante peticiones, creo que FreePBX es una herramienta muy potente.

Eso sí, con clientes me refiero a administradores de sistemas de la empresa, con unos conocimientos adecuados y una pequeña formación acerca de lo que tiene y puede hacer.

Además, FreePBX es ya bastante flexible en cuanto a la edición de ficheros adicionales que no te limiten la funcionalidad de Asterisk (editando directamente).

Concluyendo, creo que la herramienta es adecuada y muy potente. El problema, es que lo ves, lo instalas y voila! funciona!. Ahora, amigo, tienes que tener un conocimiento de lo que hay detrás, porque cuando llegan problemas o peticiones “fuera de la interfaz” …. Vamos, que creo que el problema no está en la herramienta, sino en el uso que se le da.

Ya me ha ocurrido un par de veces, tal y como se ha comentado en varias listas, que no termina de levantar el módulo SIP de Asterisk si perdemos la conexión a Internet y hay definida una o más líneas SIP.

Esto lo podemos evitar montando un servidor de nombre (BIND) con cacheo en la propia máquina de Asterisk. Suponiendo que trabajamos con CentOS, el proceso sería más o menos así:

yum -y install bind bind-libs caching-nameserver bind-chroot

chkconfig named on

service named start

Ahora editamos el fichero /var/named/chroot/etc/named.conf para añadir los reenviadores (servidores DNS externos, que en nuestro ejemplo será los de opendns.com) dentro de la sección options:

forwarders {
208.67.222.222;
208.67.220.220;
};

Por último, editamos el fichero /etc/resolv.conf para decirle a la máquina que se consulte a sí misma y lo dejamos así:

search localdomain
nameserver 127.0.0.1

Reiniciamos el servicio de DNS:

service named restart

Ya habríamos terminado, pero hay que tener en cuenta que hay que dejar pasar unas horas….

Llevába tiempo utilizando el códec g729 “opensource” en varias Asterisk en las que se utilizan un par de extensiones remotas. De vez en cuando saltaba la banca y nos daba algún error o problema, pero el que más me calentó la cabeza fue tras una actualización de los firmware del ST2030. Después de hacerlo, no funcionaba la comunicación.

Bueno, pues después de ver esto, y releer el estupendo post de Elio sobre estas dos versiones del g729, tengo decidido no usarlo más. El de Digium funciona estupendamente y su coste es mínimo respecto a una instalación.

  • 0 Comments
  • Filed under: Asterisk, VoIP
  • FreePBX Outbound Caller ID

    He tenido un problema con FreePBX (sí, ya…, ya lo sé…), porque el Caller ID de una línea no prevalecía sobre el Caller ID definido en la extensión. Este problema suponía que no se pudiese utilizar el proveedor IP, ya que no aceptaba la llamada al intentar meter un CID que no era el suyo.

    Finalmente, he conseguido solucionar el problema de momento modificando el extensions_additional.conf. La macro que mete el CID de la llamada extenerna es “macro-outbound-callerid”, y “de serie” viene así:

    [macro-outbound-callerid]
    include => macro-outbound-callerid-custom
    exten => s,1,GotoIf($["${REALCALLERIDNUM:1:2}" != ""]?start)
    exten => s,n,Set(REALCALLERIDNUM=${CALLERID(number)})
    exten => s,n(start),Noop(REALCALLERIDNUM is ${REALCALLERIDNUM})
    exten => s,n,GotoIf($["${KEEPCID}" != "TRUE"]?normcid)
    exten => s,n,GotoIf($["x${OUTKEEPCID_${ARG1}}" = "xon"]?normcid)
    exten => s,n,GotoIf($["foo${REALCALLERIDNUM}" = "foo"]?normcid)
    exten => s,n,Set(USEROUTCID=${REALCALLERIDNUM})
    exten => s,n,GotoIf($["foo${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "foo"]?bypass:normcid)
    exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${REALCALLERIDNUM}/outboundcid)})
    exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)})
    exten => s,n,Set(TRUNKOUTCID=${OUTCID_${ARG1}})
    exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = ""]?trunkcid)
    exten => s,n,GotoIf($["${EMERGENCYCID:1:2}" = ""]?trunkcid)
    exten => s,n,Set(CALLERID(all)=${EMERGENCYCID})
    exten => s,n,Goto(report)
    exten => s,n(trunkcid),GotoIf($["${TRUNKOUTCID:1:2}" = ""]?usercid)
    exten => s,n,Set(CALLERID(all)=${TRUNKOUTCID})
    exten => s,n(usercid),GotoIf($["${USEROUTCID:1:2}" = ""]?report)
    exten => s,n,Set(CALLERID(all)=${USEROUTCID})
    exten => s,n,GotoIf($["x${CALLERID(name)}"!="xhidden"]?report:hidecid)
    exten => s,n(hidecid),SetCallerPres(prohib_passed_screen)
    exten => s,n(report),Noop(CallerID set to ${CALLERID(all)})

    ; end of [macro-outbound-callerid]

    Bueno, pues al comprobar si tenemos marcada la opción “Never Override CallerID” (GotoIf($["x${OUTKEEPCID_${ARG1}}"...), que se supone que nos mantiene el CID definido en la linea sobre cualquier otro, nos manda a la etiqueta "normcid", que marca el CID como el definido en la extensión del usuario.

    Para que esto funcione como es debido podemos cambiar la macro a una como la de abajo:

    [macro-outbound-callerid]
    include => macro-outbound-callerid-custom
    exten => s,1,GotoIf($["${REALCALLERIDNUM:1:2}" != ""]?start)
    exten => s,n,Set(REALCALLERIDNUM=${CALLERID(number)})
    exten => s,n(start),Noop(REALCALLERIDNUM is ${REALCALLERIDNUM})
    exten => s,n,GotoIf($["x${OUTKEEPCID_${ARG1}}" = "xon"]?lineacid)
    exten => s,n,GotoIf($["${KEEPCID}" != "TRUE"]?normcid)
    exten => s,n,GotoIf($["foo${REALCALLERIDNUM}" = "foo"]?normcid)
    exten => s,n,Set(USEROUTCID=${REALCALLERIDNUM})
    exten => s,n,GotoIf($["foo${DB(AMPUSER/${REALCALLERIDNUM}/device)}" = "foo"]?bypass:normcid)
    exten => s,n(normcid),Set(USEROUTCID=${DB(AMPUSER/${REALCALLERIDNUM}/outboundcid)})
    exten => s,n(bypass),Set(EMERGENCYCID=${DB(DEVICE/${REALCALLERIDNUM}/emergency_cid)})
    exten => s,n(lineacid),Set(TRUNKOUTCID=${OUTCID_${ARG1}})
    exten => s,n,GotoIf($["${EMERGENCYROUTE:1:2}" = ""]?trunkcid)
    exten => s,n,GotoIf($["${EMERGENCYCID:1:2}" = ""]?trunkcid)
    exten => s,n,Set(CALLERID(all)=${EMERGENCYCID})
    exten => s,n,Goto(report)
    exten => s,n(trunkcid),GotoIf($["${TRUNKOUTCID:1:2}" = ""]?usercid)
    exten => s,n,Set(CALLERID(all)=${TRUNKOUTCID})
    exten => s,n(usercid),GotoIf($["${USEROUTCID:1:2}" = ""]?report)
    exten => s,n,Set(CALLERID(all)=${USEROUTCID})
    exten => s,n,GotoIf($["x${CALLERID(name)}"!="xhidden"]?report:hidecid)
    exten => s,n(hidecid),SetCallerPres(prohib_passed_screen)
    exten => s,n(report),Noop(CallerID set to ${CALLERID(all)})

    ; end of [macro-outbound-callerid]

    Elastix 1.1

    Ya está disponible la versión estable de Elastix 1.1, que entre otras cosas, nos trae:

    • Actualización de más de 130 paquetes
    • Calendario y Directorio telefónico en el nuevo módulo Agenda, que además nos permitirá configurar avisos telefónicos de nuestras citas
    • Mejoras sustanciales para el “Usuario”, con acceso directo a su email, calendario, faxes, buzón de voz, etc.

    Yo ya me la estoy descargando, ¿y tu?.

    Cliente de HUDlite

    Una vez que tenemos instalado el servicio de HUDlite en nuestra centralita Asterisk podemos poner en marcha el cliente en los puestos que consideremos oportunos. Podemos descargar el cliente desde HUDlite.org.En el módulo HUDadmin veremos el usuario y contraseña que le corresponde a cada extensión, que serán los que hay que configurar en el cliente HUDlite. También debemos rellenar los siguiente datos:

    • Server name: IP de Asterisk
    • Server password: password
    • Server port: 6600

    En el proceso de instalación podemos elegir que nos instale la compatibilidad con Outlook y el TAPI driver para sacar más provecho de este software.

    Instalando HUDlite en Elastix

    HUDLite LogoHUDlite es un programa que nos permite monitorizar las extensiones de nuestra centralita Asterisk, controlando su estado en tiempo real para saber si está libre u ocupada. Además, nos permite transferir llamadas, visualizar el parking de llamadas, llamar desde Outlook, comparar el número entrante con la agenda de Outlook y varias funcionalidades más.

    Es un desarrollo de Fonality, y tiene una rápida integración con trixbox. Pero lo que nos ocupa aquí es ponerlo en marcha con Elastix.

    (more…)

    Elastix 1.0 estable!

    Ya llego el día: Elastix 1.0
    Ya estaba siendo utilizada con bastante éxito la versión 1.0RC2, y finalmente lanzaron la 1.0 Stable.

    Version 1.0 Stable (Apr. 14 2008)
    ———————————

    - Module Extension Batch changed to support more parameters of VoiceMail.
    - Module GroupPermissions: Do not permit change the permissions of modules administratives to administrator group.
    - In elastix.spec maintenaince, lines of create folder faxvisor comments, this folder is in source elastix.
    - New language Catalan.
    - Update module Hardware Detection, now zapata.conf is more complete.
    - Add zapata.conf custom by elastix, in rpm freePBX.
    - Maintenaice of rpm elastix-a2billing, name format changed. And validation directory /var/lib/asterisk/sounds/en/ exists.
    - Updating rhino packages to 2.2.5.3 version.

    Se puede descargar en:

    http://downloads.sourceforge.net/elastix/Elastix-1.0-Stable-10abr2008.iso