26. Configuración de un canal SIP [general] context=default srvlookup=yes [201] type=friend secret=201 qualify=yes ; Qualify peer is no more than 2000 ms away nat=no ; este usuario no esta a travez de nat host=dynamic ; este usuario se registrara con nosotros canreinvite=no ; por defecto asterisk intentara hacer el reenvio context=internas ; el contexto internas controla el comportamiento de este canal
31. Configuración de un canal IAX En /etc/asterisk/iax.conf debemos tener: [general] jitterbuffer=yes bindport=4569 calltokenoptional = 0.0.0.0/0.0.0.0 requirecalltoken = auto maxcallnumbers = 512 ; http://tinyurl.com/iax2seg [X06] callerid=mi nombre secret=123 type=friend host=dynamic context=internal disallow=all allow=gsm CLI>originate IAX2/X06 application echo
32.
33.
34.
35.
36.
37.
38.
39. Variables Globales Como su nombre lo indica son variables que se aplican a todos las extensiones y en todos los contextos. Pueden ser definidas de 2 formas: [globals] GABRIEL=SIP/201 [internal] exten => 123,1,SetGlobalVar(JOHN=SIP/john) )
40. Variables de Canal Son variables que están asociadas únicamente a una llamada en particular. A diferencia de las variables globales solo se definen durante la duración de la llamada y en el canal activo únicamente exten => 123,1,Set(CONTADOR=4) exten => 123,2,Playback(digits/${CONTADOR}) Un claro ejemplo de una variable de canal es el callerid
41. Uso de la aplicacion Dial Dial(tech/user, timeout, opcion) El primer parametro es el destino al cual queremos llamar conformado por la tecnologia (SIP,DAHDI,IAX) un slash (/) y la fuente remota(tipicamente un numero o un usuario) exten => 123,1,Dial(DAHDI/1) exten => 123,1,Dial(SIP/201) exten => 123,1,Dial(DAHDI/1&DAHDI/2)
42. Uso de la aplicacion Dial Dial(tech/user, timeout, opcion) El segundo parametro es el timeout especificado en segundos y es el tiempo que asterisk intentara establecer una conexion con el canal definido. exten => 101,1,Dial(SIP/gabriel,10) exten => 101,1,Dial(SIP/101,10) Si el canal es contestado antes del timeout asterisk puentea ambos canales para permitir la comunicacion
43. Uso de la aplicacion Dial Dial(tech/user, timeout, opcion) Si el canal destino no contesta, vencido el timeout, asterisk pasa a la siguiente prioridad Si el canal destino se encuentra ocupado, asterisk pasa a la extension n+101, (si existe) exten => 123,1,Dial(SIP/201,10) exten => 123,2,Playback(vm-nobodyavail) exten => 123,3,Hangup( ) exten => 123,102,Playback(tt-allbusy) exten => 123,103,Hangup( )
44. Uso de la aplicacion Dial( ) Dial(tech/user, timeout, opcion) El tercer argumento en un carácter de opción, puede contener mas de uno y su función es modificar el comportamiento de la función Dial ( ) la opción mas popular es ( r ). La letra r hará que el llamante escuche un tono de timbrado mientras el canal de destino es notificado de una llamada entrante. Nótese que cualquiera de estos argumentos puede ser dejado en blanco. Por ejemplo si queremos especificar una opción pero no un timeout, simplemente dejamos el argumento en blanco así: exten => 123,1,Dial(SIP/101, ,r)
48. Grabación de audio con Record() Record( filename.format, silence, maxduration, options) Dentro de [internas] : exten => 282,1,Record(intro%d.gsm) exten => 282,2,Playback($ { RECORDED_FILE } ) exten => 282,3,Hangup() http://tinyurl.com/asteriskREC “ Usted se ha comunicado con la compañía ABC, si conoce el numero de la extensión digítelo ahora, caso contrario presione 1 para comunicarse con ventas, 2 para soporte técnico, 3 para contabilidad; o manténgase en la línea que una operadora le atenderá”
49. Voicemail Es una de las características mas populares de los sistemas de telefonía actual. En este sentido Asterisk es muy flexible por: (/etc/asterisk/voicemail.conf) • Voicemail ilimitados con protección de password y con carpetas para organizar los voicemail. • Saludos diferentes para estados “ocupado” y “no disponible” • Saludos por defecto y personalizados • Habilidad para relacionar un teléfono con mas de un voicemail y voicemalis con mas de un usuario • Notificación al correo electrónico de la llegada de un voicemail y posibilidad de adjuntar el archivo de audio • Voicemail forwarding y broadcasts • Creacion de Directorio de la empresa basado en la informacion de los voicemail
50. Voicemail Las configuraciones para el voicemail se hacen en el archivo /etc/asterisk/voicemail.conf mailbox => password, name, email, pager_email, options options Este campo permite ingresar opciones que se sobreponen a las configuraciones globales del mailbox Se escriben de la forma option=value separados por el carácter pipe (|). [default] 201 => 201,Gabriel Astudillo, gastudillo@gmail.com, 84519925@im.movistar.com.ec, tz=central|attach=yes
52. Directorio Telefónico Directory( ) necesita de 3 argumentos: el contexto del voicemail desde donde se leerán los nombres, el contexto del dialplan (extensions.conf) donde se puede ubicar al usuario y un carácter de opción. Por defecto Directory() busca en el directorio por el apellido , pero si le pasamos la opción f, buscará por nombres. Por ejemplo: exten => 8,1,Directory(default,internal,f) exten => 9,1,Directory(default,internal ) Si el llamante presiona 8 obtendrá un directorio ordenado por nombres y si presiona 9 el llamante obtendrá un directorio ordenado por apellidos
53.
54.
55. Expresiones y Manejo de Variables Expresiones Se definen como un conjunto de variables, operadores y valores que se colocan juntas para obtener un resultado. $[expresion] Ejemplos: $[${CONT} + 1] $[${CONT} / 2] Cuando Asterisk encuentra una expresión, reemplaza toda la expresión por el valor resultante. Es importante notar que antes de hacer esto primero evalúa el valor de las variables
56.
57. Expresiones y Manejo de Variables Operadores Boleanos Evalúan la verdad de una sentencia or expr1 | expr2 and expr1 & expr2 Comparación expr1 {=, >, >=, <, <=, !=} expr2 Matemáticos: expr1 {+, -} expr2 expr1 {*, /, %} expr2
62. Ramificación Condicional basada en fechas Aplicación GotoIfTime() Similar a GotoIf() pero se diferencian en que GotoIfTime() toma la decisión de pasarle el control basado en la consulta al reloj del sistema ) GotoIfTime( times,days_of_week,days_of_month,months?label) times : rangos de horas del día en formato 24h, el día comienza a las 00:00 y termina a las 23:59. Ej: 09:00-17:59 days_of_week: días de la semana mon, tus, thu… Ej: mon-fri days_of_month: 7-12 (del 7 al 12) o 15,30 (15 y 30) months: jan, feb, mar, apr… Para hacer coincidir todos los valores hay que poner un * en el lugar del parametro.
63.
64. Ramificación Condicional basada en fechas Aplicación GotoIfTime() GotoIfTime( times,days_of_week,days_of_month,months?label) [incoming] ; Si es cualquier hora del dia, en cualquier dia de la semana, ; durante el noveno dia del mes de octubre nuestra empresa esta ;cerrada exten => s,1,GotoIfTime(*,*,10,oct?cerrado,s,1) ; durante las horas de trabajo envie las llamadas al contexto ;abierto exten => s,2,GotoIfTime(09:00-17:59|mon-fri|*|*?abierto,s,1) exten => s,3,GotoIfTime(09:00-11:59|sat|*|*?abierto,s,1) ; en cualquier otro caso estamos cerrados exten => s,4,Goto(cerrado,s,1)
65. Macros Las Macros son construcciones muy útiles, diseñadas para evitar repeticiones en el plan de marcado. También permiten hacer cambios a grandes grupos de extensiones en una manera, rápida, ágil y ordenada. Recordemos: exten => 201,1,Dial(SIP/201,10,r) exten => 201,2,VoiceMail(201@default,u) exten => 201,3,Hangup() exten => 201,102,VoiceMail(201@default,b) exten => 201,103,Hangup() Imaginen tener que hacer esto para una organización de 100 usuarios !!!!! O tener que agregar una nueva caracteristica a todos los usuarios
66. Como definir una Macro La definición de una macro es similar a la de un contexto (de hecho es un contexto “limitado") [macro-extensiones] exten => s,1,Dial(SIP/201,10,r) exten => s,2,VoiceMail(201@default,u) exten => s,3,Hangup() exten => s,102,VoiceMail(201@default,b) exten => s,103,Hangup() Noten que esta definición aun no es practica pues solo define al usuario GABRIEL y nos direccionaría a todos los usuario a su voicemail En la definición de una macro siempre debemos utilizar la extensión especial s
67. Como llamar a una Macro Macro(nombre,arg1,arg2...) [internos] exten => 201,1,Macro(extensiones, arg1, arg2 ) Al momento de llamar a la función Macro se definen al menos 4 variables de canal que nos van a permitir generalizar su uso: ${MACRO_CONTEXT} ${MACRO_EXTEN} ${MACRO_PRIORITY} ${ARG n}
68. Como llamar a una Macro [macro-extensiones] exten => s,1,Dial(SIP/201,10,r) exten => s,2,VoiceMail(${MACRO_EXTEN}@default, u) exten => s,3,Hangup() exten => s,102,VoiceMail(${MACRO_EXTEN}@default, b) exten => s,103,Hangup() [internos] exten => 201,1,Macro(extensiones,arg1) Noten que ahora ya podemos pasar al voicemail de cada una de las extensiones, pero aun esta fijo el canal con el cual se establecerá la comunicación. Alguna idea ?
77. Configuración de un canal FXO Configuración del hardware en /etc/asterisk/chan_dahdi.conf [channels] ; canales físicos: ; opciones por defecto para todos los canales usecallerid=yes hidecallerid=no callwaiting=no threewaycalling=yes transfer=yes echocancel=yes echotraining=yes ; definicion de canales: context=entrantes ; llamadas entrantes se dirigen a [entrantes] en extensions.conf signalling=fxs_ks ; Use señalizacion FXS para un canal FXO channel => 4 ; PSTN se conecta al puerto 4
78.
79.
80.
81.
82. Configuración de un canal FXO CONFIGURACION DEL DIALPLAN [entrantes] ;las llamadas que provienen del puerto FXO son ;direccionadas a este contexto desde chan_dahdi.conf exten => s,1,Answer() exten => s,2,Echo() Lab: Probar que al llamar al 2269261 contesta la PBX y se reproduce tu propia voz
96. Coincidencia de Patrones Sintaxis Si un usuario digita una extensión de 3 digitos desde el 200 hasta el 999 escuchara el audio auth-thankyou exten => _555XXXX,1,Playback(digits/1) exten => _55512XX,1,Playback(digits/2) Pacifictel: exten => _2XXXXXX,1, Acción Nacional: exten => _0NXXXXXXX,1, Acción Movistar: exten => _08[45]XXXXXX,1,Accion
97. Coincidencia de Patrones Sintaxis Porta: exten => _09[732]XXXXXX,1, Acción exten => _08[567]XXXXXX,1, Acción Internacional: exten => _00. ,1, Acción La pregunta es como asterisk se entera de cual es el número que he marcado y que deberá pasar a la función dial ?
98. Uso de la varible ${EXTEN} Siempre que digitemos una extensión, Asterisk guardara en la variable de canal EXTEN los dígitos que hemos marcado exten => _7XX,1,SayDigits(${EXTEN}) exten => _8XX,1,SayDigits(${EXTEN:1}) exten => _9XX,1,SayDigits(${EXTEN:-1))
103. IAX Trunking En el Servidor A configuramos: modificamos en el archivo iax.conf [general] register => amigo:hola@<dir IP del serverB> [serverB] type=friend user=amigo secret=hola host=<dir IP del serverB > qualify=yes trunk=yes extensions.conf exten => _7XXX,1,Dial(IAX2/serverB/${EXTEN:1},30,r) exten => _7XXX,2,Congestion( )
104. IAX Trunking En el servidor B configuramos: modificamos en iax.conf [serverA] type=friend user=amigo secret=hola host=direccion IP del serverA qualify=yes trunk=yes extensions.conf exten => _8XXX,1,Dial(IAX2/serverA/${EXTEN:1},30,r) exten => _8XXX,2,Congestion