Howto: Voceo a teléfonos Aastra y Asterisk

Pues uno de nuestros clientes tiene una instalación de Asterisk típica con teléfonos Aastra 9133i, y nos pidió habilitar una funcionalidad para que los teléfonos funcionen como intercomunicador, también conocido como voceo, anunciador o pager. Básicamente el requerimiento consiste en que desde cualquier teléfono se marque una extensión (o una tecla rápida) y que en algún otro teléfono se abra el speaker automáticamente, y así el que llama pueda dar un anuncio, solicitar a la secretaria que entre a la oficina del jefe, etc.

Para poder lograr el objetivo es necesario contar con teléfonos que tengan la funcionalidad de "autocontestar", es decir, que en el momento de entrar una llamada, el teléfono automáticamente abra el speaker (o diadema en su caso) sin necesidad de que el receptor levante el auricular o apriete algún botón. Este tipo de cosas se utilizan comúnmente para centros de llamadas donde se cuentan con sistemas de marcación progresiva, predictiva, etc. Con los teléfonos IP que he trabajado y que cuentan con esta funcionalidad son los Aastra, Grandstream y Polycom.

Después de buscar en varios foros y algunos experimentos de prueba y error para teléfonos Aastra el código para lograr el voceo a una extensión en específico es el siguiente:

; Pager general
exten => _*25*XXXX,1,SIPAddHeader(Call Info: Answer-After=0)
exten => _*25*XXXX,n,SIPAddHeader(Call-Info: \;answer-after=0)
exten => _*25*XXXX,n,Set(TIMEOUT(absolute)=60)
exten => _*25*XXXX,n,Page(SIP/${EXTEN:4})
exten => _*25*XXXX,n,Hangup


La aplicación se puede mandar llamar marcando en una sola línea * + 25 + * + Extensión de cuatro dígitos a quien desea llamar. Las dos primeras líneas agregan encabezados SIP para indicarle al teléfono destino que tiene que autocontestarse (tengo entendido que esto no es igual para cada marca marca de teléfonos, esto esta probado con Aastra).

La cuarta línea es la más interesante, ya que manda llamar la aplicación Page(). Ya que Asterisk no cuenta con una aplicación específica para hacer voceo, lo que hace la aplicación Page es crear en un instante un cuarto de conferencia, y meter en él todos a los participantes de la llamada, así como darle permisos de hablar sólo a quien genera la llamada.

Si se desea realizar voceo a muchos teléfonos al mismo tiempo el proceso es similar, con algunos cambios:

AASTRA=SIP/1101&SIP/1102&SIP/1104&SIP/1105&SIP/1106&SIP/1120&SIP/1130

exten => _*25,1,SIPAddHeader(Call Info: Answer-After=0)
exten => _*25,n,SIPAddHeader(Call-Info: \;answer-after=0)
exten => _*25,n,Set(TIMEOUT(absolute)=60)
exten => _*25,n,Page(${AASTRA})
exten => _*25,n,Hangup


Donde en la variable AASTRA tenemos todos los teléfonos que deseamos alcanzar en el voceo. Es importante recalcar que se genera un cuarto de conferencias (Asterisk necesita un reloj, por lo que si no tienen una tarjeta instalada hay que habilitar el módulo ZTDUMMY en zaptel) y sólo se le da permisos de hablar en este caso al que marca, de otra manera el relajo que se armaría el escuchar por speaker a todos los teléfonos al mismo tiempo!!! Sin embargo la aplicación Page() puede recibir diferentes opciones (que no se tratan en este artículo) que permiten modificar el comportamiento.

Espero que les sea de utilidad. Saludos!

4 comentarios:

Anónimo dijo...

Que tal Juan Carlos,

Gracias por tu receta funciona muy bien, pero tengo un detalle, resulta que cuando mis usuarios están usando una linea y se usa el voceo, en automático me pone la llamada en hold, ¿existe algún parámetro que pueda indicarle que no haga el voceo si esta ocupado en alguna linea?

Gracias
El Peludo

Metfan dijo...

Peludo, si hay forma de evitar que mande voceo si el teléfono esta en llamada, esto se hace mediante la aplicación ChanIsAvail(). Con dicha aplicación puedes pedirle a Asterisk que revise el estado de un dispositivo en específico, y si está en uso (en llamada) entonces que no le mande el Page(). Esta muy sencilla, te paso la liga donde viene un ejemplo aplicado junto con el voceo (lo que necesitas)

Espero te sirva, Juan Carlos.

Christian Cabrera dijo...

Estuve probando tu código con un 53i y funciona muy bien, salvo que cuando hago el voceo el audio siempre sale por el speaker, en vez de por la diadema (que es donde tengo conectado un equipo de sonido para que toda la oficina lo escuche). Ya probé cambiando el audio a headset y aunque hago llamadas sin problema por la diadema, el intercom siempre se va al speaker. ¿Alguna idea?

Metfan dijo...

Christian, el howto lo hice para usar justamente el speaker de los teléfonos, es una funcionalidad que tienen los Aastra, es por eso que siempre levantará el speaker. Si lo que necesitas es usar una bocina o amplificador o algo por el estilo para toda la oficina lo que te recomiendo es usar la tarjeta de sonido del servidor que tiene Asterisk, es mas fácil.

Conéctale un amplificador al jack de lineout de la tarjeta de sonido, comprueba los niveles usando el alsamixer (si es que tu distro donde tienes Asterisk usa alsa para el audio), y dentro de Asterisk usa el canal Console, lo que Asterisk hará es usar su driver OSS para lanzar el audio directo a la tarjeta de sonido sin necesidad de hacer cosas extrañas, esto ya existe.

exten => 999,1,Dial(Console/dsp)

Espero te sirva, y por cierto, este blog no lo mantengo mas, se movió a:
http://www.nucleum.com.mx/blog

Saludos!