asterisk telefonia ip, internet

513

Click here to load reader

Upload: waldinux

Post on 24-Nov-2015

341 views

Category:

Documents


52 download

DESCRIPTION

Asterisk, telefonia ip, llamadas por internet, ahorro en llamadas

TRANSCRIPT

Documentacion Final

NO ESTA CONSIDERADA ESTA PARTE

Cierto es que llevamos varios aos esperando que estos aadidos se conviertan de una vez por todas en funcionalidades estables, no obstante cabe recordar a todos que Asterisk pese a los esfuerzos de muchas empresas que dedican tiempo y recursos en desarrollar y corregir cada una de las partes que lo forman y pese a que hay muchsimo dinero movindose en torno a l tanto a nivel de Hardware, instalaciones, solucionespersonalizadas, etc, tambin hay que entender que, hay un volumen altsimo de usuarios en comparacin con el de desarrolladores por lo que se hace muy difcil coordinar todos estos esfuerzos para conseguir que todos los usuarios estn contentos.

En la actualidad Digium se centra en el desarrollo y mejora de la versin 1.6 mientras que la versin estable para produccin, la versin 1.4, slo recibe atenciones de soporte para las versiones comerciales.

Por otra parte las versiones 1.4.2X, las ltimas que sac Digium con la funcionalidad DAHDI ya implantada en vez de Zaptel, han resultado ser bastante decepcionantes en cuando a estabilidad.En la actualidad a pesar que Digium trabaja para estabilizar Asterisk 1.6 ,para produccin la versin 1.4 es la ms estable y recomendable.

Coincidencia de patrones

Los patrones permiten crear una extensin en su Dialplan que coincide con muchos nmeros diferentes.

Sintaxis:

Los patrones siempre empiezan con un guion bajo (_).

Despus puede utilizar uno o ms de los siguientes caracteres:

-7X : Coincide con cualquier digito del 0 al 9.-7Z : Coincide con cualquier digito del 1 al 9.

-7N : Coincide con cualquier digito del 2 al 9.

-7[1,5-7] : Coincide con un solo digito a partir de la serie de dgitos especificado. En este caso, el patrn coincide con 1, 5,6, o 7.

-7. (punto) : Comodn , coincide con uno o mas caracteres, no importa lo que son.

-7! (bang) : Comodn , coincide con cero o mas caracteres, no importa lo que son.

Esta expresin nunca _.De hecho, Asterisk le avisara si intenta volver a utilizarlo. En cambio, utilizar este si es posible: _X.

Para utilizar la concordancia mediante patrones en su Dialplan, simplemente poner el patrn en el lugar de la extensin (nombre o nmero):

exten => _NXX, 1, PLayback (thankyou) : Al marcar un nmero entre 200 y 999 se escucha el sonido de thankyou.gsm.

Otra cosa importante a saber acerca de patrones de Asterisk es que si se encuentra ms de un patron que coincida con lo pulsado, se utilizar el ms especifico.Supongamos que ha definido los siguientes dos modelos, y marca 555-1212 . exten => _555XXXX, 1, Playback (digitos / 1)exten => _55512XX, 1, Playback (digitos / 2)

En este caso, la segunda prorroga, porque es mas especifica.

Usando la variable de canal $ (EXTEN):

exten => _XXX, 1, SayDigits ($ {EXTEN}) ; la aplicacion SayDigits () muestra los 3;ltimos dgitos marcados.-7${EXTEN: x}

x es el lugar donde se desea que la cadena volvio a empezar, de izquierda a derecha.

EXTEN es 95551212${EXTEN:1} = 5.551.212

-7${EXTEN: x: y}x es el inicio , e y es el numero de dgitos a regresar. EXTEN es 94169671111$ {EXTEN:1:3} = 416.$ {EXTEN:4:7} = 9671111.$ {EXTEN:-4:4} = 1111 (comenzara cuatro dgitos desde el final).

Esta es una construccin muy potente, pero la mayora de estas variaciones no son muy comunes en uso normal.

Manipulacin de expresiones y operadores

Expresiones bsicas

Las expresiones son combinaciones de variables, operadores, y cadenas de valores para producir un resultado.

Una expresin puede mostrar valores, alterar las cadenas, o realizar clculos matemticos.

Cada una de estas expresiones tiene un resultado o valor, dependiendo del valor de las variables o las cadenas.

Sintaxis: $ [expresion] Ejemplos:$ [$ {COUNT}+ 1]$ [$ {COUNT} / 2]

Operadores

Smbolos que permiten manipular las variables.

Operadores booleanos

Estos operadores evalan si la expresin es cierta o no.

-7 expr1 | expr2: Este operador (llamado "or" o "pipe") devuelve 1 si la expr1 es verdadera (no es una cadena vaca ni cero). De lo contrario, devuelve la evaluacin de expr2.

-7expr1 & expr2: Este operador (llamado "and") devuelve 1 si las dos expresiones son verdaderas (es decir, ninguna expresin es cadena vaca o cero). De lo contrario, devuelve 0.

-7expr1 {=,>,> =, sip show peers*CLI>iax show peers

Buzones de voz (Voicemail)

Uno de los servicios ms interesantes de las PBX, Asterisk implementa un sistema de buzones de voz bastante flexible.Algunas caractersticas de este servicio:

-Ilimitados contenedores voicemail con proteccin de password, contenidos en carpetas.-Saludos diferentes para los estados busy y unavailable.-Saludos configurables.-Habilidad de asociar un telefono con varios voicemail's y un voicemail convarios telefonos.-Posibilidad de envio al correo electrnico con el archivo de sonido comoadjunto.

La configuracin se har en el archivo voicemail.conf (en /etc/asterisk/). Aqu deberemos definir los contextos y contenedores voicemail.

A continuacin vamos a ver una configuracin bsica.La configuracin avanzada se encuentra en el apartado Configuracin de Asterisk.

Creacin de mailbox

En el contexto de voicemail definimos diferentes mailbox cuya sintaxis es:

mailbox => password,name[,email[,pager_email[,options]]] En la que:mailbox: Este es el nmero de buzn. Por lo general, se corresponde con unaextensin.password: Esta es la contrasea numrica que el propietario del buzn usara para acceder a su buzn de voz.name: Este es el nombre del propietario del buzn.email: Esta es la direccin de correo electrnico del propietario del buzn.

Asterisk puede enviar notificaciones de voz a la casilla de correo.pager_email: Esta es la direccin de correo electrnico del pager o telfono celular. Asterisk puede enviar un breve mensaje de notificacin de voz a la direccin de correo electrnico especificada.options: Este campo es una lista de opciones que establece el propietario delbuzn de la zona horaria y redefiniciones de configuracin de voz. Hay nueve opciones validas: attach, serveremail, tz,ssaycid, review,operator, callback, dialout,y exitcontext. Estas opciones deben estar en pares option = value , separados por el carcter tubera (|).La opcin tz establece la zona horaria del usuario a una zona horaria previamente definida en el contexto [zonemesages] en voicemail.conf, y las otras ocho opciones son sobre el voicemail.

Un ejemplo de mailbox podra ser algo como esto:

101 => 1234,David,[email protected],tz=central|attach=yes

Aadir el voicemail al Dialplan

Para ello, vamos a utilizar VoiceMail().

VoiceMail() : aplicacin que enva al llamante un mensaje. El buzn debe ser especificado como mailbox@context (el contexto por defecto es default). Si se utiliza la letra b, la persona que llama escuchara el mensaje de ocupado. Si se usa la letra u, la persona que llama escuchar el mensaje de no disponible (si existe).

exten => 101,1,Dial(${JOHN},10) ; despus de 10 segundos pasa al voicemail exten => 101,n,VoiceMail(101@default,u)

Acceso al voicemail

Los usuarios pueden recuperar sus mensajes de correo de voz, cambiar sus opciones de voz, y grabar sus saludos de voz utilizando el VoiceMailMain().

exten => 700,1, VoiceMailMain() :accedes al buzon de voz del llamante.

Marcacin por nombre de directorio

Una ltima caracterstica del sistema de correo de voz de Asterisk es la de marcacin por nombre de directorio.

Esto se crea con Directory(). Esta aplicacin utiliza los nombres definidos en los mailbox de voicemail.conf .

Sintaxis: Directory (voicemailcontext,context,options)

-7 voicemailcontext: El contexto voicemail para leer los nombres.

-7 context: El contexto opcional del dialplan para llamar al usuario.-7 options: Por defecto se busca el usuario por apellido.Con la opcin f se busca por nombre. Con la opcin e se busca por extensin.

Se solicita al usuario que introduzca por teclado las 3 primeras letras del nombre/apellido/extension del empleado.

Audio en Asterisk

Reproduccin

El audio en Asterisk juega un papel importante. En el mundo de las PBX tradicionales es habitual que mientras el llamante no llega a su destino se le entretenga con musica en espera. Ademas la reproduccion de audio es necesaria para la construccion de sistemas IVR.

Asterisk, en su instalacion, facilita algunos sonidos comunes para, por ejemplo, el buzon de voz, o para notificar fallos de la red (el usuario no se encuentra, etc), aunque podemos llevar esto mucho mas alla, mediante Festival y otras aplicaciones.

Msica en Espera

Asterisk puede poner un canal dado en espera ('HOLD'), principalmente en las siguientes situaciones:-Durante una transferencia.-Durante una llamada si se ha especificado el parmetro 'm', que indica queno se oir tono de llamada sino msica en espera.-Durante una espera en el parking.-Si la aplicacin MusicOnHold o WaitMusicOnHold ha sido llamada desde elDialPlan.-Si el destino de la llamada ha solicitado explcitamente que la llamada seapuesta en espera.

Es posible tener distintos tipos de msica en espera.La msica en espera se configura en musiconhold.conf en /etc/asterisk/.La configuracin de este archivo se encuentra en el apartado Configuracin deAsterisk.

Aplicacin Festival

La aplicacin Festival en un TTS, es decir un sistema de sntesis de voz. Si queremos crear un men de voz, saludos de bienvenida, leer archivos de texto, entonces es que lo necesitamos.

Para que Festival se integre en Asterisk, antes de compilar la centralita tenemos que instalar dos paquetes:

yum install festival festival-devel

Para averiguar que el modulo de festival est correctamente cargado en asterisk, desde la consola de la centralita:

*CLI> module unload app_festival== unregistered application 'festival'

*CLI> module load app_festival== parsing '/etc/asterisk/festival.conf': == found== registered application 'festival'loaded app_festival => (simple festival interface)

Si aparece algn tipo de error significa que el modulo no ha sido compilado y tenemos que volver a la compilacin de Asterisk.

Festival tiene como idioma predefinido el ingles. Para agregarle el idioma espaol hay que seguir estos pasos:

cd /usr/share/festival/voiceswget http://www.voztovoice.org/tmp/festival-spanish.zip yum install unzipunzip festival-spanish.zip

Ahora modificamos el archivo de configuracin de festival nano /usr/share/festival/festival.scmaadimos estas lneas:

;(language__spanish)(set! voice_default 'voice_el_diphone)

(define (tts_textasterisk string mode) "(tts_textasterisk string mode)apply tts to string. this function is specifically designed foruse in server mode so a single function call may synthesize the string. this function name may be added to the server safe functions."(let ((wholeutt (utt.synth (eval (list 'utterance 'text string))))) (utt.wave.resample wholeutt 8000)(utt.wave.rescale wholeutt 5) (utt.send.wave.client wholeutt)))

Guardamos el archivo y modificamos el archivo de configuracin de festival en asterisk:

nano /etc/asterisk/festival.conf

estas son la lneas que hay que modificar/activar:

[general] host=localhost port=1314festivalcommand=(tts_textasterisk "%s" 'file)(quit)\n

Guardamos el archivo y reiniciamos Asterisk.Ahora vamos a aadir unas cuantas lneas en extensions.conf.nano /etc/asterisk/extensions.conf exten => 650,1,Answer()exten => 650,n,Festival(lo conseguiste!!!)exten => 650,n,Hangup()

Codecs y carga de CPU

En principio Asterisk puede reproducir de muchisimos codecs (GSM,G711,G729,MP3) y de archivos de audio sin codificar (WAV), siempre que nos sea posible deberiamos pasar cualquier archivo que queramos reproducir a WAV, pues decodificar es un trabajo que puede cargar mucho a la CPU con cada reproduccion. Aunque tambien es cierto que un archivo codificado ocupa bastante menos que uno que no lo est, pero sacrificamos espacio por cantidad de llamadas que pueden ser atendidas.

Qu uso se da de los Cdecs de audio en Asterisk?

Sirven para digitalizar la voz humana.Cuando dos dispositivos van a establecer una comunicacin, acuerdan el cdec a utilizar.

Factores importantes a la hora de seleccionar un cdec:

Calidad de audio. Coste computacional. Gasto de ancho de banda.

Comparacin de ancho de banda utilizado por los cdecs:

Cdec & Bit Rate (Kbps)Bandwidth Ethernet(Kbps)

G.711 (64 Kbps)87.2 Kbps

G.729 (8 Kbps)31.2 Kbps

G.723.1 (6.3 Kbps)21.9 Kbps

G.723.1 (5.3 Kbps)20.8 Kbps

G.726 (32 Kbps)55.2 Kbps

G.726 (24 Kbps)47.2 Kbps

G.728 (16 Kbps)31.5 Kbps

Los proveedores VoIP suelen trabajar en G.729, que consume muy poco ancho de banda y no sera viable utilizar G.711 por ejemplo. El cdec G.729 no es libre, cada licencia de G.729 para un canal es de 10$ pero hay una implementacin que puede utilizarse con fines no lucrativos o educacionales, tanto de este cdec como del G.723.1, en el siguiente enlace:

http://asterisk.hosting.lv/. Para comprobar cuntos codecs soporta Asterisk :*CLI> core show codecs audio

Para comprobar el coste de transcoding :

*CLI> core show translation

Asterisk no soporta por defecto la reproduccion de mp3, puedes activarla compilando el paquete de addons y activando el soporte para MP3, o instalando el paquete de tu distribucion.

Definir un idioma

Un idioma en Asterisk es un conjunto de sonidos colocados en el directorio de sonidos de Asterisk (revisa /etc/asterisk/asterisk.conf). Se puede definir un lenguaje enel archivo de configuracion del canal (por ejemplo sip.conf o iax.conf) o utilizandoSet(CHANNEL(language)=idioma) que cambia el idioma para la llamada en curso.

Esto permite que aplicaciones que reproducen sonidos, como Playback(), SayDigits() oSayNumber() puedan hacerlo en el idioma del llamante.

Es bastante comun definir un idioma global (espaol , por ejemplo) y para ciertos contextos, (entrantes-internacionales) ponerlo a un idioma ms apropiado como ingles.

Castellanizar Asterisk

Por defecto las voces que incluye Asterisk estn en Ingls, el lenguaje universal, pero a veces para la perfecta compresin de algunas de las diversas funcionalidades de Asterisk, como el buzn de voz, es necesario tener las voces en Castellano.Con estos sencillos pasos lo conseguiremos:

Aadir lo siguiente al fichero asterisk.conf (en /etc/asterisk/): [options]

languageprefix = yes

Incluir la lnea language=es en los ficheros de configuracin. (sip.conf, iax.conf, extensions.conf, voicemail.conf,...,diposnibles en /etc/asterisk/).

Editar el fichero indications.conf, poniendo country=es. Ficheros de sonido en castellano:-http://www.voipnovatos.es/voces/-Descargamos en formato gsm, alaw, g729, ...-Editar rbol de directorios (todo cuelga de es)-Copiar a /var/lib/asterisk/sounds/es/

Grabacin

Para la grabacin no hace falta ninguna aplicacin especial, podramos coger cualquier aplicacin de audio como Audacity o una grabadora de sonidos. No obstante, Asterisk incorpora una serie de aplicaciones para la grabacin en el sistema telefnico. Esto puede utilizarse para crear una macro que reproduzca un mensaje de bienvenida personalizado por el usuario.

Aplicacin para la grabacin

La aplicacion Record() graba en un archivo la voz del llamante.Sintaxis: Record(nombre.formato[,silencio,duracion_maxima,opciones]) Podemos utilizar %d en el nombre del fichero, as se utilizar un ndice auto-incremental, para no sobrescribir grabaciones. El nombre del fichero queda guardado en la variable ${RECORDED_FILE}.exten => ext1,n,Record(sonido-asterisk%d.alaw) Legalidad en la grabacin de llamadas

La legislacin actual en Espaa determina que:

Es ilegal grabar o escuchar una conversacin en la que uno no es parte, y los dems desconocen la grabacin o escucha.Es legal grabar una conversacin en la que uno es parte, pero es ilegal facilitar esa grabacin a un tercero que no haya sido autorizado por los que participaron en la conversacin.

El Tribunal Constitucional lo deja bien claro en su sentencia del 29 de Noviembre de1984,STC 11/1984,cuando establece, entre otras consideraciones que:

Quien graba una conversacin de otros atenta, independientemente de toda otra consideracin, al derecho reconocido en el art. 18.3 CE; por el contrario, quien graba una conversacin con otro no incurre, por este solo hecho , en conducta contraria al precepto constitucional citado.

Si uno no es parte en la conversacin estar vulnerando un derecho fundamental, reconocido en el artculo 18.3 de la Constitucin, pero quien graba las palabras que un tercero le dirige no est realizando por ese slo hecho ilcito alguno. Cuestindiferente sera si esa conversacin se divulga y la intromisin que pueda suponer en la esfera de la persona cuyas palabras se han recogido.

Para las grabaciones ajenas, el Cdigo Penal castiga con prisin de uno a cuatro aos y multa de doce a veinticuatro meses. El artculo 197 castiga a quien para descubrir los secretos o vulnerar la intimidad de otro, sin su consentimiento, utilice artificios tcnicos de escucha, transmisin, grabacin o reproduccin del sonido o de la imagen, o de cualquier otra seal de comunicacin.

Se plantearon a la Agencia Espaola de Proteccin de Datos diversas cuestiones relacionadas con la recopilacin por parte de una empresa de diversos registros devoz, con la finalidad de elaborar un programa de Software de reconocimiento de voz. La recopilacin tendra lugar mediante la realizacin de llamadas telefnicasefectuadas desde un Estado miembro de la Unin Europea.

En relacin con esta cuestin, se considera que siempre que quien haya de realizar el tratamiento tenga conocimiento directo o indirecto de quin es la persona cuya voz est siendo objeto de grabacin, as como de su nmero de telfono, la grabacin efectuada tendr la naturaleza de dato de carcter personal y el tratamiento efectuado estar sometido a la normativa de proteccin de datos ,al incorporarse al mismo los datos identificativos del sujeto (nombre y apellidos), su nmero de telfonoy su voz, conforme a lo dispuesto en el artculo 3.a) de la LOPD y el artculo 1.4 del Real Decreto 1332/1994, del 20 de Junio, que indica que dichos datos podrn proceder de informacin acstica.

Macros

Las macros son una herramienta excelente para ahorrarte repeticin de cdigo, y facilidad de cambio y adaptacin para tu Dialplan.

Si tuviera que repetir para un centenar de usuarios las lneas siguientes supondra una gran cantidad de copy/paste. Sera ms sencillo un cambio en la manera en que trabaja las extensiones.exten => 101,1,Dial(${JOHN},10)exten => 101,n,VoiceMail(101@default)exten => 101,n,Hangup().Puede definir una macro que contiene una lista de pasos a seguir. Todo lo que necesita para el cambio es la macro, y las referencias. Si est familiarizado con la programacin,

usted reconocer que las macros son similares a las subrutinas en muchos lenguajes de programacin modernos.

Definicin de macros

Los contextos de toda macro deben ser [macro-nombreMacro]. Esto les distingue de los contextos ordinarios y facilita su llamada.Los comandos de la macro se construyen casi igual a cualquier otra cosa en el Dialplan, el nico factor limitante es que solo se usan en la extensin s.

Llamadas a macros

Para utilizar una macro en nuestro dialplan, utilizamos Macro() . exten => 101,1, Macro (nombreMacro)Macro () define varias variables especiales para nuestro uso. Son:

${MACRO_CONTEXT}: El contexto original en el que se llama a la macro.${MACRO_EXTEN}: La extensin original en la que se llama a la macro.${MACRO_PRIORITY}: La prioridad inicial en el que se llama a la macro.${ARG n }: El ensimo argumento pasado a la macro . Aplicando al ejemplo:

exten => 101,1, Macro (voicemail) [macro-voicemail]exten => s,1,Dial(${JOHN},10)exten => s,n,VoiceMail(${MACRO_EXTEN}@default)exten => s,n,Hangup()

Si todo el que llame va a realizar la llamada a travs del mismo canal y extensin que define la variable JOHN ya hemos terminado sino es necesario el uso de argumentos.

Utilizacin de argumentos en macros

Vamos a pasar el canal como argumento:exten => 101,1,Macro(voicemail,${JOHN}) [macro-voicemail]exten => s,1,Dial(${ARG1},10)exten => s,n,VoiceMail(${MACRO_EXTEN}@default)exten => s,n,Hangup()

Uso de la base de datos de Asterisk (AstDB)

Asterisk proporciona un poderoso mecanismo para el almacenamiento de valores de llamada con el uso de una base de datos interna llamada AstDB. Esta no es una relacional tradicional, como MySQL, SQLServer y otras, es del tipo Berkeley DB Version 1.

Nos puede ser de utilidad para sistemas pequeos.

Existen dos entidades: familias(Families) y llaves(Keys), cada key esta asociada a unaFamily, si un Key toma un valor nuevo, el anterior es superpuesto por este nuevo valor.

Almacenamiento de datos en AstDB

Para almacenar un nuevo valor en la base de datos de Asterisk, utilizamos la aplicacin Set(), pero en lugar de usarlo para establecer un canal de la variable, la usamos para definir una variable AstDB.

Para asignar la clave count en la familia test con el valor 1:

exten => 456,1,Set(DB(test/count)=1)

Tambin puede guardar los valores de Asterisk con la lnea de comandos CLI, ejecutando el comando database poniendo el valor de la clave de la familia.

*CLI>database put family key value.*CLI>database put test count 1

Recuperacin de datos de AstDB

Para recuperar un valor de AstDB y asignarlo a una variable, usamos la aplicacin Set () de nuevo. Vamos a recuperar el valor de count de la familia test,asignando a una variable llamada COUNT y, a continuacin, decimos el valor:

exten => 456,n,Set(COUNT=${DB(test/count)})exten => 456,n,SayNumber(${COUNT})

Tambin puede comprobar el valor de una clave desde la lnea de comandos deAsterisk utilizando el comando:

database get family key database get test key

Para ver todo el contenido de AstDB, se utiliza el comando:

database show

139Borrado de datos de AstDB

Hay dos maneras de borrar los datos de la base de datos de Asterisk. Borrar solo la llave devolviendo su valor antes de eliminarla: DB_DELETE().exten => 457,1,Set(COUNT= ${DB_DELETE(test/count)}) En el CLI : *CLI>database del keyBorrar la familia y la clave: DBdeltree(family).

exten => 457,1, DBdeltree(test)

En el CLI:*CLI>database deltree family .

Transferencias de llamadas

La configuracin de la transferencia de llamadas entre diversos usuarios, independientemente de la tecnologa que usen se realiza en el archivo features.conf en /etc/asterisk/.

Hay que especificar en dicho archivo las siguientes caractersticas:

blindxfer => secuencia : Permite realizar una transferencia de llamada a ciegas marcando la secuencia.atxfer => secuencia : Permite realizar una transferencia de llamada atendida.El origen es puesto en espera, mientras el destino se comunica con el nuevo destino para anunciarle la llamada. Si el nuevo destino cuelga, la llamada no se transfiere.pickupexten => secuencia : Especifica la secuencia a marcar para coger una llamada de alguien del mismo callgroup.Para poder realizar transferencias va PBX, Asterisk debe estar a la escucha de lostonos configurados, para ello la aplicacin Dial debe haber recibido como parmetro 't' para permitir la transferencia en destino o 'T' para hacerlo en origen (o ambas).

CallParking

El callparking o aparcamiento de llamadas es una funcionalidad que permite transferir la llamada a un 'parking' virtual. Pudiendo colgar sin que la llamada origen sea desconectada de Asterisk, ya que se encontrar aparcada.

Para operar, el usuario transfiere la llamada a una extensin especial (parkext en features.conf), Asterisk aparca la llamada y anuncia la posicin en el parking.

Cualquier usuario que tenga incluido en su contexto el contexto especial 'parkedcalls' puede recuperar la llamada aparcada llamando directamente a su posicin en el parking.

Los parmetros para el callparking son controlados con la configuracin del features.conf. En el contexto [general] del features.conf hay 4 caracteristicas relacionadas con el callparking:

parkext: Esta es la extensin del parking. Al transferir una llamada a esta extensin se llama a la posicin determinada del aparcamiento .Por defecto es700.

parkpos: Esta opcin define el nmero de aparcamientos. Por ejemplo, entre701-720 crea 20 aparcamientos numeradas del 701 al 720.

context: Este es el nombre del contexto del aparcamiento.Para poder aparcar llamadas, debe incluir este contexto.

parkingtime: Si se establece, esta opcin controla el tiempo(en segundos) que una llamada puede permanecer en el aparcamiento. Si la llamada no est recogida en el tiempo especificado, se llama de nuevo.

Es necesario reiniciar (restart) Asterisk no vale con hacer reload.

Tambin es necesario que el usuario sea capaz de transferir las llamadas a la extensin del parking, debe estar seguro de la utilizacin de la "t" y / o T del Dial().Ejemplo: extensions.conf [incoming]include => parkedcallsexten => 103,1,Dial(SIP/Pedro,,tT)exten => 104,1,Dial(SIP/John,,tT)

features.conf

[general] parkext => 700 parkpos => 701 context => parkedcalls parkingtime => 120

[featuremap] blindxfer => # disconnect => *

atxfer => *2 parkcall => *7

Para visualizar estos datos desde la linea de commandos CLI:

*CLI> show parkedcalls

Para ilustrar como usar el Call Parking, supongamos que David marca la extensin 103 para hablar con Pedro. Despus de un tiempo, Pedro transfiere la llamada a la extensin 700 aparcando la llamada de David en la posicin 701. Pedro marca la extensin 104 para llamar a John , y le dice que el que la llamada de David se encuentra en la extensin 701. John entonces marca de extensin 701 y comienza a hablar David.

CallPickup

CallPickup es la auto-transferencia de un telfono que esta sonando, en otras palabras, el hecho de poder descolgar y responder a la llamada entrante a un telfono o grupode telfonos determinado desde un tercer telfono que no est sonando.

La configuracin para el 'Callpickup' se configura en features.conf. En cada usuario de la centralita se definen estos dos parmetros:

callgroup: Toda llamada que entra a una extensin determinada pertenece al/los callgroups de la extensin.

pickupgroup: Es el/los callgroups de llamadas entrantes en los que el usuario puede hacer 'pickup'.

Hay dos tipos de callpickup:

-Group callpickup: Permite que descuelgues cualquier llamada de alguien de mismo grupo que tu. Para utilizar esta funcionalidad la secuencia a marcar suele ser *8# o *8.

-Directed pickup: Permite que descolgar una llamada segn una extensin especifica, suena el telefono y si descuelgas y marcas una secuencia ms tu extensin se transfiere la llamada a tu extensin.

Ejemplo:

features.conf

[general]. pickupexten=*8

sip.conf

[100] ; 100 puede coger llamadas de 101 ya que pickupgroup abarca el; callgroup de 101 callgroup=1 pickupgroup=1-3

[101] ;101 tambien puede coger llamadas de 100. callgroup=2 pickupgroup=1

Para ver estos datos desde el CLI:

*CLI>feature show

Manejo de Colas

Una llamada entrante puede ser enviada a una cola de llamadas, que ser distribuida entre los agentes disponibles, miembros que contestan las llamadas.

Las colas se utilizan mucho en entornos tipo 'Call Center', con los canales tipo deAgente (que hacen 'login en el sistema'). El sistema de colas se compone de:-Llamadas entrantes que son ubicadas en una cola.

-Miembros que contestan las llamadas en la cola

-Una estrategia sobre cmo manejar la cola y repartir las llamadas entre los miembros.

-Msica que se reproduce durante la espera en la cola. La configuracin de las colas se define:-Estticamente: en el archivo queues.conf

-Dinmicamente: la configuracin se almacena en una BD, disponibilizando los cambios sin necesidad de realizar un reload.

La configuracin de los agentes se define en el archivo agents.conf. Los agentes atienden las llamadas de una cola especfica.Un agente debe realizar un login (llamando a una extensin especial que contiene la aplicacin AgentLogin()) indicando que est listo para tomar llamadas. Tambin existe

el concepto de agente dinmico por si cualquier usuario quiere agregarse a una cola. Para esto se utilizan las aplicaciones AddQueueMember() y RemoveQueueMember(). Los miembros son aquellos canales disponibles que estn activamente atendiendo la cola. Pueden ser tanto agentes como tambin canales regulares (SIP/105).Las llamadas son distribuidas entre los miembros de una cola siguiendo alguna de lassiguientes estrategias:

-ringall: hace sonar todos los canales disponibles hasta que alguno responda (configuracin por defecto).

-roundrobin: hace sonar cada agente disponible por turnos.

-leastrecent: hace sonar el agente que es menos recientemente llamado por esta cola.

-fewestcalls: hace sonar el agente con la menor cantidad de llamadas completas.

-random: hace sonar una interfaz al azar.

-rrmemory: igual que el round robin pero recuerda cual fue el ltimo telfono que atendi una llamada y contina con el siguiente.

Cada agente tiene lo denominado Penalty(penalidad) de manera que se derivan las llamadas (segn la estrategia definida) a los agentes con el menor valor de penalidad. En el caso de estar todos ocupados, se contina con la siguiente penalty y as sucesivamente.

Para establecer esto en los agentes estaticos en queues.conf:

member => SIP/3000,1 member => SIP/3001,2

Si hay agentes dinamicos ellos tienen penalidad 1, a no ser que se les asigne otra al agregarse a la cola:

exten => 888,1,AddQueueMember(davidqueue||3) ;penalidad 3

Si se asignan a dos agentes la misma penalidad sonarian los dos si hay una llamada. Tambin es posible asignar a cada llamada entrante una Priority(prioridad) permitiendo situarla en un lugar ms adelante de la cola (no siempre al final), por ejemplo si es un cliente importante adelantarle en la cola. Por defecto todas tienen prioridad 0 (estrategia FIFO (First In First Out)).

Si queremos que cierta llamada sea adelantada en la cola deberemos modificar la variable de prioridad , QUEUE_PRIO.

exten => 101,1,Playback(bienvenido) exten =>101,n,SetVar(QUEUE_PRIO=10) exten =>101,n,Queue(davidqueue)

Es posible que un miembro de una cola en determinado momento quiera no responder llamadas de esta, esto es posible hacerlo de dos formas:

Con las aplicaciones de Pausa:

exten => 333,1,PauseQueueMember(davidqueue|SIP/100)exten => 334,n,UnpauseQueueMember(davidqueue|SIP/100)

Opcion de TimeOut : Cuando no se contexta una llamada se entra en pausa automaticamente (poniendo en el contexto de la cola autopause=yes).

Las aplicaciones principales relacionadas con las colas, utilizadas en extensions.conf:

-Queue(): aplicacin utilizada para encolar una llamada (toma como parmetro las colas definidas en queue.conf).

exten => 1234,n,Queue(ventas|t|||45|)

-AddQueueMember(cola): agrega dinmicamente un miembro a la cola.

-RemoveQueueMember(cola): remueve dinmicamente un miembro de la cola.

-PauseQueueMember(cola|miembro): Pone en pausa al miembro en la cola.

-UnpauseQueueMember(cola|miembro) : Reactiva al miembro en la cola.

-AgentLogin(): login de un agente a una cola. Comandos relacionados de la CLI:

Mostrar los agentes :

*CLI>show agents

Lista de todas las colas:

*CLI>show queues

Muestra los datos de una cola en particular:

*CLI>show queue nombrecola

Agrega un miembro a la cola:

*CLI>queue add member nombremiembro

Elimina un miembro de la cola :

*CLI>queue remove member nombremiembroUn ejemplo del archivo queues.conf con una cola definida es: [general];Si usamos agentes dinamicos su configuracin se guardara en la BD deAsterisk. De ;esta forma si Asterisk se vuelve a arrancar , cada agente ser;enrutado a su ;correspondiente cola. persistentmembers=yes;Para mantener las estadsticas en la cola durante un reloadkeepstats=no

[davidqueue] music=default strategy=ringalltimeout=15 ;tiempo maximo de ringretry=5 ;tiempo de espera para intentar con otro miembro wrapuptime=0 ;tiempo de espera tras intentar con todos los miembros member => SIP /100,1

Algunas de las variables para obtener informacin de las colas son:

QUEUE_MEMBER_COUNT(queue) : n de miembros de una colaexten => 3001,1,Set(NUM = ${QUEUE_MEMBER_COUNT(davidqueue)})exten =>3001,n,SayNumber(${NUM})

QUEUE_MEMBER_LIST(queue) :guarda los nombres de los miembros de la cola exten =>4001,1,Set(MEM=${QUEUE_MEMBER_LIST(davidqueue)})exten =>4001,n,NoOp(MEM=${MEM})

QUEUE_WAITING_COUNT(queue): n de personas esperando en la cola exten =>5001,1,Set(ESP=${QUEUE_WAITING_COUNT(davidqueue)}) exten =>5001,n,SayNumber(${ESP})

Registro de llamadas(CDR)

Asterisk permite llevar un control exhaustivo de todas las llamadas que se han realizado o recibido. Este control es interesante para el propio control de facturacin,

independientemente del proveedor y adems permite realizar estadsticas. Dicho control se denomina CDR(Call Detail Record).

El registro del CDR se escribe por defecto en el archivo:

/var/log/asterisk/cdr-csv/Master.csv

Tambien es posible almacenar los registros en una base de datos MySQL configurando el archivo cdr_mysql.conf en /etc/asterisk/, para configurar el CDR se hace en cdr.conf en la misma carpeta.

Para confirmar el estado del CDR desde el CLI, se puede ejecutar:

*CLI> cdr status

Algunos de los campos ms importantes son:

accountcode: cdigo de la cuenta a utilizar.src: nmero del caller ID. dst: extensin destino. dcontext: contexto destino.start: comienzo de la llamada (fecha/hora).answer: respuesta de la llamada (fecha/hora).end: fin de la llamada (fecha/hora).duration: duracin de la llamada en segundos, desde que fue discada hasta el corte.billsec: duracin de la llamada en segundos, desde que fue atendida hasta el corte.disposition: estado de la llamada (atendida, no atentendida, ocupado, fallida).

Existen muchas aplicaciones que permite gestionar el CDR. Desarrollar una propia no es realmente muy complejo. Para la aplicacin se utilizar Asternic CDR Reports de Nicols Gudio.

Sala de conferencias

Una conferencia en Asterisk permite que varias personas estn incluidas en una misma conversacin, Asterisk trabaja esto de una manera fcil y flexible mediante las Aplicaciones MeetMe (conferencia,opciones,password) para crear conferencias y para contar los participantes MeetMeCount(conferencia,variable_contador).

Algunas de las cosas que se pueden hacer en conferencias son: Crear passwords para salas de conferencias.

Tipos de conferencia (mute conference, lock conference, kick partipants).

Posibilidad de silenciar a todos los particintes menos a uno, til en caso de discursos de entrada o mensajes importantes.

Creacin de conferencias estticas o dinmicas. Se puede limitar el nmero de participantes.Las opciones de configuracin para el sistema de MeetMe se encuentran en meetme.conf en la carpeta /etc/asterisk/.

Dentro de la configuracin, hay que establecer las salas de conferencias y definir un nmero opcional de contraseas. (Si una contrasea esta definida aqu, ser necesaria para acceder a esta sala para toda la conferencia).Definimos la sala de conferencias en la extensin 600 (en meetme.conf): [roms]conf => 600

Creamos una simple sala de conferencias utilizando la extensin 600,la opcin i (que anuncia cuando la gente entra y sale de la conferencia), y una contrasea de 54321 en extensions.conf:

exten => 600,1, MeetMe (600, i, 54321)

Si usted pasa una variable como segundo argumento para MeetMeCount(), el numero de participantes se asigna a la variable, y la reproduccin de estos cada vez que se aade uno se omite. Usted puede usar esto para limitar el nmero de participantes, de esta forma:; Limitar la sala de conferencias para 10 participantesexten => 600,1,MeetMeCount(600,CONFCOUNT)exten => 600,n,GotoIf($[${CONFCOUNT} 600,n(meetme),MeetMe(600,i,54321)exten => conf_full,1,Playback(conf-full)

IVR (Interactive Voice Response)

IVR es el nombre de la tecnologa que permite interactuar con un men de voz utilizando un telfono.

Es relativamente fcil y sencillo, configurar un men de ese tipo en Asterisk.

Una vez hechas varias grabaciones de mensajes con la aplicacin Record() como hemos comentado y haberlas guardado estos en /var/lib/asterisk/sounds/ se puede comenzar a configurar el IVR en extensions.conf.

Las ventajas que proporciona el sistema no reside solamente en la reduccin de costes y en el incremento de la eficiencia del CallCenter sino que tambin:

Y Ayuda a reducir los turnos de los operadores y sus costes asociados.Y Incrementa las horas de servicio.Y Disminuye la tasa de llamadas perdidas.Y Incrementa la disponibilidad de los operadores.Y Proporciona una tasa de re-direccionamiento solucionando un mayor nmero de primeras llamadas.Y Mejora la flexibilidad para responder a las necesidades del cliente o a picos de llamadas.

El 95% del xito del diseo de los sistemas IVR de Asterisk se basa en trabajar junto al cliente desarrollando casos de uso consistentes y probar (y rehacer) prototipos con usuarios finales "reales" (a los cuales, incluidos nosotros mismos, les fastidia "hablar" con una maquina). Si la transaccin promedio es corta y amigable, la ventaja frente al acceso Web es que no todos tienen Internet en todo momento, aunque si un telfono.

El 5% restante es solo programacin. Principales errores de "ergonoma":Y Mens demasiado largos.Y Los usuarios se pierden o no encuentran lo que necesitan.Y No comprenden cmo usar el sistema.Y Lgica confusa y "callejones sin salida".Y Suponer que el usuario conoce la "jerga" del negocio. Principales errores de diseo:Y Ineficiente recuperacin ante fallos.Y Falta de canales de atencin suficientes.Y Carencia de una salida hacia un operador humano. Resumen de algunos principios generales:Y Los mens no tienen que reproducir la estructura organizativa o departamental de la empresa.Y Si el servicio tiene alguna restriccin, es preciso avisar al usuario antes de nada. Por ejemplo, en un servicio de compra de tarjetas de llamadas prepago, si se requiere que el usuario sea cliente, es preciso avisarle antes de nada.Y Proporcionar solo la informacin que se necesita y de la forma ms simple posible.Y Disear para la mayora de los usuarios evitando que tengan que recorrer opciones que solo interesan a unos pocos.

147Y Hacer que el sistema trabaje por el usuario, por ejemplo, no pidiendo el mismo dato varias veces y evitando preguntar informacin que el sistema puede conocer.Y Ser consistente y no cambiar a menudo las opciones de los mens.

Saludo inicial:

Y Debe haber una bienvenida breve: buenos das, buenas tardes...Y No repetirlo si en algn momento el usuario vuelve al inicio. Es preciso evitar:Y Mensajes promocionales: poner solo si el usuario los puede encontrar justificados y, sobretodo, han de ser breves permitiendo acceder a la informacin en aquel mismo momento.Y Tener que pulsar la tecla * para saber si el terminal es de tonos (DTMF)o no.Y Remitir al usuario a otro servicio. Men principal:Y El primer men debe ser el principal a no ser que se tenga que pedirse identificacin.Y Mximo 20 segundos de duracin total contando el saludo inicial y el men principal.

Identificacin:

Y Pedir identificacin slo cuando sea necesaria.Y Pedir el identificador ms fcil de recordar: telfono, DNI...Y Gestionar el final de la entrada de datos por medio de timeout, no solicitar ningn tecleo adicional.

Las opciones de navegacin recomendables son:

Y Volver atrs.Y Men principal.Y Repetir.Y Ayuda (si lo necesita la aplicacin).Y Si existe una opcin de paso al operador, debe ser la ltima.Y No hay que cortar nunca la comunicacin si el usuario se equivoca. Es preciso dar caminos alternativos.Y Ordenar las opciones de las ms especficas a las mas generales. Preguntas Si/No:Y Se usan para recuperar errores y para confirmar acciones.

Y Tienen que ser preguntas directas que induzcan a decir de forma natural solo Si o No:Incorrecto: Por favor, confirme si su DNI es: XXXXXXXX Correcto: DNI: XXXXXXXX. Es correcto?

Y Debe ser una nica pregunta, no dos en una.Y Si adems de la pregunta hay texto informativo, poner la pregunta al final de la frase. Ejemplo: Para obtener ms informacin sobre las condiciones del contrato, desea que pase la llamada a un agente?.

Discado automtico (Auto-dial out)

Los Call Files (.call) se utilizan para iniciar llamadas desde una aplicacin externa. Son archivos de texto que al copiarse en el directorio /var/spool/asterisk/outgoing, Asterisk notar su presencia e inmediatamente activar la extensin en la prioridad especificada en el archivo .call. Generalmente, se combinan con el programador de tareas de Linux: el cron.Algunos ejemplos de uso son: soluciones de callback, despertador telefnico, anuncios automticos.

La estructura de un Call File es la siguiente:

Channel: ; La extensin que queremos llamar.

Callerid: ; El identificativo de llamada que queremos enviar a la;extensin llamada.

WaitTime: ; Cuantos segundos esperamos antes de considerar la;llamada sin xito.

Maxretries: ; Numero de veces que intentaremos llamar la;extensin

RetryTime: ; Cuantos segundos debe esperar asterisk para volver a; marcar

Account: ; El nombre de la cuenta con la cual queremos grabar; esta llamada (CDR)

Una vez que la extensin llamada conteste tenemos que decirle a asterisk lo que tiene que hacer. Esto tambin se define en el mismo archivo. Hay dos opciones:

Ejecutar una aplicacin:

Application: ; la aplicacin que queremos utilizar

Data: ; aqu podemos definir las opciones de la aplicacin

Ejecutar un punto exacto del plan de llamadas (Dialplan):

Context: ; El contexto en el dial plan

Extension: ; La extensin que queremos usar en el contexto; especificado.

Priority: ; El numero de la prioridad o la etiqueta si definida

Setvar: ; Variables que se pueden necesitar en el; contexto, extensin y prioridad que definimos.

Ejemplo:

En el siguiente ejemplo: se llama al 43424444 en el canal SIP y enva la llamada al contexto [mensajes-salida], extensin 84, Prioridad 1:-Archivo mensaje.call

Channel: SIP/43424444MaxRetries: 2RetryTime: 60WaitTime: 30Context: mensajes-salidaExtension: 84Priority: 1

-extensions.conf

[mensajes-salida]exten => 84,1,Playback(anuncio) exten => 84,2,Playback(vm-goodbye) exten => 84,3,Hangup

Sistema de logs

En el archivo /etc/asterisk/logger.conf se encuentra la configuracin del sistema de logging de Asterisk.

Los distintos niveles de informacin a capturar en los logs son:

Verbose: mensajes generales sobre lo que est ocurriendo en el sistema (por ejemplo si el valor de verbosity es mayor a 3, muestra las instrucciones del plan de marcacin).Debug: mensajes con informacin extendida, en general utilizados porprogramadores.Notice: notificaciones no crticas.Warning: mensajes de alerta posiblemente crticos.

Error: mensajes indicando que ocurri algo grave.

En el contexto [logfiles] del archivo logger.conf se indican los archivos y mensajes a loguear en c/u, la sintaxis es: archivo => nivel1,...,nivelnLos archivos de log se crean por defecto en /var/log/asterisk/ (esto se puede cambiar/etc/asterisk/asterisk.conf).

Ejemplos:

debug => debugfull => notice,warning,error,debug,verbose

Para enviar a la consola, hay que definir el archivo especial console:

console => notice,warning,error,debug

Tambin se pueden enviar al syslog:

syslog.local0 => debug, warning, error, notice, verbose

Configurando adems en /etc/syslog.conf:

local0.*@ip_servidor

Los comandos relacionados con el manejo del log en el CLI son:

Reabre los archivos de log del Asterisk y recarga la configuracin del logger:

*CLI>logger reload

Rota los archivos de log y luego hace un logger reload.

*CLI>logger rtate

Cambia el nivel de informacin a mostrar en la consola. Por ej.: set verbose 999

*CLI>core set verbose

ENUM y Asterisk

ENUM (proviene de tElephone Number Mapping) o mapeo de nmeros telefnicos, est constituido por una serie de protocolos que permiten crear una convergencia entre la red telefnica tradicional y Internet. Permite asociar (utilizando el protocolo DNS) un nmero telefnico a todas una serie de servicios tpicos de la red internet (VoIP, correo electrnico, pagina web, etc.).

Cmo funciona?

Se ha creado una nueva jerarqua de dominios bajo el DNS e164.ARPA donde se almacenan los servicios asociados a un determinado numero telefnico.

Un ejemplo:

+5712345678 -7 8.7.6.5.4.3.2.1.7.5.e164.arpa

El servidor DNS (Name Authority Pointer o NAPTR) que alberga la entrada, tiene registrados los servicios (sip, mail, http) publicados para dicho nmero.Ejemplo de entrada en Bind:

$ORIGIN 8.7.6.5.4.3.2.1.7.5.E164.ARPA.IN NAPTR 100 10 "U" "E2U+SIP" "!^.*$!SIP:[email protected]!" IN NAPTR 102 10 "U" "E2U+MAILTO" "!^.*$!MAILTO:[email protected]!"

Prioridad 1: contactar va SIP con [email protected]. Prioridad 2: contactar por correo con [email protected].

Como queda claro a travs de este ejemplo una vez que tengamos estos datos podremos usarlos en nuestra centralita. Llamar directamente la SIP URI en lugar del nmero telefnico (ahorrando los costos de llamadas) o enviar un correo electrnico.

Ejemplo:

Llamada desde un telfono IP al +34944991234

1) Consulta del telfono al servidor DNS sobre la direccin

4.3.2.1.9.9.4.4.9.4.3.e164.arpa

2) El DNS responde:

sip:[email protected] mailto:[email protected]

3) El telfono llama a sip:[email protected]

Si queremos hacer una prueba podemos registrar nuestro nmero telefnico y asociarlo a distintos servicios Internet a travs de E164.org, un directorio ENUM publico.

Utilizacin de ENUM en Asterisk:Primero tenemos que modificar el fichero enum.conf. [general]search => e164.arpa

search => e164.org h323driver => H323

Ponemos estas lneas que nos permitirn hacer bsqueda en la jerarqua DNSe164.arpa y e164.org.

Guardamos los cambios y echamos una mirada a las funciones disponibles enAsterisk para hacer consultas a estos DNS:

ENUMLOOKUP: nos permite hacer una consulta de los registros NAPTRasociados a un determinado nmero telefnico.

ENUMQUERY: nos permite hacer una consulta de los registros NAPTR pero, al contrario de ENUMLOOKUP generar como resultado un ID que luego podremos usar con la funcin ENUMRESULT.

ENUMRESULT: permite consultar los resultados generados por ENUMQUERYusando el ID creado por ENUMQUERY.

Ejemplo:

Vamos a construir nuestro plan de llamadas de modo que antes de llamar cualquier nmero (nacional o internacional) haga una consulta en ENUM para ver si es posible usar una SIP URI en lugar del nmero telefnico:

exten => _00.,1,Set(Enum1=${ENUMLOOKUP(+${EXTEN:2},sip,c)}|counter=0)exten => _00.,2,GotoIf($["${counter}" _00.,3,Set(counter=$[${counter}+1])exten => _00.,4,Dial(SIP/${ENUMLOOKUP(+${EXTEN:2},sip,,${counter})})exten => _00.,5,GotoIf($["${counter}" _00.,6,Dial(SIP/MyproveedorVoIP/${EXTEN}) exten => _00.,7,Hangup

DUNDI

DUNDi es un sistema peer-to-peer que permite localizar gateways para servicios telefnicos. A diferencia de los servicios centralizados tradicionales (como ENUM), es totalmente distribuido. No es en s un protocolo VoIP de sealizacin.DUNDi se puede utilizar dentro de una empresa para crear una completa PBX federada con ningn punto de fracaso, y la posibilidad de aadir nuevas extensiones arbitrariamente.

Diagrama DUNDI:

Hay tres archivos que necesitan ser configurados para DUNDi: dundi.conf, extensions.conf, y iax.conf. El archivo dundi.conf controla la autentificacin de los compaeros que nos permiten realizar bsquedas a travs de nuestro sistema. Dado que es posible ejecutar varias redes diferentes en la misma caja, es necesario definir una seccin diferente para cada interlocutor, a continuacin, configurar las redes de pares en el que se permiten realizar bsquedas. Adems, tenemos que definir los compaeros que desea utilizar para realizar bsquedas.

Configuracion del archivo dundi.conf:

[general]; puerto mediante el cual se comunica el protocolo dundi. port=4520; identificador de mi Asterisk en la nube dundi, se recomienda sea la MAC de la; tarjeta de red eth0. entityid=00:0C:29:0C:AB:C2; Tiempo que permanece en cache la ruta para ir a las extensiones aprendidas ;; mediante dundi . cachetime=5; Mximo nmero de saltos que se harn buscando el destino dentro de la red ;; dundi . ttl=12; si al preguntar a un par, el ACK tarda ms de 2 segundos, se cancela la;bsqueda a travs de ese peer; es ;til cuando no est activo el peer o cuando;hay una conexin ;mala hacia el peer autokill=yes

Publicacin de mis nmeros en la red dundi (contextos dundi):

Los contextos en esta seccin se enlazan con los contextos deextensions.conf.

El contexto referenciado de extensions.conf es donde se controla qu numeros se publican en la red dundi.

Al configurar un peer con el que nos vamos a enlazar, se puede determinar a cuales de los mapas puede tener acceso el peer.

Contextos dundi:

nombre_contexto => contexto_extensions,peso,proto,destino[,opciones]] nombre_contexto: Nombre del contexto al que se hace referencia en una peticin dundi.contexto_extensions. Nombre del contexto en el extensions.conf, donde se buscarn los nmeros que son solicitados en la nube dundi.peso. Deber ser 0 en caso de que nuestro conmutador publique directamente los nmeros, en caso contrario, deber tener el valor del nmero de saltos que necesita para llevar al destino.proto. Cualquiera de los protocolos IP (sip, iax,323) con el cual el peer remoto se debe comunicar con nosotros.destino. Es la informacin que se entrega al peer para que pueda llegar al nmero que est marcando.opciones. Pueden ser varios argumentos los cuales indican el comportamiento que se tendr cuando no tengamos nosotros el nmero que se est solicitando.

-nounsolicited. No se permiten llamadas que no sean solicitadas.

-nocomunsolicited. No se permiten llamadas comerciales que no sean solicitadas.

-nopartial. No se permiten bsquedas para patrones parciales.

-residential, comercial,mobile. Le indica a los pares qu tipo de nmeros son los que se estn publicando a travs de este contexto.

[mappings]priv =>dundi-priv-local,0,IAX2,priv:${SECRET}@162.248.175.91/${NUMBER},nounsolicited,nocomunsolicit,nopatial

Variables:

${SECRET}. Es reemplazado por el password almacenado en la base de datos.${NUMBER}. Es el nmero solicitado.${IPADDR}. Es la IP de nuestro Asterisk. No se recomienda su uso. Generacin de llaves:La autenticacin en una red dundi normalmente se hace mediante llavepblica/privada:

cd /var/lib/asterisk/keys astgenkey -n dundi_ext_44xx

yum -y install phpcp dundi_ext_44xx.pub /var/www/html service httpd startwget -c http://132.248.175.90/dundi_principal.pub*CLI>reload res_crypto.so*CLI>reload pbx_dundi.so*CLI>dundi lookup 4400@priv

Dundi: configuracin de pares:

;Par principal, el principal publica las dems extensiones [00:0c:29:d8:86:c0] ; MAC address del par principal model = symmetrichost = 132.248.175.90inkey = dundi_principal ; nombre de la llave pblica del par outkey = dundi_ext_44xx ; nombre de mi llave privada include = privpermit = privqualify = yes dynamic=yes

Configuracin del archivo extensions.conf:

; tratamos de ir en el contexto local al nmero de extensin, despus vamos a buscar a ;otro contexto. dundi-priv-lookup apunta a la directiva switch la cual permite buscar las ;extensiones ;en otros conmutadores. Esto posibilita la convergencia entre mltiples ;servidores Asterisk con ;diferentes nmeros de bloques de extensiones[macro-dundi-lookup]exten => s,1,Goto(${ARG1},1) include => dundi-priv-local include => dundi-priv-lookup

Definicin de contextos:; Son las extensiones locales, por ejemplo: 44XX [dundi-priv-local]exten => _44XX,1,Macro(Dial,${EXTEN}); Buscamos con nuestros pares[dundi-priv-lookup]switch => DUNDi/priv; Cuando se trata de una llamada de un par privado, llega aqu. [dundi-priv-incoming]include => dundi-priv-local

Bsqueda en pares:

; Contexto para llamadas salientes, aqu nos comunicamos con la red dundi, pero ;agregamos 4 dgitos[pares-dundi]exten => _XXXX,1,Macro(dundi-lookup,${EXTEN}) [internos]include => pares-dundiConfiguracion del archivo iax.conf: [priv]type=user dbsecret=dundi/secret context=internos disallow=allallow=ulaw allow=alaw allow=gsm

Aspectos avanzados de Asterisk:

Qu es AGI?

AGI (Asterisk Gateway Interface) nos permite ejecutar en Asterisk software de terceros escrito en casi cualquier lenguaje (C, C#, Bourne Shell, PHP, Ruby, Python, Perl, Java). Permite extender al infinito las posibilidades de Asterisk, juntando su potencia, con las posibilidades que ofrece un lenguaje de programacin.

El programa debe cumplir:

Ser ejecutable (chmod 755 script.php). Localizado por defecto en /var/lib/asterisk/agi-bin Asociado con alguna extensin en el Dial Plan:exten => 200,1,AGI(programa.php|argumentos)

El intercambio de informacin del script con Asterisk se realiza va los canales de comunicacin: STDIN, STDOUT y STDERR.

Lee desde STDIN para obtener informacin. Escribe en STDOUT para enviar informacin.Escribe en STDERR para enviar informacin de debugging.

El script AGI enva comandos a Asterisk escribiendo en el STDOUT. Seguidamente Asterisk enva una respuesta por cada uno de ellos que es leda por el script. Algunos ejemplos de comandos son:

ANSWER: atiende.

159HANGUP: cuelga.SAY [NUMBER | DIGITS | ALPHA || PRIORITY]: establece un nuevo contexto, extensin o prioridad luego de finalizada la ejecucin de script.VERBOSE: imprime un mensaje en el log.WAIT FOR DIGIT: PHONETICS]: dice un nmero, dgito, caracter o una cadena fonticamente.SET [CONTEXT | EXTENSION espera que se presione un dgito.[SET | GET] VARIABLE: asigna u obtiene el valor de una variable del plan de marcacin.

Qu es AMI?

AMI (Asterisk Manager TCP/IP API) permite que programas cliente se conecten a Asterisk mediante TCP/IP y sean capaces de ejecutar comandos y leer eventos, como por ejemplo crear o monitorizar llamadas ,canales y colas. Por cada cosa que Asterisk realiza se generan eventos que pueden ser ledos mediante una sesin de manager, y el usuario puede tratarlos a su gusto.

Adems, AMI permite la ejecucin de comandos, lo que proporcina la posibilidad de alterar el comportamiento de Asterisk desde un programa hecho a medida.

Funcionamiento:

Para trabajar con AMI es necesario tener un usuario definido en el fichero manager.conf. A partir de aqu hay que establecer una comunicacin TCP/IP con el servidor de Asterisk en el puerto 5038, y una vez conectado y autentificado, se puede comenzar a leer los eventos o ejecutar comandos.

Las cuentas de usuario se configuran en /etc/asterisk/manager.conf.Ejemplo: [general]enabled=yes[admin]secret = 1234 deny=0.0.0.0/0.0.0.0 permit=127.0.0.1/255.255.255.0read = system,call,log,verbose,command,agent,userwrite = system,call,log,verbose,command,agent,user

En este caso, "admin" es el nombre de usuario, la clave es "1234" y slo se permiten conexiones para este usuario va localhost. El resto de las lneas establecen permisos (r,w,r/w) para cada clase (system, call, etc.).

Una de las mejores aplicaciones opensource para controlar y visualizar el estado en tiempo real de la centralita Asterisk es: Flash Operator Panel (FOP).

Qu es AJAM?

AJAM es una nueva tecnologa disponible en Asterisk 1.4 (Asyncronous Javascript Asterisk Manager) que permite conectar con Asterisk por medio de HTTP. Para poder trabajar con AJAM es necesario configurar los ficheros manager.conf y httpd.conf.

Configuracin del servidor HTTP de Asterisk:

1) Descomentar "enabled=yes" en /etc/asterisk/http.conf para habilitar el pequeo servidor HTTP de Asterisk.

2) Si se desea tener acceso a simples pginas HTML, CSS, JavaScript, etc., hay que descomentar "enablestatic = yes" .

3) Poner la Ip del servidor Asterisk y el puerto en "bindaddr" y "bindport respectivamente.

4) Ajuste el "prefix" que debe ser el comienzo de cualquier URI en el servidor . El valor predeterminado es "asterisk" ..

Permitir el acceso al Manager via HTTP:

1) Asegrese de que tiene tanto "enabled = yes" como "webenabled = yes" en la configuracin / etc / asterisk / manager.conf .

2) Tambin puede usar "httptimeout" para establecer el tiempo de espera predeterminado para las conexiones HTTP (en segundos).

3) Asegurarse de la configuracin de manager.conf teniendo claro cul es el username y la password.

Una vez que estos cambios de configuracin han sido completados puede reiniciar Asterisk y podr acceder a distintas funciones de web. Puede encontrar una lista completa de estas funciones:

*CLI> show http o *CLI> http show status

Ejemplos de funcionamiento:

Para abrir una sesin de Asterisk Manager:

http://192.168.1.200:8088/asterisk/manager?action=login&username=admin_de_usuario&secret=amp111

Para ver la salida del comando status:

http://192.168.1.200:8088/asterisk/rawman?action=status

Qu es AEL2?

AEL2 (Asterisk Extension Language versin 2) tiene como objetivo proporcionar una forma diferente de escribir el Dialplan ,una forma ms flexible.Para utilizar AEL2, lo nico que tiene que hacer es tener cargado el modulo pbx_ael2.so. Esto se har de forma automtica si se utiliza 'autoload = yes "en/etc/asterisk/modules.conf. Cuando se carga el mdulo, se busca 'extensions.ael2' en/etc/asterisk/. Algunos usuarios pueden mantienen el archivo extensions.conf para conservar las caractersticas que se configuran en la seccin "general" de extensions.conf.

Para volver a cargar extensions.ael2:

*CLI> ael2 reload

Hacer un debug de los Contextos:

*CLI> ael2 debug contexts

Hacer un debug de las macros:

*CLI> ael2 debug macros

Ejemplo:

context prueba {

1234 => { Dial(SIP/${EXTEN},45); switch (${DIALSTATUS}) {case BUSY: Voicemail(b200);

break;case NOANSWER:Voicemail(u200);

}}

Eso seria similar a esto:

break;default:

}

Noop(Algo raro ha pasado); Hangup;

[prueba]exten => 1234,1,Dial(SIP/${EXTEN},45)exten => 1234,n,GotoIf($[${DIALSTATUS}=BUSY]?BUSY)exten => 1234,n,GotoIf($[${DIALSTATUS}=NOANSWER]?NOANSWER)exten => 1234,n,Hangup()

exten => 1234,BUSY,Voicemail(b200)exten => 1234,BUSY,Hangup()exten => 1234,NOANSWER,Voicemail(u200);exten => 1234,NOANSWER,Hangup()

Qu es ARA?

Asterisk permite ser configurado en una Base de Datos, mediante Asterisk RealtimeArchitecture.

Por ejemplo soporta MySQL, podiendo migrar a la base de datos lo siguiente:

Configuracin de dispositivos SIP e IAX. Configuracin de buzones de voz. Configuracin de colas.

El fichero a configurar es extconfig.conf. El fichero res_mysql.conf contiene la configuracin de la base de datos.

ARA dispone de 2 tipos de Realtime: esttico y dinmico:

Esttico: La configuracin esta almacenada en la BD, pero Asterisk la carga al arrancar como si fuera un fichero. Si se realiza algn cambio, es necesario hacer un reload.

Dinmico: La configuracin esta almacenada en la BD y Asterisk realiza una consulta a esa BD cada vez que necesita un dato. No es necesario hacer reload si se han realizado cambios. Mucha carga para el servidor...Todos los ficheros no soportan Realtime Dinmico como el fichero de colas(queues.conf).

Ejemplo de configuracin (extconfig.conf): [settings]

;;RealTime Dynamic;file => driver,database,table;sipusers => mysql,asterisk,dispositivos_sip;iaxpeers => mysql,asterisk,dispositivos_iax;voicemail => mysql,asterisk,buzones

;;RealTime Static;file => driver,database,table;sip.conf => mysql,asterisk,sip_conf;extensions.conf => mysql,asterisk,extensions_conf;iax.conf => mysql,asterisk,iax_conf;queues.conf => mysql,asterisk,queues_conf;voicemail.conf => mysql,asterisk,voicemail_conf

Administracin de Asterisk

La administracin de Asterisk se hace por interfaz web o por la lnea de comandos CLIen modo administrador.

Interfaces web para Asterisk:

Asterisk GUI:

Interfaz grfica para Asterisk creada por Digium.

El AsteriskGUI se cre para hacer que la configuracin, gestin, y ajuste de su sistemaAsterisk sea menos complicado, proporcionando un fcil uso de la interfaz grfica.

El AsteriskGUI es diferente de la mayora de las interfaces que se han creado para su uso con Asterisk, ya que la interfaz realmente manipula el Asterisk y los archivos de configuracin.

Se lanz tras el lanzamiento del Asterisk Appliance.

Lo bueno de esta interfaz, es que lee la configuracin que hemos escrito a mano, la entiende y permite gestionarla va web, algo que las dems interfaces no hacen (siempre machacan los cambios o acuden a archivos externos incluidos para saltarse esta dificultad, en lugar de plantarle cara).

Es importante que conozcamos estas GUI, porque Digium planea convertirla en un estndar para las versiones Appliance, AsteriskNOW y Asterisk Business Edition.

En Agosto de 2008 Digium sac la versin estable de Asterisk GUI 2.0.

Instalacin:

Para instalar la interfaz grfica web lo tenemos que hacer desde subversion, por ello necesitaremos el cliente:

yum install subversion

En /usr/src:

svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0 ast-gui cd ast-gui./configuremake && make install && make samples

Ahora configuramos los archivos para poder activar el pequeo servidor http que traeAsterisk GUI y la autenticacin para acceder:

En /etc/asterisk/http.conf:

[general] enabled=yes enablestatic=yesEn /etc/asterisk/manager.conf: [general]displaysystemname = yesenabled = yes webenabled = yes port = 5038;httptimeout = 60 bindaddr = 0.0.0.0

[admin]secret = claveread = system,call,log,verbose,command,agent,config write = system,call,log,verbose,command,agent,config

Una vez guardados, comprobamos que todo ha ido bien:

make checkconfig

Con este ltimo comando (el make checkconfig) confirmaremos que la configuracin es la correcta, sino nos dar algn mensaje de error. Tan solo deberemos asegurarnos que est habilitado el manager en el puerto 5038 as como que existe un usuario valido en el manager.conf y haber des comentado los parmetros en el archivo http.conf, reiniciamos Asterisk y listo.

Arrancamos asterisk:

./asterisk -vvvgc

Ahora ya podemos ir a arrancar el script para finalizar la configuracin:

http://ipServidor:8088/asterisk/static/config/cfgbasic.html.

FreePBX:

FreePBX es una completa aplicacin web de PBX. Asterisk no viene con ninguna Interfaz y no podemos conectar un telfono en ella y hacerlo funcionar sin editar archivos de configuracin y crear un Dialplan para su uso.

FreePBX simplifica esto ofreciendo funcionalidades pre-programados accesibles a

travs de una interfaz web amigable que le permite tener un PBX completamente funcional casi de inmediato sin necesidad de programacin.

FreePBX se basa en la pila LAMPA (Linux, Apache, MySQL, PHP y Asterisk). Es un sistema modular, con clic para instalar plugins descargables a travs de Internet desde el repositorio de mdulo en lnea.

Algunas de las caractersticas de FreePBX son:

-Agregar o cambiar la extensin y las cuentas de correo de voz en cuestin de segundos.-El soporte nativo de SIP, IAX, y los clientes de ZAP (otros criterios de valoracinson apoyados a travs de extensiones personalizadas).-Reducir los costos de larga distancia con LCR.-Enrrutar las llamadas entrantes basndose en la hora del da.-Crear Recepcionista digital interactiva (IVR).-Grupos de llamada de diseo sofisticado.-Gestin de llamadas con colas.-Detectar y recibir los faxes entrantes.-Copias de seguridad y restaurar el sistema.-Guardar las grabaciones de audio de las llamadas.-Ver detalle de llamadas con Asterisk-stat.-Ver las extensiones y el estado de los trunks con Flash Operator Panel.-Ver grabaciones de la conversacin con Asterisk Recording Interface (ARI).-Nmero ilimitado de Conferencias (limitado por la potencia de CPU disponible. (300 usuarios simultneos en conferencias sobre un Pentium 4 a 3 GHz, 600con doble ncleo!)...-Msica en espera.

Instalacin de FreePBX

1.) Instalar Asterisk.

2.) Deshabilitar SeLinux (si no lo desactivaste en la instalacin del sistema operativo).

En /etc/selinux/config -7 "selinux=disabled"

3.) Instalar paquetes necesarios para FreePBX

yum install e2fsprogs-devel keyutils-libs-devel krb5-devel libogg libselinux- devel libsepol-devel libxml2-devel libtiff-devel gmp php-pear php-pear-DB php-gd php-mysql php-pdo ncurses-devel audiofile-devel libogg-devel mysql-

devel zlib-devel perl-DateManip sendmail-cf kernel-devel openssl-devel httpd sox spandsp mpg123

4.) Instalar lame

wget http://easynews.dl.sourceforge.net/sourceforge/lame/lame-3.97.tar.gz tar zxvf lame-3.97.tar.gzcd lame-3.97./configure makemake install

5.) Descargar FreePBX

wget http://mirror.freepbx.org/freepbx.tar.gz

6.) Instalar BD para FreePBX (mysql con password)

mysqladmin create asteriskcdrdb p mysql --user root -p asteriskcdrdb install Net::SNMPChecking if your kit is complete...Looks good Warning:prerequisite Crypt::DES 2.03 not found.Warning: prerequisite Digest::HMAC 1.00 not found. Warning: prerequisite Digest::SHA1 1.02 not found. Writing Makefile for Net::SNMP ----Unsatisfied dependencies detected during [D/DT/DTOWN/Net-SNMP-5.2.0.tar.gz] -----Digest::HMAC Crypt::DES Digest::SHA1Shall I follow them and prepend them to the queueof modules we are processing right now? [yes] Enter

203cpan>exit

Ahora es necesario instalar los paquetes de SNMP:

yum install arpwatch.i386 net-snmp-devel.i386 net-snmp-libs.i386 net-snmp-perl.i386 net- snmp-utils.i386 cluster-snmp.i386 openhpi-subagent.i386 php-snmp.i386

Configuracin del SNMP

Necesitas modificar el fichero snmpd.conf:

# nano /etc/snmp/snmpd.conf

Borra todo su contenido pulsando continuamente Ctrl+K y copia lo siguiente:

master agentxagentXPerms 0660 0660 root root com2sec local localhost public_asteriskcom2sec mynetwork 230.5.42.12 public_asterisk group MyROGroup any localgroup MyROGroup any mynetwork view all included .1access MyROGroup "" any noauth 0 all none none

Guarda el fichero y reinicia el demonio SNMPD:

# /etc/init.d/snmpd restart

Cambia los privilegios a agentx:

# chmod 755 /var/agentx

Acceso al Servidor: PUTTY

Se trata de una aplicacin gratuita SSH41, Telnet, rlogin y cliente TCP raw que nos permite acceder al servidor Asterisk en modo consola y as poder acceder a la lnea de comandos.En Host Name: 192.168.1.200 IP del servidor Asterisk y pulsamos en Open.

Nos aparecer una pantalla negra solicitando que nos loguemos Login as Ejemplo de Login como Root.

Acceso al Servidor: WinSCP

Se trata de un cliente SFTP (Security File Transfer Protocol) grfico que emplea SSH (Security Shell) y que hemos utilizado en algunos casos para transferir y editar archivos de configuracin de Asterisk.Ejemplo de acceso al directorio de archivos de Asterisk:

Instalacin de Asterisk:

Asterisk 1.4.xx (de 1.4.0 a 1.4.21)

1.) El primer paso es descargar los mdulos necesarios: zaptel, libpri, asterisk y asterisk-addons desde los repositorios pblicos de Digium y guardarlos en nuestro sistema( /usr/src/) :

cd /usr/src/mkdir asterisk

cd asterisk

wget http://downloads.digium.com/pub/libpri/libpri-1.4-current.tar.gz wget http://downloads.digium.com/pub/zaptel/zaptel-1.4-current.tar.gz wget http://downloads.digium.com/pub/asterisk/asterisk-1.4-current.tar.gzwget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.4-current.tar.gz

2.) Ahora debemos averiguar la versin exacta de nuestro kernel con el comandouname a, deberamos ver algo como:

[root@asterisk~]# uname -a

Linux asterisk.asteriskclub.org 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686 i686 i386 GNU/Linux

Apuntamos si la versin del kernel es 2.4 o 2.6, ya que necesitaremos esta informacin luego.

3.) Luego verificamos si tenemos instaladas las fuentes del kernel, para ello utilizamos el comando rpm -q kernel-devel:

[root@asterisk ~]# rpm -q kernel-devel

kernel-devel-2.6.18-8.el5

Si no estn instaladas podemos hacerlo con yum de la siguiente forma:

yum install kernel-devel

4.) Ahora s, instalamos los siguientes paquetes necesarios para al instalacin deAsterisk:

yum install bison bison-devel ncurses ncurses-devel zlib zlib-devel gcc-c++ openssl- devel gnutls-devel gcc openssl

5.) Un paso ms antes de empezar con la instalacin, CentOS no instala las fuentes del kernel en el directorio /usr/src/linux como est escrito en los Makefile de Zaptel y Astersik, para ello nos vamos a /usr/src/ y creamos un link llamado linux hacia el directorio con las fuentes del kernel el cual est ubicado en/usr/src/kernels/mi_version_del_kernel (aqu utilizamos la informacin obtenida del paso 2) estos son los resultados que esperamos:

[root@asterisk ~]# cd /usr/src/ [root@asterisk src]# ln -skernels/2.6.18-8.el5-i686/ linux[root@asterisk src]# ll

total 28drwxr-xr-x 2 root root 4096 jun 13 08:43 asterisk drwxr-xr-x 3 root root 4096 jun 12 13:17 kernelslrwxrwxrwx 1 root root 26 jun 13 09:12 linux -> kernels/2.6.18-8.el5-i686/drwxr-xr-x 7 root root 4096 jun 12 13:34 redhat

6.) Listo, ahora s, nos posicionamos en la carpeta donde bajamos los paquetes(/usr/src/), los desempaquetamos y descomprimimos, as:

cd /usr/src/asterisktar -vxzf libpri-current tar.gz tar -vxzf zaptel-current.tar.gz tar -vxzf asterisk-current.tar.gztar -vxzf asterisk-addons-current.tar.gz

Luego ingresamos a la carpeta libpri

cd libpri-1.4.0

y ejecutamos:

make clean makemake install

Grabamos y cerramos el archivo. Luego ingresamos a la carpeta zaptel

cd ../zaptel-1.4.2.1

y ejecutamos:

make clean makemake installmake config (para hacer que el modulo zaptel se carge al tiempo de boot)

Finalmente ingresamos a la carpeta asterisk:

cd ../asterisk-1.4.4

y ejecutamos:

make clean./configure makemake installmake samples (para crear archivos de ejemplo)make config

7.) Listo !! si todo sali bien deberamos poder cargar Asterisk con:

asterisk vvvvvvvvcg o asterisk rvvvvvvv

8.) Opcionalmente podemos ponerle a nuestra central soporte para cdec g729, descargando una version OpenSource.

cd /var/lib/asterisk/moduleswget http://asterisk.hosting.lv/bin/codec_g729-ast14-gcc4-glibc- pentium4.somv codec_g729-ast14-gcc4-glibc-pentium4.so codec_g729.sochmod +x codec_g729.so service asterisk restart

Asterisk 1.4xx (de 1.4.22 a 1.4.27) y 1.6.x

1.) Empezamos actualizando el S.O.

yum -y update

2.) Instalaremos algunos paquetes necesarios antes de Asterisk en s mismo.

yum install libtiff-devel php-pear php-pear-db php-gd php-mysql php-pdo audiofile-devel mysql-devel perl-datemanip

3.) Creamos la carpeta dnde guardaremos los paquetes de asterisk y los descargamos:

cd /usr/src mkdir asterisk cd asterisk

Instalamos el subversion para para poder descargar el Asterisk:

yum y install subversin

svn checkout http://svn.digium.com/svn/asterisk/branches/1.4/asterisk-1.4.26.1 svn checkout http://svn.digium.com/svn/asterisk-addons/branches/1.4/asterisk- addons-1.4.9wget http://downloads.digium.com/pub/telephony/dahdi-linux/dahdi-linux-2.1.0.4.tar.gzwget http://downloads.digium.com/pub/telephony/dahdi-tools/dahdi-tools-2.1.0.2.tar.gzwget http://downloads.digium.com/pub/libpri/releases/libpri-1.4.9.tar.gz

Descomprimimos:

tar zxvf libpri-1.4.9.tar.gztar zxvf dahdi-linux-2.1.0.4.tar.gztar zxvf dahdi-tools-2.1.0.2.tar.gz

4.) Instalamos libpri:

cd libpri-1.4.9 makemake install cd ..

5.) Instalamos dahdi-linux

cd dahdi-linux-2.1.0.4 makemake install cd ..

6.) Instalamos dahdi-tools

cd dahdi-tools-2.1.0.2./configuremake menuselect makemake install make config cd ..

7.) Instalamos asterisk

cd asterisk-1.4.26.1/./configuremake menuselect makemake install

8.) Instalamos asterisk-addons

cd /usr/src/asterisk-addons-1.4.9/./configuremake menuselect makemake install

Eleccin de la version Asterisk:

Diferencia entre los Asterisk 1.4 (hasta 1.4.21) y los Asterisk 1.4.22 (y superiores) y 1.6 en telefona analgica: De Zaptel a DAHDI

En el paso de Asterisk 1.4.21 a Asterisk 1.4.22 Digium como ya anunci, cambi el nombre de la interfaz de telefona analgica Zaptel a DAHDI (Digium Asterisk Hardware Device Interface) para dar cabida a los deseos del titular de la marca Zaptel.

A parte del cambio de nombre Digium aprovech para efectuar la correccin de errores e introducir una serie de caractersticas:

Los supresores de eco pueden aplicarse por canal y seleccionando el tiempo de configuracin.La asignacin de memoria de canal ha pasado de un gran bloque a bloques ms pequeos con el fin de reducir los errores de memoria.Apoyo para las tarjetas RDSI BRI (Basic Rate Interface), concretamente para las tarjetas B410P (mdulo con 4 puertos BRI).

Otros de los avances es el empaquetamiento de los mdulos, pasando de uno slo (zaptel) a dos diferenciados por tener uno los mdulos del Kernel (dahdi-linux) y otro con las herramientas para su uso (dahdi-tools).

En el primer paquete, dahdi-linux la equivalencia de mdulos es la siguiente:

-zaptel.ko -7 dahdi.ko-ztd-eth.ko -7 dahdi_dynamic_eth.ko-ztd-loc.ko -7 dahdi_dynamic_loc.ko-ztdummy.ko -7 dahdi_dummy.ko-ztdynamic.ko -7 dahdi_dynamic.ko-zttranscode.ko -7 dahdi_transcode.ko

En el segundo paquete, dahdi-tools la equivalencia de mdulos es la siguiente:

-ztcfg -7 dahdi_cfg-ztmonitor -7 dahdi_monitor-ztscan -7 dahdi_scan-ztspeed -7 dahdi_speed

-zttest -7 dahdi_test-zttool -7 dahdi_tool-zapconf -7dahdi_genconf

En las versiones de Asterisk 1.4 y 1.6 en las que se usa DAHDI, los mdulos que utilizan los servicios de este canal son:

-chan_zap.so -7 chan_dahdi.so-app_zapbarge.so -7 app_dahdibarge.so-app_zarpras.so -7 app_dahdiras.so-app_zapscan.so -7 app_dahdiscan.so-codec_zap.so -7 codec_dahdi.so

La descripcin de cada mdulo es la siguiente:

chan_dahdi.so: Este modulo determina que nombre del canal se debe utilizar para llamadas entrantes .Si no se quiere usar el nombre de canal DAHDI y se quiere seguir usando el canal Zap hay que aadir la siguiente lnea al archivo asterisk.conf de /etc/asterisk/:

dahdichanname=no

app_dahdibarge.so: La aplicacin ZapBarge ser ahora DAHDIBarge. app_dahdiras.so: La aplicacin ZapRAS ser ahora DAHDIRAS. app_dahdiscan.so: La aplicacin ZapScan ser ahora DAHDIScan.

Por ltimo, la configuracin para el controlador del canal se lee del archivo chan_dahdi.conf en /etc/asterisk/ en vez del zapata.conf, mientras que la informacin de las tarjetas que detecte aparecer en dahdi-channels.conf en vez de en zaptel.conf.

Configuracin DAHDI

1.) Ejecutamos dahdi_scan y veremos que las tarjetas que reconoce DAHDI y su estado (actualmente Unconfigured).En este caso disponemos de una tarjeta de telefona con 4 puertos,2 de ellos ocupados por dos mdulos un FXO y un FXS.

[root@asterisk ~]# dahdi_scan

[1] active=yes alarms=OKdescription=Wildcard TDM400P REV E/F Board 5 name=WCTDM/4manufacturer=Digium devicetype=Wildcard TDM400P REV E/F location=PCI Bus 08 Slot 02basechan=1totchans=4 irq=209

type=analog port=1,FXO port=2,FXS port=3,none port=4,none

2.) Ahora que sabemos que dahdi reconoce nuestras tarjetas, pasamos a configurarlas. para eso ejecutamos:

[root@asterisk ~]# dahdi_genconf

[root@asterisk ~]# dahdi_cfg -vvdahdi tools version - 2.2.0 dahdi version: 2.2.0echo canceller(s):configuration======================

channel map:

channel 01: fxs kewlstart (default) (echo canceler: mg2) (slaves: 01)channel 02: fxo kewlstart (default) (echo canceler: mg2) (slaves: 02)

2 channels to configure.

setting echocan for channel 1 to mg2 setting echocan for channel 2 to mg2

3.) A partir de aqu ajustaremos la configuracin de dahdi para adaptarla a nuestras necesidades.

3.1.) Editamos /etc/dahdi/modules y comentamos todos aquellos drivers que no usamos.

[root@asterisk asterisk]# nano /etc/dahdi/modules

# Contains the list of modules to be loaded / unloaded by /etc/init.d/dahdi.## NOTE: Please add/edit /etc/modprobe.d/dahdi or /etc/modprobe.conf if you#would like to add any module parameters.## Format of this file: list of modules, each in its own line.# Anything after a '#' is ignore, likewise trailing and leading# whitespaces and empty lines.

# Digium TE205P/TE207P/TE210P/TE212P: PCI dual-port T1/E1/J1# Digium TE405P/TE407P/TE410P/TE412P: PCI quad-port T1/E1/J1# Digium TE220: PCI-Express dual-port T1/E1/J1# Digium TE420: PCI-Express quad-port T1/E1/J1#wct4xxp

# Digium TE120P: PCI single-port T1/E1/J1# Digium TE121: PCI-Express single-port T1/E1/J1

217# Digium TE122: PCI single-port T1/E1/J1#wcte12xp

# Digium T100P: PCI single-port T1# Digium E100P: PCI single-port E1#wct1xxp

# Digium TE110P: PCI single-port T1/E1/J1#wcte11xp

# Digium TDM2400P/AEX2400: up to 24 analog ports# Digium TDM800P/AEX800: up to 8 analog ports# Digium TDM410P/AEX410: up to 4 analog ports#wctdm24xxp

# X100P - Single port FXO interface# X101P - Single port FXO interface#wcfxo

# Digium TDM400P: up to 4 analog ports wctdm

# Digium B410P: 4 NT/TE BRI ports#wcb4xxp

# Digium TC400B: G729 / G723 Transcoding Engine#wctc4xxp

# Xorcom Astribank Devices#xpp_usb

3.2.) A continuacin editamos /etc/dahdi/system.conf. ponemos controlar aparte del idioma el nmero de canal para cada mdulo.

[root@asterisk asterisk]# nano /etc/dahdi/system.conf

# Autogenerated by /usr/sbin/dahdi_genconf on Thu Nov 5 06:19:40 2009# If you edit this file and execute /usr/sbin/dahdi_genconf again,# your manual changes will be LOST.# Dahdi Configuration File## This file is parsed by the Dahdi Configurator, dahdi_cfg## Span 1: WCTDM/4 "Wildcard TDM400P REV E/F Board 5" (MASTER)fxsks=1echocanceller=mg2,1 fxoks=2 echocanceller=mg2,2# channel 3, WCTDM/4/2, no module.# channel 4, WCTDM/4/3, no module.# Global data loadzone = es defaultzone = es

4.) Echemos un vistazo al fichero /etc/asterisk/dahdi_channels.conf

[root@asterisk asterisk]# nano /etc/asterisk/dahdi-channels.conf

; Autogenerated by /usr/sbin/dahdi_genconf on Thu Nov 5 06:19:40 2009; If you edit this file and execute /usr/sbin/dahdi_genconf again,; your manual changes will be LOST.; Dahdi Channels Configurations (chan_dahdi.conf);; This is not intended to be a complete chan_dahdi.conf. Rather, it is intended; to be #include-d by /etc/chan_dahdi.conf that will include the global settings;; Span 1: WCTDM/4 "Wildcard TDM400P REV E/F Board 5" (MASTER);;; line="1 WCTDM/4/0 FXSKS"signalling=fxs_ks callerid=asreceived group=0 context=from-pstn channel => 1 callerid=group=context=default

;;; line="2 WCTDM/4/1 FXOKS" signalling=fxo_ks callerid="Channel 2" mailbox=4002group=5context=from-internalchannel => 2 callerid= mailbox= group=context=default

Tenemos las tarjetas reconocidas pero no tenemos canales.

[root@asterisk etc]# asterisk -r*CLI> dahdi show channels

Chan extension ContextLanguage Moh interpret pseudodefaultdefault

*CLI> dahdi show status

DescriptionAlarms IRQ bpviolCRC4

Wildcard TDM400P REV E/F Board 5OK000

5.) Asterisk interpreta los canales a travs del fichero de configuracinchan_dahdi.conf. Este fichero no existe, as que lo crearemos nosotros.

[root@asterisk asterisk]# nano chan_dahdi.conf

Aadiremos simplemente 2 lneas:

[channels]#include dahdi-channels.conf

con esto le decimos al sistema asterisk que lea el fichero dahdi-channels.conf(creado en la ejecucin de dahdi_genconf y dahdi_cfg -vv).

6.) Ahora simplemente reiniciamos asterisk

[root@asterisk asterisk]# asterisk -r

*CLI> dahdi show channels

Chan Extension ContextLanguage MOH Interpretpseudodefaultdefault

1defaultdefault

2defaultdefault

7.) Paramos Asterisk :

[root@asterisk asterisk]# service asterisk stop

Reiniciamos DAHDI:

[root@asterisk asterisk]# service dahdi restart

Iniciamos Asterisk y listo:

[root@asterisk asterisk]# service asterisk start

8.) Al descolgar el telefono analgico en el CLI:

-- Starting simple switch on 'DAHDI/2-1'-- Hungup 'DAHDI/2-1'

Pruebas de llamada al canal DAHDI en Asterisk 1.4.26.1

La configuracin del canal DAHDI en el extensions.conf es:

exten => 1234,1,Dial(DAHDI/2-1,30,Ttm)exten => 1234,n,Hangup

Llamada de la extensin 105 a la extensin 1234 que desva al canal DAHDI, la salida del CLI es la siguiente:

-- Executing [1234@incoming:1] Dial("SIP/105-08601bd0", "DAHDI/2-1|30|Ttm") in new stack-- Called 2-1-- Started music on hold, class 'default', on SIP/105-08601bd0-- DAHDI/2-1 is ringing-- DAHDI/2-1 is ringing-- Stopped music on hold on SIP/105-08601bd0-- Hungup 'DAHDI/2-1'== Spawn extension (incoming, 1234, 1) exited non-zero on 'SIP/105-08601bd0'

Llamada del telfono analgico (canal DAHDI) a la extensin 105:

-- Starting simple switch on 'DAHDI/2-1'-- Executing [105@incoming:1] Dial("DAHDI/2-1", "SIP/105|30|Ttm") in new stack-- Called 105-- Started music on hold, class 'default', on DAHDI/2-1-- SIP/105-0948a5a0 is ringing-- Stopped music on hold on DAHDI/2-1== Spawn extension (incoming, 105, 1) exited non-zero on 'DAHDI/2-1'-- Hungup 'DAHDI/2-1'

Pruebas bsicas realizadas en Asterisk 1.4.21

Pruebas SoftPhones:

1.) Realizamos la configuracin de 2 usuarios SIP y de 2 usuarios IAX2 en los ficheros extensions.conf, iax.conf y sip.conf.

extensions.conf

exten => 100,1,Dial(SIP/100,30,Ttm)exten => 100,n,Hangupexten => 101,1,Dial(SIP/101,30,Ttm)exten => 101,n,Hangup;exten => 300,1,Dial(IAX2/300,30,Ttrm);exten => 300,n,Hangup;exten => 400,1,Dial(IAX2/400,30,Ttrm);exten => 400,n,Hangup

sip.conf

[general] context=default allowoverlap=no bindport=5060 bindaddr=0.0.0.0 srvlookup=yes language=es callevents=yes

[100]

type=friend username=100

secret=1234 mailbox=100 host=dynamic context=default canreinvite=yes dtmfmode=rfc2833 nat=no

[101]

type=friend username=101 secret=1234 mailbox=101 host=dynamic context=default canreinvite=yes dtmfmode=rfc2833 nat=no

iax.conf

[general] bindport=4569 bindaddr=0.0.0.0 srvlookup=yes accountcode=lss0101 delayreject=yes language=es disallow=all allow=gsm allow=ulaw allow=alaw

[300] type=friend host=dynamic secret=1234 auth=md5,plain context=default qualify=yes callerid = "300" autokill=yes

[400] type=friend host=dynamic secret=1234 auth=md5,plain context=default qualify=yes callerid = "400" autokill=yes

2.) Hacemos un reload de Asterisk para que detecte las extensiones de los usuarios.

[root@asterisk]# asterisk rvvv*CLI> reload

3.) Realizamos la configuracin de los 4 usuarios en 2 Softphones Zoiper situados en dos ordenadores diferentes.

De la misma manera se configuran las otras dos extensiones de cada protocolo. Para tener ms informacin sobre la configuracin de este y otros SoftPhones ir al subcaptulo SoftPhones del captulo de Asterisk.(ENLACE)

4.) Comprobamos que los usuarios se han registrado correctamente en losSoftPhones.

-- Registered IAX '300' at 192.168.1.200 port 4569-- Registered SIP '100' at 192.168.1.200 port 5060-- Saved useragent "Zoiper rev.5324" for peer 300-- Saved useragent "Zoiper rev.5324" for peer 100

5.) Vemos el comportamiento de la centralita Asterisk, a travs del SoftPhone, al realizar llamadas entre las extensiones (teniendo en cuenta que no podemos llamar de una extensin SIP a una IAX2 y bicerversa).

-- Executing [100@default:1] Dial("SIP/101- 097f7fb8", "SIP/100|30|Ttm") in new stack-- Called 100-- Started music on hold, class 'default', on SIP/101-097f7fb8-- SIP/100-097f9a98 is ringing-- SIP/100-097f9a98 answered SIP/101-097f7fb8-- Stopped music on hold on SIP/101-097f7fb8== Spawn extension (default, 100, 1) exited non-zero on 'SIP/101-097f7fb8'

Pruebas telfonos IP (SipuraSPA):

1.) Realizamos la configuracin de 4 usuarios SIP en los ficheros extensions.conf y sip.conf.

De la misma forma que en el apartado anterior realizamos la configuracin en dichos ficheros de las extensiones SIP: 102, 103, 104, 105, que sern utilizadas tambin en pruebas posteriores.

2.) Hacemos un reload de Asterisk para que detecte las extensiones de los usuarios.

[root@asterisk]# asterisk rvvv*CLI> reload

3.) Realizamos la configuracin de los 4 usuarios en 2 telefenos IP SipuraSPA de dos extensiones cada uno.La configuracin del telfono en cuanto al servidor Asterisk es la siguiente:

Un ejemplo de configuracin de una extensin de las dos que permite configurar cada telfono IP es:

4.) Comprobamos que los usuarios se han registrado correctamente en los telfonos IP.

-- Registered SIP '102' at 192.168.1.201 port 5060-- Saved useragent "Sipura/SPA841-3.1.3(a)" for peer 102

5.) Vemos el comportamiento de la centralita Asterisk, a travs del CLI, al realizar llamadas entre las extensiones SIP de los telfonos IP y las de los SoftPhones configuradas en el apartado anterior.

-- Executing [100@default:1] Dial("SIP/102-097f96a8", "SIP/100|30|Ttm") in new stack-- Called 100-- Started music on hold, class 'default', on SIP/102-097f96a8-- SIP/100-098066d8 is ringing-- Stopped music on hold on SIP/102-097f96a8

== Spawn extension (default, 100, 1) exited non-zero on 'SIP/102-097f96a8'

Pruebas de funcionamiento de buzones de voz:

1.) Desconectamos un telfono IP paa obligar la redireccin a los buzones de las extensiones registradas en l.

extensions.conf

exten => 100,1,Dial(SIP/100,30,Ttm)exten => 100,n,Voicemail(100)exten => 100,n,Hangup

voicemail.conf

[general]format=wav49|gsm|wav;serveremail=asterisk attach=yes skipms=3000 maxsilence=10 silencethreshold=128 maxlogins=3emaildateformat=%A, %B %d, %Y at %r sendvoicemail=yes

[zonemessages]eastern=America/New_York|'vm-received' Q 'digits/at' IMp central=America/Chicago|'vm-received' Q 'digits/at' IMp central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours' military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p' european=Europe/Copenhagen|'vm-received' a d b 'digits/at' HM

[default]100 => 1234,100,100@localhost

2.) Vemos el comportamiento de la centralita Asterisk, a travs del CLI, al realizar una llamada a una de las extensiones del telfono IP que no est registrada.

-- Executing [100@default:1] Dial("SIP/102-0891c9f0", "SIP/100|30|Ttm") in new stack== Everyone is busy/congested at this time (1:0/0/1)-- Executing [100@default:2] VoiceMail("SIP/102-0891c9f0", "100") in new stack-- Playing 'vm-intro' (language 'es')-- Playing 'beep' (language 'es')-- Recording the message-- x=0, open writing: /var/spool/asterisk/voicemail/default/100/tmp/ylgos8 format: wav49, 0x889d9f0-- x=1, open writing: /var/spool/asterisk/voicemail/default/100/tmp/ylgos8 format: gsm, 0x89181f0-- x=2, open writing: /var/spool/asterisk/voicemail/default/100/tmp/ylgos8 format: wav, 0x88fc230

229-- User hung up

Al grabar el primer mensaje en la cuenta de voicemail hay que especificar los cdecs en los que quieres que se grabe el mensaje. A continuacin grabar en esos formatos todos los mensajes que se dejen a no ser que se cambie.

3.) Vemos cmo escuchar el mensaje guardado en el buzn.

extensions.conf

;exten => 1001,1,VoiceMailMain(100)

Para escuchar los mensajes: Marcar 1001.Tras grabar dejar dos mensajes en el buzn