SlideShare una empresa de Scribd logo
1 de 108
Sistemas de VoIP con
      Asterisk




            Modulo III
¿ Que es Asterisk?

    Asterisk es una central telefónica IP (IPBX)
    de código abierto que corre sobre linux y que
    es compatible con la mayoría de tecnologías
    de VoIP (SiP, H323, MGCP, IAX, ) y de
    telefonía tradicional Análoga y Digital (TDM,
    ISDN, BRI, PRI)

    Brinda todos los servicios de una PBX
    propietaria tradicional
Preparando un Sistema para
Asterisk
Selección de Hardware para el Servidor

    En términos de requerimientos asterisk es similar a aquellas
    aplicaciones embebidas y de tiempo real

    En diseños de grandes aplicaciones es común observar una
    distribución de de funcionalidades entre múltiples servidores

    La flexibilidad es una de las razones de peso por las cuales
    los negocios de rápido crecimiento toman la decisión de
    implementarlo
Preparando un Sistema para
Asterisk
Selección de Hardware para el Servidor
Preparando un Sistema para
Asterisk
Selección de Hardware para el Servidor

    La selección del hardware puede ser muy sencilla, como
    muy complicada al mismo tiempo:
     
         Sencilla porque cualquier plataforma x86 puede servir
     
         Complicada porque el rendimiento del sistema dependerá del
         cuidado que se tenga al momento de seleccionar el hardware


    Si estamos implementando un sistemas de hobbie o de
    aprendizaje podemos obviar este diseño, pero si se trata de
    una solución corporativa es importante tener en cuenta las
    siguientes diapositivas
Preparando un Sistema para
Asterisk
Consideraciones respecto a rendimiento

    El máximo numero de conexiones simultaneas:
     
         Cada conexión incrementa carga al sistema


    El porcentaje del trafico que requiere un intensivo
    procesamiento DSP cuando se usa códecs de compresión
     
         El procesamiento DSP que asterisk hace por software tiene un
         impacto directo en el numero de llamadas concurrentes que se
         pueden soportar. Ejem: 50 G.711 vs. 10 G.729


    Que nivel de conferencia va a brindar el sistema y con que
    frecuencia se hará
Preparando un Sistema para
Asterisk
Consideraciones respecto a rendimiento

    Cancelación de Eco :
     
         Se utiliza cuando se utilizan redes PSTN, es una función matemática
         por lo tanto aumenta los recursos de procesamiento
     
         Como alternativa existen las tarjetas para cancelación de ECO y
         traducción de códecs que ofrece digium
Preparando un Sistema para
Asterisk
Consideraciones respecto a rendimiento

    Observar los puertos PCI
Preparando un Sistema para
Asterisk
Consideraciones adicionales:

    Fuentes de poder

    Switch PoE

    Medio Ambiente
     
         Humedad
     
         Temperatura


    Puesta a Tierra

    Seguridad
Requerimientos de
           Hardware


    No indispensable:

    Tarjeta de telefonía Analoga TDM400p (4
    FXS & FXO), TDM2400p (24 FXS & FXO)

    Tarjeta de telefonía Digital TE205p (2 E1
En un ambiente netamente IP solo se necesita cargar
 el modulo ztdummy (USB timing)
Requerimientos de software


    Primero debemos averiguar la versión
    exacta de nuestro kernel con el comando:
    uname -a
    deberíamos ver algo como:

    [root@asterisk ~]# uname -a
    Linux asterisk.fiec.espol.edu.ec 2.6.18-8.el5
    #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686
    i686 i386 GNU/Linux
Requerimientos de software

    Luego deberíamos verificar si tenemos instaladas las
    fuentes del kernel, para ello utilizamos el comando rpm -q
    kernel-devel, deberiamos ver algo como esto:

    [root@asterisk ~]# rpm -q kernel-devel
    kernel-devel-2.6.18-8.el5

    Si no están instaladas podemos hacerlo con yum de la
    siguiente forma:

    yum install kernel-devel
Requerimientos de software
   Ahora si, debemos ejecutar los siguientes comandos para
    verificar si tenemos instalados los paquetes:

    rpm -q bison
    rpm -q bison-devel
    rpm -q ncurses
    rpm -q ncurses-devel
    rpm -q zlib
    rpm -q zlib-devel
    rpm -q openssl
    rpm -q openssl-devel
    rpm -q gnutls-devel
    rpm -q gcc
    rpm -q gcc-c++
Requerimientos de software

    Si alguno de estos paquetes falta, lo instalamos con
    yum install nombre-del-paquete

    por ejemplo:

    [root@asterisk ~]# rpm -q gnutls-devel
    package gnutls-devel is not installed
    [root@asterisk ~]# yum install gnutls-devel
Requerimientos de software
   5.- Un paso más antes de empezar con la instalación, CentOS no
    instala las fuentes del kernel en el directorio /usr/src/linux como
    esta escrito en los Makefile de Zaptel y Asterisk, para ello nos
    vamos a /usr/src/ y creamos un link llamado linux hacia el
    directorio con las fuentes del kernel el cual esta ubicado en
    /usr/src/kernels/mi_version_del_kernel (aqui utilizamos la
    información obtenida del paso 2) estos son los resultados que
    esperamos:

    [root@asterisk ~]# cd /usr/src/
    [root@asterisk src]# ln -s kernels/2.6.18-8.el5-i686/      linux
    [root@asterisk src]# ll
    total 28
    drwxr-xr-x 2 root root 4096 jun 13 08:43 asterisk
    drwxr-xr-x 3 root root 4096 jun 12 13:17 kernels
    lrwxrwxrwx 1 root root 26 jun 13 09:12 linux -> kernels/2.6.18-8.el5-i686/
Asterisk add-ons


    cd /usr/src/asterisk-addons

    ./configure

    make

    make install
Opciones del inicio de
                asterisk

    asterisk –h muestra la ayuda


    Esta es una lista de las opciones mas usadas:

    -c Console, nos permite conectarnos a la consola de asterisk o CLI.

    -v Verbosity. Es usada para indicar el numero de lineas que queremos
    mostrar en el debug .

    -g Core dump. Si asterisk termina inesperdamente, crea un archivo de
    core en el que se puede determinar las causas de la falla

    -r Remote. Esto es usado para reconectarnos remotamente a un
    proceso de Asterisk que este corriendo con aterioridad
Directorios usados por
               asterisk
/etc/asterisk/

    Contiene los archivos de configuración de Asterisk
    (.conf). Sin embargo el archivo zaptel.conf se
    encuentra ubicado en el directorio /etc/.

    Cualquier otro software puede usar el hardware y el
    driver de zaptel, por lo tanto el archivo zaptel.conf
    no esta ubicado directamente en el directorio
    /etc/asterisk
Directorios usados por
               asterisk
/usr/lib/asterisk/modules/

    Este directorio contiene todos los módulos que asterisk
    puede llegar a cargar , dentro de este directorio se
    encuentran varias aplicaciones, codecs, formatos y canales
    usados por Asterisk. Por defecto Asterisk carga todos estos
    módulos al inicio. (modules.conf).

/var/lib/asterisk/

    Este directorio contiene el archivo astdb y una serie de
    subdirectorios. astdb contiene la información de la base de
    datos local de Asterisk, una especie de Registro de Win
Directorios usados por
               asterisk
Los subdirectorios dentro de /var/lib/asterisk son:

agi-bin/

    Contiene scripts personales

firmware/

    Contiene imágenes binarias de firmware de varios
    dispositivos compatibles con asterisk

images/

    Las aplicaciones que se comunican con canales que
    soportar imagenes, buscan en este directorio
Directorios usados por
               asterisk
keys/

    Aquí se guardan las llaves RSA que se utilizaran en las
    comunicaciones peer to peer (IAX2)

mohmp3/

    Las aplicaciones que usan music on hold buscaran por
    defecto los archivos de audio en este directorio

sounds/

    Aquí se buscan por defecto los sonidos básicos de asterisk
    reproducios por playback( ) y background( )
Directorios usados por
                 asterisk
/var/log/asterisk

    Como el nombre lo indica en esta carpeta asterisk
    guarda los logs o archivos de eventos
/var/log/asterisk/cdr-cvs

    Este directorio es usado para guardar los CDRs en
    un formato CVS o comma-separated value
/var/spool/asterisk/

    Este directorio contiene algunos subdirectorios, incluyendo outgoing/, qcall/,
    tmp/, y voicemail/. Asterisk monitorea estos directorios en busca de archivos de
    texto que contienen información respecto a requerimiento de llamadas.
Configuración inicial de
             Asterisk

    En esta primera parte vamos a asumir que
    tenemos una tarjeta Digium TDM11B es decir con 1
    puerto FXS y un puerto FXO. Los archivos que
    vamos a modificar son:
/etc/zaptel.conf

    En este archivo se hace la configuración de “bajo
    nivel” para la interfaz de hardware. Vamos a
    configurar un canal FXS y FXO. #ztcfg -vv
Configuración inicial de
             Asterisk
/etc/asterisk/zapata.conf

    En este archivo, vamos a configurar para Asterisk
    la interfaz de hardware, en otras palabras aquí
    configuraremos los canales analógicos.
    CLI>module reload chan_zap.so
/etc/asterisk/extensions.conf

    En este archivo se creara el plan de marcado, el
    primero que haremos será muy primitivo pero
    permitirá comprobar que el sistema funciona.
    CLI>module reload pbx_config.so
Configuración inicial de
             Asterisk
/etc/asterisk/sip.conf

    En este archivo configuraremos los canales SIP
    CLI>module reload chan_sip.so
/etc/asterisk/iax.conf

    En este archivo configuraremos los canales IAX
    CLI>module reload chan_iax2.so
Antes de empezar…

    Vamos a hacer un respaldo de nuestros archivos
    para ello en el terminal ejecutamos:

    cp   /etc/zaptel.conf zaptel.sample

    cp /etc/asterisk/zapata.conf zapata.sample

    cp /etc/asterisk/extensions.conf
    extensions.sample

    cp /etc/asterisk/sip.conf   sip.sample

    cp /etc/asterisk/iax.conf   iax.sample
FXS y FXO para Asterisk

Mas simple:

    Un puerto FXO no genera tonos de marcado, por el
    contrario los recibe.

    Un puerto FXS genera un tono de marcado y el voltaje
    necesario para hacer indicar a la estación que hay una
    llamada entrante.

    Los puerto son definidos en los archivos de configuración de
    acuerdo a la señalización que usan y en sentido contrario al
    tipo de puerto que físicamente son.

    Es decir un puerto FXS se define en la configuración como
    FXO y viceversa.
FXS y FXO para Asterisk


    En tarjetas Digium y en general el modulo FXS es
    verde, el FXO es rojo

    IMPORTANTE: Conectar la PSTN en un modulo
    verde puede destruir el modulo y hasta la tarjeta !!
TDM400P
          FXS Ports
                                      FXO Ports




                                      Fuente de Voltaje
Entradas RJ-11



                            PCI 2.2
Configuración de un canal
               FXO
Configuración del hardware en zaptel

    La siguiente configuración mínima define un canal fxo con
    señalización fxs:

    editamos /etc/zaptel.conf
     −
         fxsks=4
     −
         loadzone=us
     −
         defaultzone=us


     La primera línea define el tipo de señalización y el protocolo
    para el canal 4:

    Loopstart (ls)        Groundstart (gs)   Kewlstart (ks)
Configuración de un canal
               FXO

    La diferencia esta en la forma como el equipo remoto
    solicita el tono de marcado, en groundstart lo hace
    mandando momentáneamente a tierra la línea, loopstart lo
    hace en cambio usando un corto momentáneo para pedir
    tono de marcado. Kewlstart es lo mismo que loopstart pero
    es un poco mas eficiente en cuanto permite detectar
    desconexiones remotas.

    Kewlstart es el mas usado en las implementaciones de
    asterisk y funciona bien con las líneas de nuestra localidad.
Configuración de un canal
               FXO

    loadzone configura un grupo de indicaciones (determinadas
    en zonedata.c) relativas a los sonidos de la línea en
    determinada región o país, tales como tono de marcado,
    ciclos de timbrado, tono de ocupado, etc.

    defaultzone es usada si ninguna zona se ha especificado
    para un canal en particular

    Para comprobar los cambios hacemos ztcfg -vvv
Configuración de un canal
               FXO
Configuración del hardware en zapata

    Asterisk usa la información en /etc/asterisk/zapata.conf para
    determinar las configuraciones del hardware de telefonía
    instalado en el sistema.

    El archivo zapata.conf también controla las características y
    funcionalidades asociadas con los canales físicos: caller id,
    llamada en espera, cancelación de eco y muchas mas.
Configuración de un canal
                                 FXO
Configuración del hardware en zapata: /etc/asterisk/zapata.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=incoming ; llamadas entrantes se dirigen a [incoming] en extensions.conf
  signalling=fxs_ks ; Use señalizacion FXS para un canal FXO
  channel => 4       ; PSTN se conecta al puerto 4
Configuración de un canal
               FXO
Configuración del hardware en zapata

    La sección [channels] determina el método de señalización
    para los canales físicos y sus opciones.

    Cuando una opción es definida esta es heredada hacia
    abajo al resto del archivo.

    Un canal se define usando channel => , y cada definición
    del canal hereda todas las opciones definidas por encima de
    esa línea.

    usecallerid=yes habilita el caller ID
    hidecallerid=no
    No se ocultará el caller ID para las llamadas salientes.
Configuración de un canal
               FXO
Configuración del hardware en zapata

    callwaiting=no
    La llamada en espera es desactivada para una linea FXO

    threewaycalling=yes
    Permite que una llamada activa pueda ser puesta en espera
    con un hook flash luego podemos llamar a un tercero e
    invitarlo a la conversación con otro hook flash.

    transfer=yes
    Permite transferir llamadas con un hook flash; requiere que
    three-way calling este activada
Configuración de un canal
               FXO
Configuración del hardware en zapata

    echocancel=yes
       Habilita la cancelación de eco, se requiere
    especialmente en líneas análogas.

    echotraining=yes
        Le indica a asterisk que envíe un tono a través de la
    línea al inicio de la llamada para medir el eco y luego
    aprender de el mas rápidamente.

     Cuando una llamada ingresa a una interfaz FXO, Usted
    desearía que se realice alguna acción verdad ?
Configuración de un canal
               FXO
Configuración del hardware en zapata

    La acción a realizar es configurada dentro de un bloque de
    instrucciones llamado contexto el mismo que se configura
    en el extensions.conf.

    Las llamadas entrantes en la interfaz FXO son
    direccionadas al contexto incoming con la línea
    context=incoming.

    Finalmente como un canal FXO usa señalización FXS, la
    definimos en la linea signalling=fxs_ks
Configuración de un canal
            FXO
CONFIGURACION DEL DIALPLAN

 [incoming]
 ;las llamadas que provienen del puerto FXO son
 direccionadas a este contexto desde zapata.conf
 exten => s,1,Answer()
 exten => s,2,Echo()
Configuración de un canal
               FXS
   La configuración en muy similar a un canal FXO
Configuración del Hardware en zaptel.conf
      fxoks=1
    fxsks=4
    loadzone=us
    defaultzone=us

    ztcfg –vv:
    Zaptel Configuration
    ======================
    Channel map:
    Channel 01: FXO Kewlstart (Default) (Slaves: 01)
    Channel 02: FXS Kewlstart (Default) (Slaves: 02)
    2 channels configured.
Configuración de un canal
               FXS
Configuración del hardware en zapata.conf

   La configuración viene prácticamente a ser la misma con la adición de
    la línea inmediate=no y las líneas referentes al puerto fxs:
    [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
    inmediate=no
Configuración de un canal
               FXS
    ; definición de canales:

    context=internal  ; Usaremos el contexto [internal] para las
                      extensiones en el extensions.conf
    signalling=fxo_ks ; Use señalización FXO para un canal FXS
    channel => 1      ; teléfono conectado al puerto 1


    context=incoming    ; Las llamadas entrantes se dirigen hacia
                        [incoming] en elextensions.conf
    signalling=fxs_ks   ; Use señalización FXS para un canal FXO
    channel => 4        ; PSTN se conecta al puerto 4

Configuración de un canal
               FXS
CONFIGURACION DEL DIALPLAN


    Para probar la configuración que hemos realizado vamos a
    agregar las siguientes líneas a nuestro dial plan:

    [internal]
    exten => 611,1,Answer( )
    exten => 611,2,Echo( )
Configuración de un canal
                SIP

    El archivo /etc/asterisk/sip.conf empieza con la sección
    [general] que contiene las opciones por defecto y
    configuraciones de canal para todos los usuarios y peers
    definidos dentro del sip.conf.

    Podemos sobrescribir estas configuraciones para un
    usuario/peer especifico haciendo los cambios en la
    configuración de cada usuario/peer
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=internal   ; el contexto internal controla el comportamiento de
                     este canal
Configuración de un canal
                SIP
   srvlookup=yes
    Permite que asterisk use los registro DNS SRV para reenviar llamadas usando
    nombres de dominio
   [201]
    Los usuarios se definen entre [] y puede ser cualquier combinación
    alfanumerica
   type=friend
    Los usuarios pueden ser tipo user, peer o friend, user se utiliza para permitir que
    el usuario solo pueda recibir llamadas, peer para hacer llamadas salientes y
    friend ambas.
   secret=201
    Secret es el password usado para la autenticación
   qualify=yes
    Esta linea le permite a asterisk monitorear la latencia entre el usuario y el
        servidor por defecto hasta 2000 ms
Configuración de un canal
                SIP
   nat=no
    Si una extensión se encuentra a través de un dispositivo que realiza
    NAT se debe configurar nat=yes para forzar a Asterisk a ignorar la
    información de contacto de la extensión y usar la dirección desde la cual
    los paquetes son enviados.
   host=dynamic
    Requerirá que la extensión se registre para que asterisk sepa como
    alcanzar el teléfono. Para limitar el registro desde una sola dirección
    IP , colocamos esta en lugar de dynamic, en cambio si se setea
    host=static, no se requiere que el dispositivo se registre
   canreinvite=no
    Asterisk forza a los usuarios a mantenerse en el flujo de media, no
    permitiendo que los usuarios intercambien mensajes RTP directamente
Configuración del Cliente SIP

    En este curso utilizaremos como cliente SIP a X-lite, que
    podemos descargar de www.counterpath.com

    Una vez descargado debemos copiar el instalador a
    /usr/src/ y lo descomprimimos

    Abrimos un terminal, ingresamos a la carpeta que contiene
    el instalador con cd /usr/src/x-lite y cambiamos los permisos
    para el archivo con :
     −
         chmod +x xtensoftphone
     −
         ./xtensoftphone

    Realizamos el wizard de configuración del audio
Configuración del Cliente SIP
El plan de marcado

    El plan de marcado es único y se configura
    en /etc/asterisk/extensions.conf

    Es una lista de instrucciones que asterisk
    debe seguir

    El plan de marcado tiene 4 definiciones
    fundamentales: contexto, extensiones,
    prioridades y aplicaciones.
El plan de marcado: contexto

    Son secciones del plan de marcado

    Son grupos de extensiones “nombradas”

    Permite la interacción de diferentes partes
    del plan de marcado

    Una extensión definida en un contexto esta
    totalmente aislada de otra en otro contexto.

    En programación “subrutinas”

    Se definen así: [contexto] [general] [globals]
[general ] y [globals]

    [general]
    autofallthrough=no
    clearglobalvars=no
El plan de marcado:
                extensiones

    Es una instrucción que asterisk seguirá
    como consecuencia de una llamada entrante
    o por dígitos marcados en un canal activo
    −
        exten => nombre, prioridad, aplicación(p,q,r)
        exten => 101,1, Answer( )

    El nombre puede ser cualquier combinación
    alfanumérica: Juan, 101Juan, 282
El plan de marcado:
              extensiones

    Cada extensión tiene un nombre, puede
    tener algunos pasos, cada paso es una
    prioridad, la aplicación es el comando que
    ejecuta, una acción en la llamada.
    exten => 101,1, Answer( )
    exten => 101,2, Playback(hello-world)
    exten => 101,3, Hangup( )
El plan de marcado:
                prioridades

    Cada prioridad esta numerada secuencialmente
    empezando en 1, si se salta una prioridad asterisk
    no continuará.

    Prioridades no numeradas:
    exten => 101,1, Answer()
    exten => 101,n, Hacer_algo()
    exten => 101,n, Hacer_algo_mas()
    exten => 101,n, Hacer_ultimo_paso()
    exten => 101,n, Hangup()

    exten => 123,n(label),hacer_algo
Plan de marcado simple:
[incoming]
   exten => s,1,aplicacion( )
   exten => s,2,aplicacion( )
   exten => s,3,aplicacion( )
La extensión s

    Cuando una llamad entra a un contexto sin una
    extensión especifica de destino (por ejemplo una
    llamada a un puerto fxo) son recibidas
    automáticamente por la extensión s “start”
Las funciones Answer( ),
      Playback( ) y Hangup( )
[internal]
   exten => 555,1,Answer( )
   exten => 555,2,Playback(hello-world)
   exten => 555,3,Hangup( )
Playback(ruta_al_archivo/archivo)

    Solo reproduce el archivo de audio, no presta
    atención ni ejecuta acción alguna a los ingresos
    hachos por el dialpad, por defecto busca en
    /var/lib/asterisk/sounds/
Voces en Español

www.voipnovatos.es/voces/

    Descomprimir y copiar en
    /var/lib/asterisk/sounds

    Agregar la siguiente línea en las configuraciones
    globales de zapata.conf y sip.conf:
    language = es
Agregando lógica al Dialplan
[internal]
   exten => 555,1,Answer( )
   exten => 555,2,Background(enter-ext-of-person)
      exten => 1,1,Playback(digits/1)
      exten => 1,2,Goto(internal,555,1)
      exten => 2,1,Playback(digits/2)
      exten => 2,2,Goto(internal,555,1)
Agregando lógica al Dialplan
Background(ruta_al_archivo/archivo)

    A diferencia de Playback( ), cuando el llamante
    presiona una tecla (o serie de teclas) en el pad del
    teléfono, este interrumpe la reproducción de audio
    y lo envía a la extensión que corresponda de
    acuerdo al digito(s) presionados.

    Por ejemplo si el llamante presiona 5 asterisk deja
    de reproducir el audio y le pasa el control de la
    llamada a la primera prioridad de la extensión 5
    dentro del mismo contexto en que fue llamado
Agregando lógica al Dialplan
Goto(context, extension, prioridad)

    Esta aplicación hace fácil mover una llamada entre
    las distintas partes del dialplan.

    La sintaxis de la aplicación Goto() nos solicita que
    pasemos como argumentos: el contexto, extensión
    y prioridad del destino.

    En conjunto con background permiten la
    interacción con el usuario, su uso mas común es el
    los llamados menús de voz, auto atendedores o
    arboles telefónicos
Validando entradas y tiempos de
            espera

    Para no permitir el ingreso de extensiones
    invalidas(3 en nuestro ejemplo), usamos una
    extensión especial ( i )

    En cambio para el caso en que el usuario no
    ingrese una extensión después de un tiempo
    determinado (10 seg.) usamos la extensión t.

    Las llamadas serán enviadas a la extensión t si el
    llamante toma mucho tiempo en ingresar una
    extensión después que Backgrund() ha terminado
    de reproducir el archivo de audio
Validando entradas y tiempos de
            espera
[internal]
   exten => 555,1,Answer( )
   exten => 555,2,Background(enter-ext-of-person)
   exten => 1,1,Playback(digits/1)
   exten => 1,2,Goto(internal,555,1)
   exten => 2,1,Playback(digits/2)
   exten => 2,2,Goto(internal,555,1)
   exten => i,1,Playback(pbx-invalid)
   exten => i,2,Goto(internal,555,1)
   exten => t,1,Playback(vm-goodbye)
   exten => t,2,Hangup( )
Creación de 2 usuarios
             SIP
•
    De ahora en adelante vamos a trabajar en grupos de 3
    personas: 1 IPBX, 2 Usuarios
•
    Definir:
    Usuarios y passwords
    Direccion IP del Servidor
•
    Llenar el Reporte de instalación
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,Zap,IAX)
  un slash (/) y la fuente remota(tipicamente un
  numero o un usuario)
       exten => 123,1,Dial(Zap/1)
       exten => 123,1,Dial(SIP/201)
       exten => 123,1,Dial(Zap/1&Zap/2&Zap/3)
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
  llamar a esa extension, sino lo haria
  indefinidamente.
           exten => 123,1,Dial(Zap/1,10)
 Si el canal es contestado antes del timeout asterisk
 puentea ambos canales para permitir la
 comunicacion
Uso de la aplicacion Dial
Dial(tech/user, timeout, opcion)
  Si el destino no contesta, vencido el timeout,
  asterisk pasa a la siguiente prioridad
 Si el 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( )
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(Zap/1, ,r)
Uso de la aplicacion Dial
[incoming]
exten => 555,1,Answer( )
exten => 555,2,Background(enter-ext-of-person)
exten => 201,1,Dial(SIP/201,10,r)
exten => 201,2,Playback(vm-nobodyavail)
exten => 201,3,Hangup( )
exten => 201,102,Playback(tt-allbusy)
exten => 201,103,Hangup( )
exten => 202,1,Dial(SIP/johy,10,r)
exten => 202,2,Playback(vm-nobodyavail)
exten => 202,3,Hangup( )
exten => 202,102,Playback(tt-allbusy)
exten => 202,103,Hangup( )
exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(internal,555,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup( )
Vision de los Contextos
Vision de los Contextos
Contexto [incoming]
[incoming]
exten => s,1,Answer( )
exten => s,2,Background(enter-ext-of-person)

exten => 201,1,Dial(SIP/201,10)
exten => 201,2,Playback(vm-nobodyavail)
exten => 201,3,Hangup( )
exten => 201,102,Playback(tt-allbusy)
exten => 201,103,Hangup( )

exten => 202,1,Dial(SIP/202,10)
exten => 202,2,Playback(vm-nobodyavail)
exten => 202,3,Hangup( )
exten => 202,102,Playback(tt-allbusy)
exten => 202,103,Hangup( )

exten => i,1,Playback(pbx-invalid)
exten => i,2,Goto(incoming,s,1)
exten => t,1,Playback(vm-goodbye)
exten => t,2,Hangup( )
Contexto [internal]

[internal]
exten => 201,1,Dial(SIP/201,20,r)
exten => 202,1,Dial(SIP/202,20,r)



          Uso de variables

GABRIEL=SIP/201
exten => 201,1,Dial(${GABRIEL},10,r)
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=Zap/1))
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
Agregando Variables al dial plan
  [globals]
  GABRIEL=SIP/201
  JOHN=SIP/202

  [incoming]
  exten => s,1,Answer( )
  exten => s,2,Background(enter-ext-of-person)
  exten => 201,1,Dial(${GABRIEL},10,r)
  exten => 201,2,Playback(vm-nobodyavail)
  exten => 201,3,Hangup( )
  exten => 201,102,Playback(tt-allbusy)
  exten => 201,103,Hangup( )
  exten => 202,1,Dial(${JOHN},10,r)
  exten => 202,2,Playback(vm-nobodyavail)
  exten => 202,3,Hangup( )
  exten => 202,102,Playback(tt-allbusy)
  exten => 202,103,Hangup( )
Agregando Variables al dial plan
  exten => i,1,Playback(pbx-invalid)
  exten => i,2,Goto(incoming,s,1)
  exten => t,1,Playback(vm-goodbye)
  exten => t,2,Hangup( )

  [internal]
  exten => 201,1,Dial(${GABRIEL},20,r)
  exten => 202,1,Dial(${JHON},20,r)
Coincidencia de Patrones
•
    Es útil para tener que evitar escribir una extensión
para cada uno de los números a los que tenemos
que marcar(sobretodo los números externos a la
organización)
Sintaxis
•
    Siempre empiezan con el underscore _
•
    Luego podemos usar uno o varios de los siguientes
caracteres:
     •
         X Representa cualquier digito del 0 al 9
     •
         Z Representa cualquier digito del 1 al 9
     •
         N Representa cualquier digito del 2 al 9
     •
         [15-7] Representa cualquier digito o rango de
         digitos en este caso representa al 1,5,6 o 7
Coincidencia de Patrones
Sintaxis
•
    El punto (.) representa uno o mas caracteres es
conocido como el wilcard.
•
    Para hacer uso del pattern matching simplemente
lo colocamos en el lugar del nombre de una
extension. Ejemplo:


      exten => _NXX,1,Playback(auth-thankyou))
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
Coincidencia de Patrones
Sintaxis
                     Porta:
      exten => _09[732]XXXXXX,1, Acción
      exten => _08[567]XXXXXX,1, Acción


                 Internacional:
           exten => _001. ,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 ?
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 => _8XX,1,SayDigits(${EXTEN})


     exten => _8XX,1,SayDigits(${EXTEN:1})


     exten => _8XX,1,SayDigits(${EXTEN:-1))
Contextos para llamadas
         salientes
[globals]
GABRIEL=SIP/201
JOHY=SIP/202
PACIFICTEL=Zap/4

[salida-local]
ignorepat => 9
exten => _92XXXXXX,1,Dial(${PACIFTEL}/${EXTEN:1},10,r)
exten => _92XXXXXX,2,Congestion( )
exten => _92XXXXXX,102,Congestion( )
exten => 911,1,Dial(${PACIFICTEL}/911)
exten => 9911,1,Dial(${PACIFICTEL}/911)
Contextos para llamadas
         salientes
[globals]
GABRIEL=SIP/201
JOHY=SIP/202
PACIFICTEL=Zap/4
PORTA=Zap/3

[salida-porta]
ignorepat => 9
exten => _9097XXXXXX,1,Dial(${PORTA}/${EXTEN:1},10,r)
exten => _9097XXXXXX,2,Congestion( )
exten => _9097XXXXXX,102,Congestion( )
Contextos para llamadas
         salientes
                    include => context

[internal]
include => salida-local
include => salida-porta
exten => 201,1,Dial(${GABRIEL},,r)
exten => 202,1,Dial(${JOHY},,r)

[salida-local]
ignorepat => 9
exten => _92XXXXXX,1,Dial(${PACIFTEL}/${EXTEN:1},10,r)
exten => _92XXXXXX,2,Congestion( )
exten => _92XXXXXX,102,Congestion( )
exten => 911,1,Dial(${PACIFICTEL}/911)
exten => 9911,1,Dial(${PACIFICTEL}/911)
Contextos para llamadas
         salientes
                  include => context

[salida-porta]
ignorepat => 9
exten => _9097XXXXXX,1,Dial(${PORTA}/${EXTEN:1},10,r)
exten => _9097XXXXXX,2,Congestion( )
exten => _9097XXXXXX,102,Congestion( )
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
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]
language=es
201 => 201,Gabriel Astudillo,gastudillo@gmail.com,84
519925@im.movistar.com.ec,tz=central|attach=yes
Voicemail

Dentro de [internals]

exten => 201,1,Dial(${GABRIEL},10,r)
exten => 201,2,VoiceMail(u201@default)
exten => 201,102,VoiceMail(b201@default)

Acceso al voicemail:

exten => 500,1,VoiceMailMain( )
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,incoming,f)
exten => 9,1,Directory(default,incoming)

Si el llamante presiona 8 obtendrá un directorio ordenado
por nombres y si presiona 9 el llamante obtendrá un
directorio ordenado por apellidos
Conferencias con MeetMe( )
Ventajas:
•
  Posibilidad de crear conferencias con protección de
password.
•
  Administración de conferencias (silenciar, bloquear, kick)
•
  La opción de silenciar a todos los participantes, menos a
uno.
•
  Creación estática o dinámica de conferencias

•
    En /etc/asterisk/meetme.conf editar:

[rooms]
conf => 600
Conferencias con MeetMe( )
Para hacerlo disponible desde el dialplan usamos la
funcion MeetMe( ), la cual recibe 3 parametros:

  el nombre del cuarto de conferencias tal como fue
definido en meetme.conf

  una o mas opciones

  el password para acceder a la conferencia

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

•
  i    información de quien entra y quien sale
•
  M música en espera si solo hay una persona en la
    conferencia
•
  p    opción de presionar # para salir de la conferencia
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(${GABRIEL},10,r)
exten => 201,2,VoiceMail(u101@default)
exten => 201,102,VoiceMail(b101@default)

Imaginen tener que hacer esto para una organización de
100 usuarios !!!!! O tener que agregar una nueva
caracteristica a todos los usuarios
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(${GABRIEL},10,r)
exten => s,2,VoiceMail(u201@default)
exten => s,102,VoiceMail(b201@default)

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
La única limitante es que para definir un macro siempre
debemos utilizar la extensión especial s
Como llamar a una Macro

              Macro(nombre,arg1,arg2...)

         [internals]
         exten => 201,1,Macro(extensiones,arg1, arg2)

Al momento de llamar a la función Macro se definen 4
variables de canal que nos van a permitir generalizar su
uso:

               ${MACRO_CONTEXT}
               ${MACRO_EXTEN}
               ${MACRO_PRIORITY}
               ${ARGn}
Como llamar a una Macro

[macro-extensiones]
exten => s,1,Dial(${GABRIEL},10,r)
exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)
exten => s,102,VoiceMail(b${MACRO_EXTEN}@default)

[internals]
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 ?
Aplicando la macro al dialplan

[macro-extensiones]
exten => s,1,Dial(${ARG1},10,r)
exten => s,2,VoiceMail(u${MACRO_EXTEN}@default)
exten => s,102,VoiceMail(b${MACRO_EXTEN}@default)

[internal]
exten => 101,1,Macro(extensiones,${GABRIEL})
exten => 102,1,Macro(extensiones,${MARIA})
exten => 103,1,Macro(extensiones,${JOSE})
Expresiones y Manejo de
              Variables
Expresiones
Se definen como un conjuto de varibales, operadores y
valores que se colocan juntas para obtener un resultado.

                      $[expresion]

Ejemplos:

                    $[${CONT} + 1]
                    $[${CONT} / 2]

Cuando Asterisk encuentra una expresion, reemplaza
toda la expresion por el valor resultante. Es importante
notar que antes de hacer esto primero evalua el valor de
las varibles
Expresiones y Manejo de
              Variables
    exten => 321,1,Set(CONT=3)
    exten => 321,2,Set(NEWCONT=$[${CONT} + 1])
    exten => 321,3,SayNumber(${NEWCONT})


    exten => 321,2,Set(NEWCONT=$[3 + 1])
    exten => 321,2,Set(NEWCONT=4)

Finalmente el valor de 4 es asignado a la variables
NEWCONT a través de la función Set( )

Ojo:
exten => 123,1,Set(TEST=$[2+1])
No es lo mismo que :
exten => 234,1,Set(TEST=$[2 + 1])
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
Ramificación Condicional
Aplicación GotoIf()
Esta aplicación es la calve para la ramificación
condicional, tiene una sintaxis especial llamada la sintaxis
condicional:

         GotoIf(expression?destination1:destination2)

Si la expresion es verdadera salta al destino uno, si es
falsa salta al destino 2 pero…
Que es verdadero y que es falso ?
•
  Un carácter en blanco o el numero cero (0) significan
falso, cualquier otra cosa es verdadero
El destino puede ser:
•
 Una prioridad dentro de la misma extensión Ej: 3
•
 Una extensión y prioridad dentro del mismo contexto (123,10)
•
 Un contexto, extensión y prioridad Ej: incoming,123,10
•
 Una prioridad nombrada dentro de la misma extensión
Ramificación Condicional
Aplicación GotoIf()

exten => 345,1,Set(TEST=1)

exten => 345,2,GotoIf($[${TEST} = 1]?10:20)

exten => 345,10,Playback(weasels-eaten-phonesys)

exten => 345,20,Playback(office-iguanas)
Ramificación Condicional
Aplicación GotoIf()

exten => 123,1,Set(COUNT=10)
exten => 123,2,GotoIf($[${COUNT} > 0]?:10)
exten => 123,3,SayNumber(${COUNT})
exten => 123,4,Set(COUNT=$[${COUNT} - 1])
exten => 123,5,Goto(2)
exten => 123,10,Hangup( )


El caso de la Ex-enamorada

exten => 123,1,GotoIf($[${CALLERID(num)} = 2397815]?20:10)
exten => 123,10,Dial(Zap/4)
exten => 123,20,Playback(abandon-all-hope)
exten => 123,21,Hangup( )
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.
Ramificación Condicional
             basada en fechas
Aplicación GotoIfTime()

       GotoIfTime(times,days_of_week,days_of_month,months?label)

El argumento label puede ser cualquiera de los siguientes:

•
    Una prioridad dentro de la misma extensión Ej: 3
•
    Una extensión y prioridad dentro del mismo contexto (123,10)
•
    Un contexto, extensión y prioridad Ej: incoming,123,10
•
    Una prioridad nombrada dentro de la misma extensión
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)
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( )
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

Más contenido relacionado

La actualidad más candente

Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)
Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)
Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)Anthony Escalona
 
Seguridad en SIstemas Operativos *Nix
Seguridad en SIstemas Operativos *NixSeguridad en SIstemas Operativos *Nix
Seguridad en SIstemas Operativos *NixJosé Moreno
 
Sample exam information_security_foundation_latin_american_spanish
Sample exam information_security_foundation_latin_american_spanishSample exam information_security_foundation_latin_american_spanish
Sample exam information_security_foundation_latin_american_spanishedu25
 
Normas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de SoftwareNormas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de SoftwareEvelinBermeo
 
Tema Ingenieria Del Software
Tema Ingenieria Del SoftwareTema Ingenieria Del Software
Tema Ingenieria Del Softwaregueste0af42
 
Ingenieria de requerimientos 1
Ingenieria de requerimientos 1Ingenieria de requerimientos 1
Ingenieria de requerimientos 1jmpov441
 
herramientas case
herramientas caseherramientas case
herramientas casetomaspetto
 
Iso iec 14598
Iso iec 14598Iso iec 14598
Iso iec 14598junior
 
3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.Humberto Chalate Jorge
 
Algoritmo de enrutamiento
Algoritmo de enrutamientoAlgoritmo de enrutamiento
Algoritmo de enrutamientoRaul Nunez
 
Modelo de madurez de aseguramiento de software
Modelo de madurez de aseguramiento de softwareModelo de madurez de aseguramiento de software
Modelo de madurez de aseguramiento de softwareSoftware Guru
 
Red hat linux
Red hat linuxRed hat linux
Red hat linuxluiiis1
 

La actualidad más candente (18)

Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)
Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)
Norma ISO 12207 y Normas CMMI (Informe. Equipo 3)
 
Seguridad en SIstemas Operativos *Nix
Seguridad en SIstemas Operativos *NixSeguridad en SIstemas Operativos *Nix
Seguridad en SIstemas Operativos *Nix
 
Sample exam information_security_foundation_latin_american_spanish
Sample exam information_security_foundation_latin_american_spanishSample exam information_security_foundation_latin_american_spanish
Sample exam information_security_foundation_latin_american_spanish
 
Normas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de SoftwareNormas y Estándares de calidad para el desarrollo de Software
Normas y Estándares de calidad para el desarrollo de Software
 
Metodologias agiles
Metodologias agilesMetodologias agiles
Metodologias agiles
 
Tema Ingenieria Del Software
Tema Ingenieria Del SoftwareTema Ingenieria Del Software
Tema Ingenieria Del Software
 
Ensamblador y lenguaje c
Ensamblador y lenguaje cEnsamblador y lenguaje c
Ensamblador y lenguaje c
 
Ingenieria de requerimientos 1
Ingenieria de requerimientos 1Ingenieria de requerimientos 1
Ingenieria de requerimientos 1
 
MetodologíAs Y Ciclos De Vida
MetodologíAs Y Ciclos De VidaMetodologíAs Y Ciclos De Vida
MetodologíAs Y Ciclos De Vida
 
herramientas case
herramientas caseherramientas case
herramientas case
 
Iso iec 14598
Iso iec 14598Iso iec 14598
Iso iec 14598
 
3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.3. Representación del conocimiento y razonamiento.
3. Representación del conocimiento y razonamiento.
 
Algoritmo de enrutamiento
Algoritmo de enrutamientoAlgoritmo de enrutamiento
Algoritmo de enrutamiento
 
Modelo de madurez de aseguramiento de software
Modelo de madurez de aseguramiento de softwareModelo de madurez de aseguramiento de software
Modelo de madurez de aseguramiento de software
 
2 modelos de la ingenieria de software
2  modelos de la ingenieria de software2  modelos de la ingenieria de software
2 modelos de la ingenieria de software
 
Red hat linux
Red hat linuxRed hat linux
Red hat linux
 
Manual del Partition wizard
Manual del Partition wizardManual del Partition wizard
Manual del Partition wizard
 
Softwares de-monitoreo-y-auditoria-de-redes
Softwares de-monitoreo-y-auditoria-de-redesSoftwares de-monitoreo-y-auditoria-de-redes
Softwares de-monitoreo-y-auditoria-de-redes
 

Similar a Sistemas de VoIP con Asterisk

VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010Gabriel Astudillo
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asteriskpavel
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asteriskpavel
 
Debian Lenny Asterisk
Debian Lenny AsteriskDebian Lenny Asterisk
Debian Lenny Asteriskmanzurek
 
28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfigAprende Viendo
 
Instalacion de Asterisk y freePBX en CentOS
Instalacion de Asterisk y freePBX en CentOSInstalacion de Asterisk y freePBX en CentOS
Instalacion de Asterisk y freePBX en CentOSmanzurek
 
Compilacion del Kernel a la Debian
Compilacion del Kernel a la DebianCompilacion del Kernel a la Debian
Compilacion del Kernel a la DebianStefan Rivera
 
Sistema operativo FreeBSD
Sistema operativo FreeBSDSistema operativo FreeBSD
Sistema operativo FreeBSDDraven Draven
 
Sistema operativo FreeBSD
Sistema operativo FreeBSDSistema operativo FreeBSD
Sistema operativo FreeBSDArturo Noriega
 
Manual asterisk oigaa
Manual asterisk oigaaManual asterisk oigaa
Manual asterisk oigaaaiep
 
Tutorial asterisk
Tutorial asteriskTutorial asterisk
Tutorial asteriskmanolinxxx
 
Ltsp linux terminal server project-
Ltsp  linux terminal server project-Ltsp  linux terminal server project-
Ltsp linux terminal server project-jeysonh
 
Instalacion de ubuntu y asterisk
Instalacion de ubuntu y asteriskInstalacion de ubuntu y asterisk
Instalacion de ubuntu y asteriskStar Bye
 

Similar a Sistemas de VoIP con Asterisk (20)

VoIP con Asterisk 2009
VoIP con Asterisk 2009VoIP con Asterisk 2009
VoIP con Asterisk 2009
 
VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010VoIP con Asterisk Marzo 2010
VoIP con Asterisk Marzo 2010
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asterisk
 
Slackware asterisk
Slackware asteriskSlackware asterisk
Slackware asterisk
 
Debian Lenny Asterisk
Debian Lenny AsteriskDebian Lenny Asterisk
Debian Lenny Asterisk
 
28 el directorio sysconfig
28  el directorio sysconfig28  el directorio sysconfig
28 el directorio sysconfig
 
05.asterisk instalacion
05.asterisk instalacion05.asterisk instalacion
05.asterisk instalacion
 
Instalacion de Asterisk y freePBX en CentOS
Instalacion de Asterisk y freePBX en CentOSInstalacion de Asterisk y freePBX en CentOS
Instalacion de Asterisk y freePBX en CentOS
 
Conferencia universidad 2010
Conferencia universidad 2010Conferencia universidad 2010
Conferencia universidad 2010
 
Compilacion del Kernel a la Debian
Compilacion del Kernel a la DebianCompilacion del Kernel a la Debian
Compilacion del Kernel a la Debian
 
Sistema operativo FreeBSD
Sistema operativo FreeBSDSistema operativo FreeBSD
Sistema operativo FreeBSD
 
Sistema operativo FreeBSD
Sistema operativo FreeBSDSistema operativo FreeBSD
Sistema operativo FreeBSD
 
FreeBSD Linux
FreeBSD LinuxFreeBSD Linux
FreeBSD Linux
 
Planes de llamada
Planes de llamadaPlanes de llamada
Planes de llamada
 
Manual asterisk oigaa
Manual asterisk oigaaManual asterisk oigaa
Manual asterisk oigaa
 
Tutorial asterisk
Tutorial asteriskTutorial asterisk
Tutorial asterisk
 
CLASE 10 ASTERISK.pdf
CLASE 10 ASTERISK.pdfCLASE 10 ASTERISK.pdf
CLASE 10 ASTERISK.pdf
 
Ltsp linux terminal server project-
Ltsp  linux terminal server project-Ltsp  linux terminal server project-
Ltsp linux terminal server project-
 
Bd practica 1.10
Bd practica 1.10Bd practica 1.10
Bd practica 1.10
 
Instalacion de ubuntu y asterisk
Instalacion de ubuntu y asteriskInstalacion de ubuntu y asterisk
Instalacion de ubuntu y asterisk
 

Más de Gabriel Astudillo

Más de Gabriel Astudillo (9)

TecnoIP 3
TecnoIP 3TecnoIP 3
TecnoIP 3
 
Tecnología IP Leccion 2
Tecnología IP Leccion 2Tecnología IP Leccion 2
Tecnología IP Leccion 2
 
Tecnología IP
Tecnología IP Tecnología IP
Tecnología IP
 
Tecnologías de VoIP
Tecnologías de VoIPTecnologías de VoIP
Tecnologías de VoIP
 
Certificaciones en comunicaciones inalámbricas
Certificaciones en comunicaciones inalámbricasCertificaciones en comunicaciones inalámbricas
Certificaciones en comunicaciones inalámbricas
 
Implementado Sistemas de VoIP con FOSS
Implementado Sistemas de VoIP con FOSSImplementado Sistemas de VoIP con FOSS
Implementado Sistemas de VoIP con FOSS
 
Introducción
IntroducciónIntroducción
Introducción
 
Sistemas de VoIP con Asterisk: Modulo I
Sistemas de VoIP con Asterisk: Modulo ISistemas de VoIP con Asterisk: Modulo I
Sistemas de VoIP con Asterisk: Modulo I
 
Linux Para Asterisk
Linux Para AsteriskLinux Para Asterisk
Linux Para Asterisk
 

Último

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 

Último (20)

La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 

Sistemas de VoIP con Asterisk

  • 1. Sistemas de VoIP con Asterisk Modulo III
  • 2. ¿ Que es Asterisk?  Asterisk es una central telefónica IP (IPBX) de código abierto que corre sobre linux y que es compatible con la mayoría de tecnologías de VoIP (SiP, H323, MGCP, IAX, ) y de telefonía tradicional Análoga y Digital (TDM, ISDN, BRI, PRI)  Brinda todos los servicios de una PBX propietaria tradicional
  • 3. Preparando un Sistema para Asterisk Selección de Hardware para el Servidor  En términos de requerimientos asterisk es similar a aquellas aplicaciones embebidas y de tiempo real  En diseños de grandes aplicaciones es común observar una distribución de de funcionalidades entre múltiples servidores  La flexibilidad es una de las razones de peso por las cuales los negocios de rápido crecimiento toman la decisión de implementarlo
  • 4. Preparando un Sistema para Asterisk Selección de Hardware para el Servidor
  • 5. Preparando un Sistema para Asterisk Selección de Hardware para el Servidor  La selección del hardware puede ser muy sencilla, como muy complicada al mismo tiempo:  Sencilla porque cualquier plataforma x86 puede servir  Complicada porque el rendimiento del sistema dependerá del cuidado que se tenga al momento de seleccionar el hardware  Si estamos implementando un sistemas de hobbie o de aprendizaje podemos obviar este diseño, pero si se trata de una solución corporativa es importante tener en cuenta las siguientes diapositivas
  • 6. Preparando un Sistema para Asterisk Consideraciones respecto a rendimiento  El máximo numero de conexiones simultaneas:  Cada conexión incrementa carga al sistema  El porcentaje del trafico que requiere un intensivo procesamiento DSP cuando se usa códecs de compresión  El procesamiento DSP que asterisk hace por software tiene un impacto directo en el numero de llamadas concurrentes que se pueden soportar. Ejem: 50 G.711 vs. 10 G.729  Que nivel de conferencia va a brindar el sistema y con que frecuencia se hará
  • 7. Preparando un Sistema para Asterisk Consideraciones respecto a rendimiento  Cancelación de Eco :  Se utiliza cuando se utilizan redes PSTN, es una función matemática por lo tanto aumenta los recursos de procesamiento  Como alternativa existen las tarjetas para cancelación de ECO y traducción de códecs que ofrece digium
  • 8. Preparando un Sistema para Asterisk Consideraciones respecto a rendimiento  Observar los puertos PCI
  • 9. Preparando un Sistema para Asterisk Consideraciones adicionales:  Fuentes de poder  Switch PoE  Medio Ambiente  Humedad  Temperatura  Puesta a Tierra  Seguridad
  • 10. Requerimientos de Hardware  No indispensable:  Tarjeta de telefonía Analoga TDM400p (4 FXS & FXO), TDM2400p (24 FXS & FXO)  Tarjeta de telefonía Digital TE205p (2 E1 En un ambiente netamente IP solo se necesita cargar el modulo ztdummy (USB timing)
  • 11. Requerimientos de software  Primero debemos averiguar la versión exacta de nuestro kernel con el comando: uname -a deberíamos ver algo como: [root@asterisk ~]# uname -a Linux asterisk.fiec.espol.edu.ec 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686 i686 i386 GNU/Linux
  • 12. Requerimientos de software  Luego deberíamos verificar si tenemos instaladas las fuentes del kernel, para ello utilizamos el comando rpm -q kernel-devel, deberiamos ver algo como esto: [root@asterisk ~]# rpm -q kernel-devel kernel-devel-2.6.18-8.el5  Si no están instaladas podemos hacerlo con yum de la siguiente forma: yum install kernel-devel
  • 13. Requerimientos de software  Ahora si, debemos ejecutar los siguientes comandos para verificar si tenemos instalados los paquetes: rpm -q bison rpm -q bison-devel rpm -q ncurses rpm -q ncurses-devel rpm -q zlib rpm -q zlib-devel rpm -q openssl rpm -q openssl-devel rpm -q gnutls-devel rpm -q gcc rpm -q gcc-c++
  • 14. Requerimientos de software  Si alguno de estos paquetes falta, lo instalamos con yum install nombre-del-paquete por ejemplo: [root@asterisk ~]# rpm -q gnutls-devel package gnutls-devel is not installed [root@asterisk ~]# yum install gnutls-devel
  • 15. Requerimientos de software  5.- Un paso más antes de empezar con la instalación, CentOS no instala las fuentes del kernel en el directorio /usr/src/linux como esta escrito en los Makefile de Zaptel y Asterisk, para ello nos vamos a /usr/src/ y creamos un link llamado linux hacia el directorio con las fuentes del kernel el cual esta ubicado en /usr/src/kernels/mi_version_del_kernel (aqui utilizamos la información obtenida del paso 2) estos son los resultados que esperamos: [root@asterisk ~]# cd /usr/src/ [root@asterisk src]# ln -s kernels/2.6.18-8.el5-i686/ linux [root@asterisk src]# ll total 28 drwxr-xr-x 2 root root 4096 jun 13 08:43 asterisk drwxr-xr-x 3 root root 4096 jun 12 13:17 kernels lrwxrwxrwx 1 root root 26 jun 13 09:12 linux -> kernels/2.6.18-8.el5-i686/
  • 16. Asterisk add-ons  cd /usr/src/asterisk-addons  ./configure  make  make install
  • 17. Opciones del inicio de asterisk  asterisk –h muestra la ayuda  Esta es una lista de las opciones mas usadas:  -c Console, nos permite conectarnos a la consola de asterisk o CLI.  -v Verbosity. Es usada para indicar el numero de lineas que queremos mostrar en el debug .  -g Core dump. Si asterisk termina inesperdamente, crea un archivo de core en el que se puede determinar las causas de la falla  -r Remote. Esto es usado para reconectarnos remotamente a un proceso de Asterisk que este corriendo con aterioridad
  • 18. Directorios usados por asterisk /etc/asterisk/  Contiene los archivos de configuración de Asterisk (.conf). Sin embargo el archivo zaptel.conf se encuentra ubicado en el directorio /etc/.  Cualquier otro software puede usar el hardware y el driver de zaptel, por lo tanto el archivo zaptel.conf no esta ubicado directamente en el directorio /etc/asterisk
  • 19. Directorios usados por asterisk /usr/lib/asterisk/modules/  Este directorio contiene todos los módulos que asterisk puede llegar a cargar , dentro de este directorio se encuentran varias aplicaciones, codecs, formatos y canales usados por Asterisk. Por defecto Asterisk carga todos estos módulos al inicio. (modules.conf). /var/lib/asterisk/  Este directorio contiene el archivo astdb y una serie de subdirectorios. astdb contiene la información de la base de datos local de Asterisk, una especie de Registro de Win
  • 20. Directorios usados por asterisk Los subdirectorios dentro de /var/lib/asterisk son: agi-bin/  Contiene scripts personales firmware/  Contiene imágenes binarias de firmware de varios dispositivos compatibles con asterisk images/  Las aplicaciones que se comunican con canales que soportar imagenes, buscan en este directorio
  • 21. Directorios usados por asterisk keys/  Aquí se guardan las llaves RSA que se utilizaran en las comunicaciones peer to peer (IAX2) mohmp3/  Las aplicaciones que usan music on hold buscaran por defecto los archivos de audio en este directorio sounds/  Aquí se buscan por defecto los sonidos básicos de asterisk reproducios por playback( ) y background( )
  • 22. Directorios usados por asterisk /var/log/asterisk  Como el nombre lo indica en esta carpeta asterisk guarda los logs o archivos de eventos /var/log/asterisk/cdr-cvs  Este directorio es usado para guardar los CDRs en un formato CVS o comma-separated value /var/spool/asterisk/  Este directorio contiene algunos subdirectorios, incluyendo outgoing/, qcall/, tmp/, y voicemail/. Asterisk monitorea estos directorios en busca de archivos de texto que contienen información respecto a requerimiento de llamadas.
  • 23. Configuración inicial de Asterisk  En esta primera parte vamos a asumir que tenemos una tarjeta Digium TDM11B es decir con 1 puerto FXS y un puerto FXO. Los archivos que vamos a modificar son: /etc/zaptel.conf  En este archivo se hace la configuración de “bajo nivel” para la interfaz de hardware. Vamos a configurar un canal FXS y FXO. #ztcfg -vv
  • 24. Configuración inicial de Asterisk /etc/asterisk/zapata.conf  En este archivo, vamos a configurar para Asterisk la interfaz de hardware, en otras palabras aquí configuraremos los canales analógicos. CLI>module reload chan_zap.so /etc/asterisk/extensions.conf  En este archivo se creara el plan de marcado, el primero que haremos será muy primitivo pero permitirá comprobar que el sistema funciona. CLI>module reload pbx_config.so
  • 25. Configuración inicial de Asterisk /etc/asterisk/sip.conf  En este archivo configuraremos los canales SIP CLI>module reload chan_sip.so /etc/asterisk/iax.conf  En este archivo configuraremos los canales IAX CLI>module reload chan_iax2.so
  • 26. Antes de empezar… Vamos a hacer un respaldo de nuestros archivos para ello en el terminal ejecutamos:  cp /etc/zaptel.conf zaptel.sample  cp /etc/asterisk/zapata.conf zapata.sample  cp /etc/asterisk/extensions.conf extensions.sample  cp /etc/asterisk/sip.conf sip.sample  cp /etc/asterisk/iax.conf iax.sample
  • 27. FXS y FXO para Asterisk Mas simple:  Un puerto FXO no genera tonos de marcado, por el contrario los recibe.  Un puerto FXS genera un tono de marcado y el voltaje necesario para hacer indicar a la estación que hay una llamada entrante.  Los puerto son definidos en los archivos de configuración de acuerdo a la señalización que usan y en sentido contrario al tipo de puerto que físicamente son.  Es decir un puerto FXS se define en la configuración como FXO y viceversa.
  • 28. FXS y FXO para Asterisk  En tarjetas Digium y en general el modulo FXS es verde, el FXO es rojo  IMPORTANTE: Conectar la PSTN en un modulo verde puede destruir el modulo y hasta la tarjeta !!
  • 29. TDM400P FXS Ports FXO Ports Fuente de Voltaje Entradas RJ-11 PCI 2.2
  • 30. Configuración de un canal FXO Configuración del hardware en zaptel La siguiente configuración mínima define un canal fxo con señalización fxs:  editamos /etc/zaptel.conf − fxsks=4 − loadzone=us − defaultzone=us  La primera línea define el tipo de señalización y el protocolo para el canal 4: Loopstart (ls) Groundstart (gs) Kewlstart (ks)
  • 31. Configuración de un canal FXO  La diferencia esta en la forma como el equipo remoto solicita el tono de marcado, en groundstart lo hace mandando momentáneamente a tierra la línea, loopstart lo hace en cambio usando un corto momentáneo para pedir tono de marcado. Kewlstart es lo mismo que loopstart pero es un poco mas eficiente en cuanto permite detectar desconexiones remotas.  Kewlstart es el mas usado en las implementaciones de asterisk y funciona bien con las líneas de nuestra localidad.
  • 32. Configuración de un canal FXO  loadzone configura un grupo de indicaciones (determinadas en zonedata.c) relativas a los sonidos de la línea en determinada región o país, tales como tono de marcado, ciclos de timbrado, tono de ocupado, etc.  defaultzone es usada si ninguna zona se ha especificado para un canal en particular  Para comprobar los cambios hacemos ztcfg -vvv
  • 33. Configuración de un canal FXO Configuración del hardware en zapata  Asterisk usa la información en /etc/asterisk/zapata.conf para determinar las configuraciones del hardware de telefonía instalado en el sistema.  El archivo zapata.conf también controla las características y funcionalidades asociadas con los canales físicos: caller id, llamada en espera, cancelación de eco y muchas mas.
  • 34. Configuración de un canal FXO Configuración del hardware en zapata: /etc/asterisk/zapata.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=incoming ; llamadas entrantes se dirigen a [incoming] en extensions.conf signalling=fxs_ks ; Use señalizacion FXS para un canal FXO channel => 4 ; PSTN se conecta al puerto 4
  • 35. Configuración de un canal FXO Configuración del hardware en zapata  La sección [channels] determina el método de señalización para los canales físicos y sus opciones.  Cuando una opción es definida esta es heredada hacia abajo al resto del archivo.  Un canal se define usando channel => , y cada definición del canal hereda todas las opciones definidas por encima de esa línea. usecallerid=yes habilita el caller ID hidecallerid=no No se ocultará el caller ID para las llamadas salientes.
  • 36. Configuración de un canal FXO Configuración del hardware en zapata  callwaiting=no La llamada en espera es desactivada para una linea FXO  threewaycalling=yes Permite que una llamada activa pueda ser puesta en espera con un hook flash luego podemos llamar a un tercero e invitarlo a la conversación con otro hook flash.  transfer=yes Permite transferir llamadas con un hook flash; requiere que three-way calling este activada
  • 37. Configuración de un canal FXO Configuración del hardware en zapata  echocancel=yes Habilita la cancelación de eco, se requiere especialmente en líneas análogas.  echotraining=yes Le indica a asterisk que envíe un tono a través de la línea al inicio de la llamada para medir el eco y luego aprender de el mas rápidamente.  Cuando una llamada ingresa a una interfaz FXO, Usted desearía que se realice alguna acción verdad ?
  • 38. Configuración de un canal FXO Configuración del hardware en zapata  La acción a realizar es configurada dentro de un bloque de instrucciones llamado contexto el mismo que se configura en el extensions.conf.  Las llamadas entrantes en la interfaz FXO son direccionadas al contexto incoming con la línea context=incoming.  Finalmente como un canal FXO usa señalización FXS, la definimos en la linea signalling=fxs_ks
  • 39. Configuración de un canal FXO CONFIGURACION DEL DIALPLAN [incoming] ;las llamadas que provienen del puerto FXO son direccionadas a este contexto desde zapata.conf exten => s,1,Answer() exten => s,2,Echo()
  • 40. Configuración de un canal FXS  La configuración en muy similar a un canal FXO Configuración del Hardware en zaptel.conf  fxoks=1 fxsks=4 loadzone=us defaultzone=us ztcfg –vv: Zaptel Configuration ====================== Channel map: Channel 01: FXO Kewlstart (Default) (Slaves: 01) Channel 02: FXS Kewlstart (Default) (Slaves: 02) 2 channels configured.
  • 41. Configuración de un canal FXS Configuración del hardware en zapata.conf  La configuración viene prácticamente a ser la misma con la adición de la línea inmediate=no y las líneas referentes al puerto fxs:  [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 inmediate=no
  • 42. Configuración de un canal FXS ; definición de canales: context=internal ; Usaremos el contexto [internal] para las extensiones en el extensions.conf signalling=fxo_ks ; Use señalización FXO para un canal FXS channel => 1 ; teléfono conectado al puerto 1 context=incoming ; Las llamadas entrantes se dirigen hacia [incoming] en elextensions.conf signalling=fxs_ks ; Use señalización FXS para un canal FXO channel => 4 ; PSTN se conecta al puerto 4 
  • 43. Configuración de un canal FXS CONFIGURACION DEL DIALPLAN  Para probar la configuración que hemos realizado vamos a agregar las siguientes líneas a nuestro dial plan: [internal] exten => 611,1,Answer( ) exten => 611,2,Echo( )
  • 44. Configuración de un canal SIP  El archivo /etc/asterisk/sip.conf empieza con la sección [general] que contiene las opciones por defecto y configuraciones de canal para todos los usuarios y peers definidos dentro del sip.conf.  Podemos sobrescribir estas configuraciones para un usuario/peer especifico haciendo los cambios en la configuración de cada usuario/peer
  • 45. 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=internal ; el contexto internal controla el comportamiento de este canal
  • 46. Configuración de un canal SIP  srvlookup=yes Permite que asterisk use los registro DNS SRV para reenviar llamadas usando nombres de dominio  [201] Los usuarios se definen entre [] y puede ser cualquier combinación alfanumerica  type=friend Los usuarios pueden ser tipo user, peer o friend, user se utiliza para permitir que el usuario solo pueda recibir llamadas, peer para hacer llamadas salientes y friend ambas.  secret=201 Secret es el password usado para la autenticación  qualify=yes Esta linea le permite a asterisk monitorear la latencia entre el usuario y el servidor por defecto hasta 2000 ms
  • 47. Configuración de un canal SIP  nat=no Si una extensión se encuentra a través de un dispositivo que realiza NAT se debe configurar nat=yes para forzar a Asterisk a ignorar la información de contacto de la extensión y usar la dirección desde la cual los paquetes son enviados.  host=dynamic Requerirá que la extensión se registre para que asterisk sepa como alcanzar el teléfono. Para limitar el registro desde una sola dirección IP , colocamos esta en lugar de dynamic, en cambio si se setea host=static, no se requiere que el dispositivo se registre  canreinvite=no Asterisk forza a los usuarios a mantenerse en el flujo de media, no permitiendo que los usuarios intercambien mensajes RTP directamente
  • 48. Configuración del Cliente SIP  En este curso utilizaremos como cliente SIP a X-lite, que podemos descargar de www.counterpath.com  Una vez descargado debemos copiar el instalador a /usr/src/ y lo descomprimimos  Abrimos un terminal, ingresamos a la carpeta que contiene el instalador con cd /usr/src/x-lite y cambiamos los permisos para el archivo con : − chmod +x xtensoftphone − ./xtensoftphone  Realizamos el wizard de configuración del audio
  • 50. El plan de marcado  El plan de marcado es único y se configura en /etc/asterisk/extensions.conf  Es una lista de instrucciones que asterisk debe seguir  El plan de marcado tiene 4 definiciones fundamentales: contexto, extensiones, prioridades y aplicaciones.
  • 51. El plan de marcado: contexto  Son secciones del plan de marcado  Son grupos de extensiones “nombradas”  Permite la interacción de diferentes partes del plan de marcado  Una extensión definida en un contexto esta totalmente aislada de otra en otro contexto.  En programación “subrutinas”  Se definen así: [contexto] [general] [globals]
  • 52. [general ] y [globals]  [general] autofallthrough=no clearglobalvars=no
  • 53. El plan de marcado: extensiones  Es una instrucción que asterisk seguirá como consecuencia de una llamada entrante o por dígitos marcados en un canal activo − exten => nombre, prioridad, aplicación(p,q,r) exten => 101,1, Answer( )  El nombre puede ser cualquier combinación alfanumérica: Juan, 101Juan, 282
  • 54. El plan de marcado: extensiones  Cada extensión tiene un nombre, puede tener algunos pasos, cada paso es una prioridad, la aplicación es el comando que ejecuta, una acción en la llamada. exten => 101,1, Answer( ) exten => 101,2, Playback(hello-world) exten => 101,3, Hangup( )
  • 55. El plan de marcado: prioridades  Cada prioridad esta numerada secuencialmente empezando en 1, si se salta una prioridad asterisk no continuará.  Prioridades no numeradas: exten => 101,1, Answer() exten => 101,n, Hacer_algo() exten => 101,n, Hacer_algo_mas() exten => 101,n, Hacer_ultimo_paso() exten => 101,n, Hangup() exten => 123,n(label),hacer_algo
  • 56. Plan de marcado simple: [incoming] exten => s,1,aplicacion( ) exten => s,2,aplicacion( ) exten => s,3,aplicacion( ) La extensión s  Cuando una llamad entra a un contexto sin una extensión especifica de destino (por ejemplo una llamada a un puerto fxo) son recibidas automáticamente por la extensión s “start”
  • 57. Las funciones Answer( ), Playback( ) y Hangup( ) [internal] exten => 555,1,Answer( ) exten => 555,2,Playback(hello-world) exten => 555,3,Hangup( ) Playback(ruta_al_archivo/archivo)  Solo reproduce el archivo de audio, no presta atención ni ejecuta acción alguna a los ingresos hachos por el dialpad, por defecto busca en /var/lib/asterisk/sounds/
  • 58. Voces en Español www.voipnovatos.es/voces/  Descomprimir y copiar en /var/lib/asterisk/sounds  Agregar la siguiente línea en las configuraciones globales de zapata.conf y sip.conf: language = es
  • 59. Agregando lógica al Dialplan [internal] exten => 555,1,Answer( ) exten => 555,2,Background(enter-ext-of-person) exten => 1,1,Playback(digits/1) exten => 1,2,Goto(internal,555,1) exten => 2,1,Playback(digits/2) exten => 2,2,Goto(internal,555,1)
  • 60. Agregando lógica al Dialplan Background(ruta_al_archivo/archivo)  A diferencia de Playback( ), cuando el llamante presiona una tecla (o serie de teclas) en el pad del teléfono, este interrumpe la reproducción de audio y lo envía a la extensión que corresponda de acuerdo al digito(s) presionados.  Por ejemplo si el llamante presiona 5 asterisk deja de reproducir el audio y le pasa el control de la llamada a la primera prioridad de la extensión 5 dentro del mismo contexto en que fue llamado
  • 61. Agregando lógica al Dialplan Goto(context, extension, prioridad)  Esta aplicación hace fácil mover una llamada entre las distintas partes del dialplan.  La sintaxis de la aplicación Goto() nos solicita que pasemos como argumentos: el contexto, extensión y prioridad del destino.  En conjunto con background permiten la interacción con el usuario, su uso mas común es el los llamados menús de voz, auto atendedores o arboles telefónicos
  • 62. Validando entradas y tiempos de espera  Para no permitir el ingreso de extensiones invalidas(3 en nuestro ejemplo), usamos una extensión especial ( i )  En cambio para el caso en que el usuario no ingrese una extensión después de un tiempo determinado (10 seg.) usamos la extensión t.  Las llamadas serán enviadas a la extensión t si el llamante toma mucho tiempo en ingresar una extensión después que Backgrund() ha terminado de reproducir el archivo de audio
  • 63. Validando entradas y tiempos de espera [internal] exten => 555,1,Answer( ) exten => 555,2,Background(enter-ext-of-person) exten => 1,1,Playback(digits/1) exten => 1,2,Goto(internal,555,1) exten => 2,1,Playback(digits/2) exten => 2,2,Goto(internal,555,1) exten => i,1,Playback(pbx-invalid) exten => i,2,Goto(internal,555,1) exten => t,1,Playback(vm-goodbye) exten => t,2,Hangup( )
  • 64. Creación de 2 usuarios SIP • De ahora en adelante vamos a trabajar en grupos de 3 personas: 1 IPBX, 2 Usuarios • Definir: Usuarios y passwords Direccion IP del Servidor • Llenar el Reporte de instalación
  • 65. 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,Zap,IAX) un slash (/) y la fuente remota(tipicamente un numero o un usuario) exten => 123,1,Dial(Zap/1) exten => 123,1,Dial(SIP/201) exten => 123,1,Dial(Zap/1&Zap/2&Zap/3)
  • 66. 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 llamar a esa extension, sino lo haria indefinidamente. exten => 123,1,Dial(Zap/1,10) Si el canal es contestado antes del timeout asterisk puentea ambos canales para permitir la comunicacion
  • 67. Uso de la aplicacion Dial Dial(tech/user, timeout, opcion) Si el destino no contesta, vencido el timeout, asterisk pasa a la siguiente prioridad Si el 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( )
  • 68. 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(Zap/1, ,r)
  • 69. Uso de la aplicacion Dial [incoming] exten => 555,1,Answer( ) exten => 555,2,Background(enter-ext-of-person) exten => 201,1,Dial(SIP/201,10,r) exten => 201,2,Playback(vm-nobodyavail) exten => 201,3,Hangup( ) exten => 201,102,Playback(tt-allbusy) exten => 201,103,Hangup( ) exten => 202,1,Dial(SIP/johy,10,r) exten => 202,2,Playback(vm-nobodyavail) exten => 202,3,Hangup( ) exten => 202,102,Playback(tt-allbusy) exten => 202,103,Hangup( ) exten => i,1,Playback(pbx-invalid) exten => i,2,Goto(internal,555,1) exten => t,1,Playback(vm-goodbye) exten => t,2,Hangup( )
  • 70. Vision de los Contextos
  • 71. Vision de los Contextos
  • 72. Contexto [incoming] [incoming] exten => s,1,Answer( ) exten => s,2,Background(enter-ext-of-person) exten => 201,1,Dial(SIP/201,10) exten => 201,2,Playback(vm-nobodyavail) exten => 201,3,Hangup( ) exten => 201,102,Playback(tt-allbusy) exten => 201,103,Hangup( ) exten => 202,1,Dial(SIP/202,10) exten => 202,2,Playback(vm-nobodyavail) exten => 202,3,Hangup( ) exten => 202,102,Playback(tt-allbusy) exten => 202,103,Hangup( ) exten => i,1,Playback(pbx-invalid) exten => i,2,Goto(incoming,s,1) exten => t,1,Playback(vm-goodbye) exten => t,2,Hangup( )
  • 73. Contexto [internal] [internal] exten => 201,1,Dial(SIP/201,20,r) exten => 202,1,Dial(SIP/202,20,r) Uso de variables GABRIEL=SIP/201 exten => 201,1,Dial(${GABRIEL},10,r)
  • 74. 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=Zap/1))
  • 75. 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
  • 76. Agregando Variables al dial plan [globals] GABRIEL=SIP/201 JOHN=SIP/202 [incoming] exten => s,1,Answer( ) exten => s,2,Background(enter-ext-of-person) exten => 201,1,Dial(${GABRIEL},10,r) exten => 201,2,Playback(vm-nobodyavail) exten => 201,3,Hangup( ) exten => 201,102,Playback(tt-allbusy) exten => 201,103,Hangup( ) exten => 202,1,Dial(${JOHN},10,r) exten => 202,2,Playback(vm-nobodyavail) exten => 202,3,Hangup( ) exten => 202,102,Playback(tt-allbusy) exten => 202,103,Hangup( )
  • 77. Agregando Variables al dial plan exten => i,1,Playback(pbx-invalid) exten => i,2,Goto(incoming,s,1) exten => t,1,Playback(vm-goodbye) exten => t,2,Hangup( ) [internal] exten => 201,1,Dial(${GABRIEL},20,r) exten => 202,1,Dial(${JHON},20,r)
  • 78. Coincidencia de Patrones • Es útil para tener que evitar escribir una extensión para cada uno de los números a los que tenemos que marcar(sobretodo los números externos a la organización) Sintaxis • Siempre empiezan con el underscore _ • Luego podemos usar uno o varios de los siguientes caracteres: • X Representa cualquier digito del 0 al 9 • Z Representa cualquier digito del 1 al 9 • N Representa cualquier digito del 2 al 9 • [15-7] Representa cualquier digito o rango de digitos en este caso representa al 1,5,6 o 7
  • 79. Coincidencia de Patrones Sintaxis • El punto (.) representa uno o mas caracteres es conocido como el wilcard. • Para hacer uso del pattern matching simplemente lo colocamos en el lugar del nombre de una extension. Ejemplo: exten => _NXX,1,Playback(auth-thankyou))
  • 80. 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
  • 81. Coincidencia de Patrones Sintaxis Porta: exten => _09[732]XXXXXX,1, Acción exten => _08[567]XXXXXX,1, Acción Internacional: exten => _001. ,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 ?
  • 82. 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 => _8XX,1,SayDigits(${EXTEN}) exten => _8XX,1,SayDigits(${EXTEN:1}) exten => _8XX,1,SayDigits(${EXTEN:-1))
  • 83. Contextos para llamadas salientes [globals] GABRIEL=SIP/201 JOHY=SIP/202 PACIFICTEL=Zap/4 [salida-local] ignorepat => 9 exten => _92XXXXXX,1,Dial(${PACIFTEL}/${EXTEN:1},10,r) exten => _92XXXXXX,2,Congestion( ) exten => _92XXXXXX,102,Congestion( ) exten => 911,1,Dial(${PACIFICTEL}/911) exten => 9911,1,Dial(${PACIFICTEL}/911)
  • 84. Contextos para llamadas salientes [globals] GABRIEL=SIP/201 JOHY=SIP/202 PACIFICTEL=Zap/4 PORTA=Zap/3 [salida-porta] ignorepat => 9 exten => _9097XXXXXX,1,Dial(${PORTA}/${EXTEN:1},10,r) exten => _9097XXXXXX,2,Congestion( ) exten => _9097XXXXXX,102,Congestion( )
  • 85. Contextos para llamadas salientes include => context [internal] include => salida-local include => salida-porta exten => 201,1,Dial(${GABRIEL},,r) exten => 202,1,Dial(${JOHY},,r) [salida-local] ignorepat => 9 exten => _92XXXXXX,1,Dial(${PACIFTEL}/${EXTEN:1},10,r) exten => _92XXXXXX,2,Congestion( ) exten => _92XXXXXX,102,Congestion( ) exten => 911,1,Dial(${PACIFICTEL}/911) exten => 9911,1,Dial(${PACIFICTEL}/911)
  • 86. Contextos para llamadas salientes include => context [salida-porta] ignorepat => 9 exten => _9097XXXXXX,1,Dial(${PORTA}/${EXTEN:1},10,r) exten => _9097XXXXXX,2,Congestion( ) exten => _9097XXXXXX,102,Congestion( )
  • 87. 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
  • 88. 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] language=es 201 => 201,Gabriel Astudillo,gastudillo@gmail.com,84 519925@im.movistar.com.ec,tz=central|attach=yes
  • 89. Voicemail Dentro de [internals] exten => 201,1,Dial(${GABRIEL},10,r) exten => 201,2,VoiceMail(u201@default) exten => 201,102,VoiceMail(b201@default) Acceso al voicemail: exten => 500,1,VoiceMailMain( )
  • 90. 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,incoming,f) exten => 9,1,Directory(default,incoming) Si el llamante presiona 8 obtendrá un directorio ordenado por nombres y si presiona 9 el llamante obtendrá un directorio ordenado por apellidos
  • 91. Conferencias con MeetMe( ) Ventajas: • Posibilidad de crear conferencias con protección de password. • Administración de conferencias (silenciar, bloquear, kick) • La opción de silenciar a todos los participantes, menos a uno. • Creación estática o dinámica de conferencias • En /etc/asterisk/meetme.conf editar: [rooms] conf => 600
  • 92. Conferencias con MeetMe( ) Para hacerlo disponible desde el dialplan usamos la funcion MeetMe( ), la cual recibe 3 parametros:  el nombre del cuarto de conferencias tal como fue definido en meetme.conf  una o mas opciones  el password para acceder a la conferencia exten => 600,1,MeetMe(600,iMp,54321) • i información de quien entra y quien sale • M música en espera si solo hay una persona en la conferencia • p opción de presionar # para salir de la conferencia
  • 93. 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(${GABRIEL},10,r) exten => 201,2,VoiceMail(u101@default) exten => 201,102,VoiceMail(b101@default) Imaginen tener que hacer esto para una organización de 100 usuarios !!!!! O tener que agregar una nueva caracteristica a todos los usuarios
  • 94. 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(${GABRIEL},10,r) exten => s,2,VoiceMail(u201@default) exten => s,102,VoiceMail(b201@default) 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 La única limitante es que para definir un macro siempre debemos utilizar la extensión especial s
  • 95. Como llamar a una Macro Macro(nombre,arg1,arg2...) [internals] exten => 201,1,Macro(extensiones,arg1, arg2) Al momento de llamar a la función Macro se definen 4 variables de canal que nos van a permitir generalizar su uso: ${MACRO_CONTEXT} ${MACRO_EXTEN} ${MACRO_PRIORITY} ${ARGn}
  • 96. Como llamar a una Macro [macro-extensiones] exten => s,1,Dial(${GABRIEL},10,r) exten => s,2,VoiceMail(u${MACRO_EXTEN}@default) exten => s,102,VoiceMail(b${MACRO_EXTEN}@default) [internals] 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 ?
  • 97. Aplicando la macro al dialplan [macro-extensiones] exten => s,1,Dial(${ARG1},10,r) exten => s,2,VoiceMail(u${MACRO_EXTEN}@default) exten => s,102,VoiceMail(b${MACRO_EXTEN}@default) [internal] exten => 101,1,Macro(extensiones,${GABRIEL}) exten => 102,1,Macro(extensiones,${MARIA}) exten => 103,1,Macro(extensiones,${JOSE})
  • 98. Expresiones y Manejo de Variables Expresiones Se definen como un conjuto de varibales, operadores y valores que se colocan juntas para obtener un resultado. $[expresion] Ejemplos: $[${CONT} + 1] $[${CONT} / 2] Cuando Asterisk encuentra una expresion, reemplaza toda la expresion por el valor resultante. Es importante notar que antes de hacer esto primero evalua el valor de las varibles
  • 99. Expresiones y Manejo de Variables exten => 321,1,Set(CONT=3) exten => 321,2,Set(NEWCONT=$[${CONT} + 1]) exten => 321,3,SayNumber(${NEWCONT}) exten => 321,2,Set(NEWCONT=$[3 + 1]) exten => 321,2,Set(NEWCONT=4) Finalmente el valor de 4 es asignado a la variables NEWCONT a través de la función Set( ) Ojo: exten => 123,1,Set(TEST=$[2+1]) No es lo mismo que : exten => 234,1,Set(TEST=$[2 + 1])
  • 100. 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
  • 101. Ramificación Condicional Aplicación GotoIf() Esta aplicación es la calve para la ramificación condicional, tiene una sintaxis especial llamada la sintaxis condicional: GotoIf(expression?destination1:destination2) Si la expresion es verdadera salta al destino uno, si es falsa salta al destino 2 pero… Que es verdadero y que es falso ? • Un carácter en blanco o el numero cero (0) significan falso, cualquier otra cosa es verdadero El destino puede ser: • Una prioridad dentro de la misma extensión Ej: 3 • Una extensión y prioridad dentro del mismo contexto (123,10) • Un contexto, extensión y prioridad Ej: incoming,123,10 • Una prioridad nombrada dentro de la misma extensión
  • 102. Ramificación Condicional Aplicación GotoIf() exten => 345,1,Set(TEST=1) exten => 345,2,GotoIf($[${TEST} = 1]?10:20) exten => 345,10,Playback(weasels-eaten-phonesys) exten => 345,20,Playback(office-iguanas)
  • 103. Ramificación Condicional Aplicación GotoIf() exten => 123,1,Set(COUNT=10) exten => 123,2,GotoIf($[${COUNT} > 0]?:10) exten => 123,3,SayNumber(${COUNT}) exten => 123,4,Set(COUNT=$[${COUNT} - 1]) exten => 123,5,Goto(2) exten => 123,10,Hangup( ) El caso de la Ex-enamorada exten => 123,1,GotoIf($[${CALLERID(num)} = 2397815]?20:10) exten => 123,10,Dial(Zap/4) exten => 123,20,Playback(abandon-all-hope) exten => 123,21,Hangup( )
  • 104. 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.
  • 105. Ramificación Condicional basada en fechas Aplicación GotoIfTime() GotoIfTime(times,days_of_week,days_of_month,months?label) El argumento label puede ser cualquiera de los siguientes: • Una prioridad dentro de la misma extensión Ej: 3 • Una extensión y prioridad dentro del mismo contexto (123,10) • Un contexto, extensión y prioridad Ej: incoming,123,10 • Una prioridad nombrada dentro de la misma extensión
  • 106. 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)
  • 107. 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( )
  • 108. 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