domingo, 15 de marzo de 2009

ASTERISK GUI

Para instalar la interfaz grafica de asterisk, deberan seguir los siguientes pasos:

apt-get install -qy subversion
Cd /etc/asterisk/
svn checkout http://svn.digium.com/svn/asterisk-gui/branches/2.0/ asterisk-gui
cd asterisk-gui/
./configure
Make
Make install

Luego realizar las siguientes modificaciones antes de continuar


./configure


make


Make install

vim etc/asterisk/http.conf
[general] enabled=yes enablestatic=yes
bindaddr=0.0.0.0
bindport=8088

vim etc/asterisk/manager.conf
[general] displaysystemname = yes enabled = yes webenabled = yes port = 5038 ;httptimeout = 60 bindaddr = 0.0.0.0
[admin] secret = mypass read = system,call,log,verbose,command,agent,config write = system,call,log,verbose,command,agent,config

asterisk –r
Stop now

make checkconfig



Luego nos podemos conectar vía Web, a la dirección:

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





Lo primero que hay que hacer es crear una dial plan, antes incluso de crear una extensión



Las extensiones las crearemos en la pestaña usuarios



Podemos modificar el rango de la extensiones de la central en la pestaña opciones



En la sección “Options”, en la pestaña “Language” podemos setear el idioma de la central.





En la sección trunk debemos definir las troncales de nuestra central



Luego podremos crear las rutas salientes



PLUS: RECOMENDACIONES DE HARDWARE

sábado, 14 de marzo de 2009

DIAL PLAN & FEATURES

• Dial Plan & Features
– Dial Plan: Basic DP simple, DP Interactivo
– Dial Plan: Variables, Funciones, Condicionales
– Dial Plan: Voicemail, Macros
– Asterisk: Features

COMANDOS BASICOS ASTERISK

Comandos Asterisk:
asterisk –r: permite reconectarse al servidor
asterisk –g: permite iniciar el servicio asterisk
restart now: permite reiniciar el servicio de asterisk
stop now: permite detener el servicio asterisk
exit: Cierra la consola de asterisk

DIAL PLAN BASICS

El plan de marcación o “Dial Plan”, es el corazón de toda configuración en asterisk, y de esta configuración dependerá el performace y eficiencia de nuestra central telefónica.

Para poder personalizar la central a gusto se deberá comprender plenamente el funcionamiento del plan de marcación de asterisk

Sintaxis:
El plan de marcación se configura en el archivo extensions.conf, este archivo reside usualmente en la carpeta /etc/asterisk/

El dial plan esta compuesto de 04 conceptos principalmente:
- Contextos
- Extensiones
- Prioridades
- Aplicaciones

CONTEXTOS:
El dial plan se divide en secciones llamadas contextos, los contextos son nombres para un grupo de extensiones, las cuales pueden tener diferentes propósitos. Los contextos también pueden interactuar entre ellos.

Los contextos se denotan escribiendo el nombre del contexto entre corchetes “[nombre_de_contexto]”.

Durante la creación de una extensión (sip.conf, iax.conf, etc) se define a que contexto pertenece.

p.e. context=from-internal

Todas las instrucciones por debajo del nombre del contexto son asignadas a ese mismo contexto hasta que un nuevo contexto sea declarado.

Al inicio del archivo extensions.conf, existen dos contextos especiales

-[General]
-[Globals]

La sección general, contiene los parámetros generales del dial plan.

La sección globals, contiene las variables globales del sistema, las cuales irán siendo utilizadas por los contextos siguientes.

EXTENSIONES:
Normalmente conocemos con el nombre de extensión, al numero que se le asigna a los terminales telefónicos, sin embargo en asterisk una extensión es mucho mas que un número _ telefónico, ya que define una serie de pasos (donde cada paso contiene una aplicación) que asterisk realizara durante una llamada.

La sintaxis usada para declarar una extensión es la palabra “exten”, seguido de una flecha formada por una signo igual y un signo mayor

p.e. exten =>

Esto va seguido por el numero de la extensión.

exten => name,priority,application()

Una extensión completa esta compuesta de:

El nombre (o numero) de la extensión.

La prioridad (cada extensión puede incluir múltiples pasos, el numero del paso es llamado prioridad)

La aplicación (o comando) es el que realiza la acción en la llamada.

PRIORIDADES:
Cada extensión puede tener multiples pasos, llamados prioridades, cada prioridad es numerada secuencialmente, comenzando con 1, y ejecutando una aplicación especifica.

Existe un tipo de prioridad “no numerada” que se representa con la letra n y permite evitar problemas generados por la numeración secuencial.

Esta prioridad “no numerada” significa que cada prioridad es igual a la prioridad anterior +1

Por lo tanto: n=n+1
p.e. exten => 123,1,Answer()
exten => 123,n,do something
exten => 123,n,do something else
exten => 123,n,do one last thing
exten => 123,n,Hangup()


PRIORIDADES - ETIQUETAS:

Desde asterisk 1.2, es muy común asignar etiquetas de texto (labels), a las prioridades. Esto es para asegurarnos que podremos referirnos a esa prioridad por un valor distinto a su numero, el cual probablemente no se conozca (prioridad n), y dado que actualmente el uso de prioridades no numeradas es muy usual en el diseño de una dial plan.

Para asignar una etiqueta de texto a una prioridad, solo basta con agregarla entre paréntesis justo después del numero de la prioridad.

p.e. exten => 123,n(label),application()

APLICACIONES:

Las aplicaciones son el caballito de batalla del dial plan, cada aplicación realiza una acción especifica sobre el canal actual, como por ejemplo, tocar una melodía, aceptando entradas de tono, marcar un canal, colgar una llamada, y así sucesivamente.

Algunas aplicaciones como Answer() o Hangup(), no requieren mayor información para hacer su trabajo, sin embargo existen otras aplicaciones que si requieren de cierta información adicional para procesarla, a esta información adicional se le conoce como parámetros, y para pasarle los parámetros a la aplicación deben colocarse entre los paréntesis.

Ocasionalmente podríamos ver el pipe entre los paréntesis, y es que este signo es utilizado para separar mas de un parámetro.

CONSTRUYENDO UN DIAL PLAN SIMPLE:
Answer(), Playback(), Hangup()

Vamos a construir un dial plan que consista en que , asterisk contesta la llamada, toca una melodía, y luego cuelga.
Para este ejemplo vamos a asumir que ya hemos creado la extensión y que tiene como nombre de contexto “from-internal”

Para la construcción de este dial plan utilizaremos las siguientes aplicaciones:

Answer()
Playback()
Hangup()

Answer(), es la aplicación que se utiliza para que la central conteste una llamada que esta timbrando.

Se puede utilizar al inicio de la configuración del contexto para una extension, pero en algunas ocasiones no es necesario.

Como ya mencionamos, Anwser() no tiene argumentos

Playback(), es la aplicación que se utiliza para reproducir un sonido grabado previamente en un archivo o a través de un canal.

Cuando utilizamos playback, las entradas (inputs) del usuario desde la extension son ignoradas.

Para utilizar playback() se debe ingresar el nombre del archivo sin la extension (p.e. .wav o .mp3) como argumento entre los paréntesis.

Por defecto playback buscara el archivo ingresado como argumento en la ruta “/var/libs/asterisk/sounds”

Si se desea hacer referencia a un archivo ubicado en otra ruta, se deberá ingresar la ruta completa entre los paréntesis

Playback(/home/john/sounds/filename)

Lo mas comun es crear una carpeta para estos archivos dentro de la ruta por defecto

Playback(custom/filename)

Ahora si vamos a crear nuestro dial plan

[from-internal]
exten => 1234,1,Answer()
exten => 1234,n,Playback(hello-world)
exten => 1234,n,Hangup()

CONSTRUYENDO UN DIAL PLAN INTERACTIVO:
Background(), WaitExten(), and Goto()

La aplicación background, es la pieza vital para un dial plan interactivo.

El background(), al igual que playback() reproduce una grabación, pero a diferencia de playback(), esta aplicación si permite al usuario ingresar entradas (inputs) desde el teclado del teléfono, estas entradas interrumpen la reproducción y se dirige a la extensión correspondiente.

El uso mas común que suele dársele a la aplicación background, se encuentra en la construcción de menús de voz.

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)

En el ejemplo anterior por defecto se cortara la llamada, pero si lo que queremos es esperar a que el usuario ingrese o marque algun codigo podemos agregarle la aplicación waitexten() al final.

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()

La aplicación WaitExten(), le indica al sistema que espere por el ingreso de una extensión, la cual deberá estar dentro del contexto.

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4)
Que ocurre cuando, tenemos un duplicado entre los primeros digitos de las extensiones disponibles:

p.e.

exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 123,n,WaitExten()
exten => 1,1,Playback(digits/1)
exten => 2,1,Playback(digits/2)
exten => 3,1,Playback(digits/3)
exten => 4,1,Playback(digits/4)

Del ejemplo anterior si llamamos al 123, y luego presionamos la opción 123, volveremos a ir al menú, pero que ocurre si solo presionamos 1.

Como se puede comprobar en la practica asterisk esperara unos segundos cuando se encuentra con mas de una alternativa posible.

Luego de este tiempo ejecutara la extensión según los dígitos que fueron ingresados.

Finalmente vamos a mencionar que la aplicación WaitExten() soporta como argumento el tiempo en segundos que esperara para que el usuario ingrese una extensión valida, luego de este tiempo terminara esta aplicación, y pasara a la siguiente prioridad si existiera.

Ahora vamos a utilizar la aplicación Goto().

La aplicación Goto(), es utilizada para enviar una llamada a otra parte del dial plan, la sintaxis de la aplicación Goto(), requiere los argumentos contexto, extensión y prioridad.

exten => 123,n,Goto(context,extension,priority)

Background(), WaitExten(), and Goto()

[from-internal]
exten => 123,1,Answer()
exten => 123,n,Background(main-menu)
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(incoming,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(incoming,123,1)

MANEJANDO INPUTS Y TIMEOUTS

[from-internal]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Playback(digits/1)
exten => 1,n,Goto(from-internal,123,1)
exten => 2,1,Playback(digits/2)
exten => 2,n,Goto(from-internal,123,1)
exten => 3,1,Playback(digits/3)
exten => 3,n,Goto(from-internal,123,1)
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(from-internal,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

MANEJANDO INPUTS Y TIMEOUTS

La opción i, se ejecuta cuando el usuario ingresa una opción invalida, y cuando se cumple el tiempo máximo disponible para que el usuario marque una extensión, la llamada será direccionada automáticamente hacia la extensión t (el timeout por defecto es de 10 segundos).

Utilizando las opciones “i” y “t”, obtenemos un dial plan un poco mas robusto y amigable.

La extensión “S”
Cuando una llamada entra en un contexto sin un destino especifico (por ejemplo una llamada en la línea FXO), se pasa a la extensión s, “S” significa inicio o start.

La extensión “S” es muy utilizada para generar menús en la central telefónica.

El siguiente ejercicio intentara mostrar el funcionamiento de la extensión s, haciendo uso de la aplicación Goto().

[menu]
exten => _98,1,Goto(from-pstn,s,1)

[from-pstn]
exten => s,1,Answer()
exten => s,n,Playback(hello-world)
exten => s,n,Hangup()

Habiendo definido esto ahora pasaremos a ver otras aplicaciones muy importantes, como la aplicación DIAL(), que nos permite comunicar a dos anexos (personas) entre si.

Usando la aplicación Dial()

La aplicación Dial(), es una de las aplicaciones mas importantes con las que cuenta asterisk, tiene la capacidad de conectar dos usuarios uno con el otro.

Esto resulta muy útil sobre todo cuando los usuarios están utilizando distintos tipos de medio de comunicación, por ejemplo.

Por ejemplo podemos utilizar la aplicación Dial() para comunicar a un usuario que llama desde un teléfono analógico a través de la rede de telefonía tradicional, con otro usuario que se puede encontrar en cualquier parte del mundo conectado a través de Internet con su teléfono IP.

La sintaxis de Dial(), es mas compleja que la sintaxis de la funciones anteriores, y puede tener hasta 4 argumentos, el primero el el destino al cual esta intentando conectarte.

Dial(type/identifier, timeout, options, URL)

p.e.
exten => 204,1,Dial(SIP/201)
exten => 202,1,Dial(IAX2/202)

También se pueden llamar a un conjunto de extensiones
p.e.
exten => 111,1,Dial(SIP/202&SIP/203&SIP/204)

Usando la aplicación Dial()

El segundo argumento me permite colocar el tiempo máximo que se ejecutara la aplicación Dial.

exten => 123,1,Dial(Zap/1,10)
exten => 123,n,Playback(vm-nobodyavail)
exten => 123,n,Hangup()

El tercer parámetro puede ser una cadena o carácter, la lista de opciones es bastante larga, y pueden encontrarla en el siguiente hipervínculo:

http://www.voip-info.org/wiki/view/Asterisk+cmd+Dial

Usando la aplicación Dial()
p.e.

exten => 123,1,Dial(Zap/1,10,m)
exten => 123,n,Playback(vm-nobodyavail)
exten => 123,n,Hangup()

El carácter “m”, permite que el usuario que esta llamando escuche la MOH en lugar del tono de ring, hasta que la llamada sea contestada.

Cuando recibimos una llamada podemos derivarla a un menú como el que hemos creado, pero a su vez podemos formar un menú mas completo con el comando Dial(), tal como se aprecia en el siguiente ejemplo:

[from-pstn]
exten => 123,1,Answer()
exten => 123,n,Background(enter-ext-of-person)
exten => 123,n,WaitExten()
exten => 1,1,Dial(Zap/1,10)
exten => 1,n,Playback(vm-nobodyavail)
exten => 1,n,Hangup()
eten => 2,1,Dial(SIP/Jane,10)
exten => 2,n,Playback(vm-nobodyavail)
exten => 2,n,Hangup()
exten => i,1,Playback(pbx-invalid)
exten => i,n,Goto(from-internal,123,1)
exten => t,1,Playback(vm-goodbye)
exten => t,n,Hangup()

DIAL PLAN: VARIABLES, FUNCIONES, CONDICIONALES

Las variables pueden ser de 03 tipos:

Variables Globales

Variables de Canal

Variables de Entorno

Las variables ayudan a reducir o simplificar el contenido y la estructura del dial plan optimizando de esta manera el proceso de lectura de los archivos de configuración de nuestra centralita. También sirven para agregar lógica a nuestro dial plan.

Una variable es como un contenedor que puede mantener una valor durante un periodo.

Variables Globales, se aplican a todas las extensiones en todos los contextos, esta variables deberán ser declaradas debajo del contexto [globals].

Por ejemplo vamos a guardar el valor SIP/201 en la variable JESUS

[globals]
JESUS=SIP/201
JESSICA=SIP/202
PABLO=SIP/208

exten => 123,1,Dial(${JESUS}&${JESSICA})

Ciertamente el tema de las variables resulta mas interesante cuando las asignamos a las troncales

[globals]

TELEFONICA=ZAP/1
1977=ZAP/2
BASE CLARO=ZAP/3
JESUS=SIP/201
JUAN=SIP/202

Este tipo de esquema nos permite elaborar un dial plan en funciona a variables y si se produce alguna modificación en el esquema, solo bastara con cambiar el valor de la variable y no será necesario modificar todo nuestro dial plan.

Variable de canal, esta variable se asocia solamente con una llamada, y a diferencia de las variables globales, las variables de canal se definen solo para la duración de la llamada actual, y solo están disponibles para los canales que participan de esa llamada.

Existen varias variables de canal predefinidas y están disponibles para ser utilizadas durante la marcación.

p.e.

exten => 125,1,Set(MAGICNUMBER=42)

Las variables de entorno, son una forma de acceder a las variables del entorno unix desde asterisk, podemos hacer referencia a estas variables a través de la funciona de marcación env(), la sintaxis de esta variables es:

${ENV(var)} ; donde var es una variable del entorno de linux o unix a la cual queremos referenciar.

Este tipo de variables no son de uso común en el dial plan pero están disponibles si fuesen necesarias.

Patrones de Marcado y Variable ${EXTEN}

Los patrones de marcación son comodines que nos permiten simplificar un grupo de extensiones, con este tipo de comodines podemos crear reglas que agrupen grandes conjuntos de números en unas cuantas líneas.

X : equivale a un digito 0 – 9
Z : equivale a un digito 1 – 9
N : equivale a un digito 2 – 9
[15-7] : equivale a los dígitos 1, 5, 6, 7.
. : Este comodín equivale a un o mas dígitos sin importar el valor

Patrones de Marcado y Variable ${EXTEN}

La variable EXTEN, toma el mismo valor que el numero de la extensión.

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

A partir de esta variable también podemos mutilar el numero marcado, por ejemplo si seguimos la siguiente sintaxis conseguiremos recortar los primeros dígitos del numero.

${EXTEN:x:y} ; “X” es la posición donde comenzara el numero resultante y “Y” es la cantidad de dígitos que serán retornados

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

Patrones de Marcado y Variable ${EXTEN}

Los siguientes ejemplos ayudaran a comprender mejor las opciones:

exten => _273443,1,SayDigits(${EXTEN:2}); ${EXTEN:2}=3443
exten => _273443,1,SayDigits(${EXTEN:1}); ${EXTEN:1}=73443
exten => _9388211,1,SayDigits(${EXTEN:3}); ${EXTEN:3}=8211
exten => _9388211,1,SayDigits(${EXTEN:3:2}); ${EXTEN:3:2}=82
exten => _9388211,1,SayDigits(${EXTEN:0:1}); ${EXTEN:0:1}=9
exten => _9388211,1,SayDigits(${EXTEN:0:2}); ${EXTEN:0:2}=93
exten => _9388211,1,SayDigits(${EXTEN:-4:2}); ${EXTEN:0:2}=82


exten => _XXXX,1,SayDigits(${EXTEN:2}), devolverá los últimos 3 dígitos que se hallan marcado

Patrones de Marcado y Variable ${EXTEN}

Un ejemplo mas practico seria el siguiente:

Si queremos que los usuarios marquen el nueve antes del numero que van a llamar como en la mayoría de las centrales telefónicas el dial plan seria:


exten => _9.,1,SayDigits(${EXTEN:1}), de esa manera se devolverá el numero que se halla marcado pero sin el 9, listo para salir a la red publica de telefonía.

Patrones de Marcado y Variable ${EXTEN}

Habilitando una ruta saliente:
OUTBOUNDTRUNK=ZAP/1
[outbound-local]
exten => _9NXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN:1})
exten => _9NXXXXX,n,Congestion()
exten => _9NXXXXX,n,Hangup()

Habilitando una llamada a Numero Fijo Local sin prefijo 9:
OUTBOUNDTRUNK=ZAP/1
[fijo-local]
exten => _[2-8]XXXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN})
exten => _[2-8]XXXXXX,n,Congestion()
exten => _[2-8]XXXXXX,n,Hangup()

Patrones de Marcado y Variable ${EXTEN}

Habilitando una ruta saliente a números Fijos LDN:
OUTBOUNDTRUNK=ZAP/1
[outbound-local]
exten => _0[4-8]X[2-8]XXXXX,1,Dial(${OUTBOUNDTRUNK}/${EXTEN})
exten => _0[4-8]X[2-8]XXXXX,n,Congestion()
exten => _0[4-8]X[2-8]XXXXX,n,Hangup()

Habilitando una llamada a Numero LDI:
OUTBOUNDTRUNK=ZAP/1
[fijo-local]
exten => _00.,1,Dial(${OUTBOUNDTRUNK}/${EXTEN})
exten => _00.,n,Congestion()
exten => _00.,n,Hangup()

Includes

Es posible concatenar los contexto mediante el comando include, de echo lo mas común es diseñar distintos contextos para diferentes funciones de la central y luego enlazarlos para formar unos pocos para asignar a los diferentes tipos de extensiones según los privilegios o características que les queremos asignar a cada uno.

Sintaxis:
[contextoA]
include => contextB

Funciones:

Las funciones nos premitiran aumentar el potencial de nuestro dial plan, exiten varias funciones disponibles y trataremos de explicar las mas utilizadas.

Sintaxis:
FUNCTION_NAME(argument)

Al igual que muchas funciones podemos referenciar a la funcion tal como esta escrito en la sintaxis, sin embargo tambien podemos hacer referencia del valor de dicha funcion de la siguiente manera:

${FUNCTION_NAME(argument)}

Funciones:

Una función puede encapsular otra función:

${FUNCTION_NAME(${FUNCTION_NAME(argument)})}

Ejemplo:

exten => 123,1,Set(TEST=example)
exten => 123,n,SayNumber(${LEN(${TEST})})

La función Set(), asigna un valor a una variable.
La función SayNumber(), reproduce el valor de un numero
La función LEN(), devuelve el valor de la longitud de una cadena de letras.

Funciones:

Otra función muy utilizada es la función TIMEOUT(), la cual puede
recibir tres tipos de argumentos, solo uno a la vez:


Absolute; asigna el tiempo absoluto máximo de duración de la llamada

Digit; asigna el máximo de tiempo entre dígitos que puede tomarse un usuario.

Response; es el tiempo máximo de espera cuando el usuario no ingresa ningún digito.


DIAL PLAN CONDICIONALES

La aplicación Gotoif()

La clave para lograr una ramificación condicional entre los contextos de nuestro dial plan es la función gotoif(). Gotoif() evalúa los argumentos ingresados y reenvía al llamante a un destino especifico dependiendo si la evaluación resulto verdadera o falsa.

Sintaxis

GotoIf(expression?destination1:destination2)

Si la expresión resulta verdadera, entonces la llamada saltara hacia el destino 1 si resulta falsa ira hacia el destino 2.

El valor verdadero es representado por el numero 1 y el falso por el numero 0

Los destinos posibles pueden ser los siguientes:

1.- Una prioridad etiquetada dentro de la misma extensión.

2.- Un prioridad etiquetada de otra extensión dentro del mismo contexto.

3.- Una prioridad etiquetada de otra extensión en otro contexto.

Cualquiera de los dos destinos puede ser omitido pero nunca se puede omitir los dos destinos al mismo tiempo.

En caso de que la condicional resulte hacia uno de los destinos omitidos simplemente se proseguirá hacia la siguiente línea o prioridad.

Ejemplo:

exten => 345,1,Set(TEST=1)
exten => 345,n,GotoIf($[${TEST} = 1]?uno:dos)
exten => 345,n(uno),Saydigits(12)
exten => 345,n,Hangup()
exten => 345,n(dos),Saydigits(34)
exten => 345,n,Hangup()


DIAL PLAN VOICEMAIL

Una de las características mas populares de los teléfonos modernos es el sistema de buzón de voz, y naturalmente asterisk tenia que contar con un sistema de voz muy flexible, algunas de las principales características del buzón de voz que nos ofrece asterisk son las siguientes:

Contiene distintos fólderes para organizar los mensajes en el buzón.
Saludos distintos para los estados Ocupado
Saludos por defecto, y personalizados
Posibilidad de asociar varios teléfonos con un buzón y varios buzones con un teléfono
Indicador de mensaje de espera, visual con luz intermitente, y audible con tren de tonos Directorio de la compañía, basado en el buzón de voz.

El archivo de configuración se llama “voicemail.conf”

Creando un Buzón:
Dentro de cada contexto del correo de voz, definiremos distintos buzones de voz, la sintaxis para definir un buzón de voz es la siguiente:

mailbox => password,name[,email[,pager_email[,options]]]

Pero que función cumple cada uno de estos parámetros?

Mailbox: es el numero del buzón de voz, usualmente lleva el mismo numero que la extensión a la que esta asociado.

Password: es la contraseña numérica que el propietario del buzón de voz utilizara para ingresar a su buzón. Si el propietario cambia su contraseña el sistema la actualizara en este archivo (voicemail.conf)

Name: Es el nombre del propietario del buzón de voz, el directorio de la compañía utiliza este campo para realizar la búsqueda del usuario.

Email: Aquí va la dirección de correo electrónico del propietario del buzón de voz, Asterisk puede enviar mensaje al correo, incluyendo el mismo audio del mensaje.

Pager email: dirección de correo del localizador o celular del propietario donde se enviara un mensaje corto.

Options: en esta campo pueden ir una lista de opciones que permitirán afinar la configuración del buzón de voz del propietario del buzón y prevalecen sobre la configuración global. Hay nueve opciones validas: adjuntar, servermail, tz, saycid, review, operator, callback, dialout, y exitcontext.

Estas opciones deber ingresarse respetando el formato “opción=valor” y separadas por el signo pipe “|”, la opción tz permite definir la zona horaria, a las zonas previamente definidas en la sección [zonemessages] en el mismo archivo (voicemail.conf),

Una definición típica para un buzón de voz es la siguiente:

101 => 1234,Joe Public,jpublic@somedomain.com,jpublic@pagergateway.net,tz=central|attach=yes

El buzón de voz utiliza la aplicación voicemail(), esta aplicación envía al llamante a una especifico buzón de voz para que pueda dejar el mensaje, el buzón de voz debe ser especificado como “mailbox@context” donde “context” es el nombre del contexto del correo de voz, opcionalmente se puede agregar las letra “b” y “u”, para diferencias los tipos de saludo (ocupado y no disponible).

Vamos a poner algunos ejemplos de cómo configurar el buzón de voz en nuestro dial plan

exten => 201,1,Dial(${JOHN})

; esta extensión permite llamar a la extensión de Jhon.


exten => 201,1,Dial(${JOHN},10)
exten => 201,n,VoiceMail(101@default,u)

; con esta otra podemos hacer que la extensión de jhon timbre durante 10 segundos y si no contesta derivar la llamada al buzón de jhon, y la u indica que Jhon no esta disponible.


Ahora vamos a combinarlo con la aplicación gotoif()


exten => 201,1,Dial(${JOHN},10)
exten => 201,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => 201,n(unavail),Voicemail(101@default,u)
exten => 201,n,Hangup()
exten => 201,n(busy),VoiceMail(101@default,b)
exten => 201,n,Hangup()

Ingresando al buzón de voz:

Para acceder al buzón de voz utilizaremos la aplicación, VoiceMailMain()

exten => 700,1,VoiceMailMain()
; esto nos preemitirá ingresar al buzón de voz por medio de la extensión 700.

Otra manera también interesante de ingresar al buzón de voz es la siguiente:

exten => _*982XX,1,VoiceMailMain(${EXTEN:3}@default)
exten => _*982XX,1,Hangup

Aplicación Directorio: directory()

Esta aplicación puede aceptar hasta 3 argumentos, el primero el es contexto dentro del archivo voicemail.conf, donde buscara a los usuarios, el segundo es el contexto en extensions.conf, desde donde intentara llamar a los usuarios, y el tercero (es opcional), puede ser la letra f, por defecto el directorio realiza la búsqueda por el apellido, pero con la letra f se puede configurar el directorio para que realice la búsqueda por nombre.

Por ejemplo:
exten => 8,1,Directory(default,from-internal,f)
exten => 9,1,Directory(default,from-internal)


DIAL PLAN MACROS

Las macros resultan de mucha ayuda a la hora de elaborar el dial plan, ya que nos permiten simplificar aun mas la elaboración de nuestro dial plan, es como crear nuestras propias funciones personalizadas para el dial plan, a continuación vamos a utilizar como ejemplo la creación de una macros para el buzón de voz.

Observemos el siguiente dial plan:

exten => 201,1,Dial(${JOHN},10)
exten => 201,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => 201,n(unavail),Voicemail(101@default,u)
exten => 201,n,Hangup()
exten => 201,n(busy),VoiceMail(101@default,b)
exten => 201,n,Hangup()

En el hemos automatizado la forma como las llamadas ingresaran directamente al buzón de voz dependiendo del estado de la extensión utilizando la variable ${STATUS}, sin embargo así como esta tendríamos que agregar estas líneas por cada extensión en la central ya que esta extensión estará siempre ligada hacia el usuario Jhon o sea la extensión 201.

Utilizaremos las macros para mostrar cual es la mejor manera de configurar una buzón de voz para varias extensiones.

Definiendo la macros
La macros se definen de una manera muy similar a los contextos,
debemos definir una macros entre corchetes y anteponiendo la palabra
“macro-” antes del nombre de la macro que vamos a crear.

Ejemplos:

[macro-prueba]

[macro-voicemail]

De esta manera el sistema podrá diferenciar una macro de un contexto
normal

Definiendo la macros

Veamos un ejemplo con el buzón de Jhon pero ahora dentro de una
macros

[macro-voicemail]
exten => s,1,Dial(${JOHN},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(101@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(101@default,b)
exten => s,n,Hangup()

Uno punto importante es mencionar que las macros solo soportan la
extensión “S”
Todo va bien solo que aun seguimos amarrados al buzón de Jhon.

Definiendo la macros

Sin embargo las macros tienen propiedades importantes a comparación
de un contexto común corriente. Y es que permiten trabajar con algunas
variables adicionales e incluso soportan el envió de argumentos

Incorporando una macros al Dial Plan:

exten => 201,1,Macro(voicemail)

Las aplicación macro define variables especiales, para su utilización:

${MACRO_CONTEXT}, contiene el contexto original desde donde fue ejecutada la macro

${MACRO_EXTEN}, contiene el valor de la extensión original donde fue ejecutada la macro

${MACRO_PRIORITY}, contiene la prioridad original desde donde fue ejecutada la macro

${ARGn}, contiene el “n” mismo argumento ingresado a través de la macro, por ejemplo, el primer argumento será ${ARG1}, el segundo argumento será {ARG2} y así sucesivamente.

En el siguiente ejemplo trataremos de explicar como se pueden utilizar esta variables especiales:

[macro-voicemail]
exten => s,1,Dial(${JOHN},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()

Usando argumentos en las macros

Ahora vamos a prepara una macros genérica gracias a los argumentos, observemos el siguiente ejemplo donde por fin separamos la macros del numero de la extensión, para poder utilizarla desde cualquier extensión.

[macro-voicemail]
exten => s,1,Dial(${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()

De esta manera podemos llamar a la macros desde el dial plan

[macro-voicemail]
exten => s,1,Dial(${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()

[from-internal]
exten => 101,1, Macro(voicemail,${JOHN})
exten => 102,1,Macro(voicemail,${JANE})
exten => 103,1,Macro(voicemail,${JACK})

Incluso podemos simplificar una vez mas utilizando la variable ${EXTEN}

[macro-voicemail]
exten => s,1,Dial(SIP/${ARG1},10)
exten => s,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => s,n(unavail),Voicemail(${MACRO_EXTEN}@default,u)
exten => s,n,Hangup()
exten => s,n(busy),VoiceMail(${MACRO_EXTEN}@default,b)
exten => s,n,Hangup()

[from-internal]
exten => 1XX,1,Macro(voicemail,${EXTEN})

Solo debemos tomar en cuenta que en esta ocasión estamos amarrados al protocolo SIP, en el ej. Anterior no importaba el tipo de canal utilizado ya que este se declaraba como variables globales.

Un ejemplo mas avanzado he interesante de analizar es el siguiente:

[macro-voicemail]
exten => s,1,Dial(${ARG1},20)
exten => s,n,Goto(s-${DIALSTATUS},1)
exten => s-NOANSWER,1,Voicemail(${MACRO_EXTEN},u)
exten => s-NOANSWER,n,Goto(incoming,s,1)
exten => s-BUSY,1,Voicemail(${MACRO_EXTEN},b)
exten => s-BUSY,n,Goto(incoming,s,1)
exten => _s-.,1,Goto(s-NOANSWER,1)

En esta ocasión estamos incluyendo el comando Goto y esto nos puede servir para reenviar la llamada hacia un menú por ejemplo donde el usuario llamante tenga mas de una opción.

ASTERISK: FEATURES

Podemos configurar algunas características adicionales en el archivo features.conf.

Las características principales son las siguientes:

Transferencia desatendida (blind transfer)
Parqueo de llamadas (parking lot)
Grupo para jalar llamadas (pickup group)
Sala de conferencias (meetme)

Para ello será necesario que editemos el archivo features.conf ubicado en la carpeta de asterisk.

TRANSFERENCIAS DESATENDIDA

Normalmente por defecto la transferencia desatendida se realiza presionado el boton #

Este tipo de transferencia consiste en derivar la llamada hacia otro anexo sin habernos cerciorado antes si la persona en la extensión destino se encuentra disponible para recibir la llamada.

Vamos a editar el archivo de la ruta /etc/asterisk/features.conf
Donde buscaremos el parámetro blind transfer y cambiaremos el varo “#” por “##”, con esto conseguiremos evitar problemas con las llamadas hacia números que comiencen con la tecla “#” como los móviles RPM por ejemplo.

El siguiente grafico ilustrara mejor el proceso de comunicación



Realizar una transferencia atendida, consiste en llamar al destino para confirmar la transferencia, antes de realizarla.
Este tipo de transferencia suele ser necesario para trabajadores que no acostumbran contestar ni llamar directamente de su extensión, tales como funcionarios, gerentes, ejecutivos, etc.

El siguiente grafico nos ilustrara el proceso de comunicación.

Se puede habilitar una combinación para la transferencia atendida, por ejemplo *2 para simular la tecla flash



PARQUEO DE LLAMADAS

En algunas ocasiones durante una conversación telefónica es necesario movilizarnos ( para ir a conseguir un archivo, documento, o realizar alguna consulta), pero lamentablemente no es posible ni practico que todos los usuario cuenten con un anexo inalámbrico, en estos casos es ideal contar con la función de parqueo de llamadas.

Esta función consiste en aparcar una llamada en una extensión virtual dentro de nuestra central telefónica, de esta manera podremos recuperar esa llamada simplemente llamando a la extensión virtual creada en el momento que aparcamos la llamada



Esta función se habilita en la sección [general]

Y cuenta con los siguientes parámetros:

Parkext => 700 donde 700 es el numero de la extensión de entrada al estacionamiento

Parkpos => 701-720, aquí definimos el rango de posiciones apra nuestro estacionamiento

Context => parkedcalls, aquí definimos el nombre del contexto en para nuestro estacionamiento, no olvidar que este contexto debe estar incluido (include) en el contexto de las extensiones que queramos que puedan recuperar llamadas desde el estacionamiento.

Parkingtime => 180, este será el tiempo máximo en segundos que una llamada se mantendrá en el estacionamiento.

PICKUP GROUP

Un Pick up group es un grupo conformado por extensiones con autorización para “jalarse” las llamadas, es decir; estas extensiones podrán contestar llamadas dirigidas hacia cualquier anexo de su grupo, pero marcando previamente un código.

Por ejemplo si tenemos dos extensiones en un mismo grupo, y llaman a una de ellas pero justo no se encuentra la persona en su extensión, entonces otra persona podrá contestar la llamadas desde su extensión (siempre que este dentro del mismo pickup group) con solo presionar: *8



Esta opción también se encuentra en la sección general y podemos definir o modificar el código por defecto *8 en el parámetro:

Pickupexten = *8

Pero será necesario también que asignemos los grupos a cada extensión en el archivo sip.conf.

El grupo puede asignarse mediante los parámetros:
Callgroup=1, donde 1 es el número del grupo de llamada
Pickupgroup=1, donde 1 es el número del grupo para pickup

CONFIGURACION DE EQUIPOS TERMINALES

TIPOS DE EXTENSIONES



SOFTPHONE



Softphone SIP/IAX2



CONFIGURANDO EL SOFTPHONE





ADAPATADOR DE TERMINAL ANALOGO-SIP
Linksys PAP2T - NA



CONFIGURANDO PAP2 Linksys





CONFIGURANDO UN PAP2 Linksys PARA FAX



ADAPTADOR DE TERMINAL ANALOGO – IAX
Digium IAXy S101I

CONFIGURACION DE ATA IAXy





TELEFONO IP





•Es importante tomar en cuenta si el teléfono IP cuenta con un solo puerto de red, ya que de ser así, necesitara de su propio punto de red para operar.
•Actualmente la mayoría de los teléfonos ip vienen con dos puertos de red permitiendo reutilizar los puntos de red destinados para otros terminales, ya que viene proveídos de un bridge integrado que permite colocarlos directamente hacia el punto de red y desde el teléfono hacia el terminal que anteriormente se encontraba conectado.
•Otros datos importantes que se deben tener en cuenta son: los codecs soportados, el numero de línea que maneja, si tiene handfree, etc.

CONFIGURANDO UN TELEFONO IP
Grand Stream

Para ingresar debemos colocar su dirección IP en la barra de direcciones de nuestro navegador
La contraseña que viene por defecto es admin.
La dirección IP normalmente se adquiere por dhcp por defecto, de lo contrario trae la IP 192.168.0.160





LINEAS Y ANEXOS: CANALES ZAP - SIP – IAX

-Backup de archivos importantes
–Creación Extensiones SIP – IAX2
–Configuración de una Tarjeta Analógica
–Configuración de una Tarjeta Digital
–Cambio de Idioma a Español

BACKUP ARCHIVOS IMPORTANTES

Para realizar el backup de los archivos mas importantes:
Ejecutar:

cp /etc/zaptel.conf /etc/zaptel.conf.old
cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.sample
cp /etc/asterisk/iax.conf /etc/asterisk/iax.conf.sample
cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.sample
cp /etc/asterisk/zapata.conf /etc/asterisk/zapata.conf.sample
cp /etc/asterisk/features.conf /etc/asterisk/features.conf.sample
cp /etc/asterisk/meetme.conf /etc/asterisk/meetme.conf.sample


CREACION DE EXTENSIONES SIP


Las extensiones sip se crean y configuran dentro del archivo “sip.conf”

Podemos eliminar el archivo de configuración que carga asterisk samples, y crear nuestro archivo de cero.

Minimamente deberemos colocar lo siguiente dentro del archivo:

[general]
port=5060
bindaddr=0.0.0.0
context=default

Luego podremos continuar con nuestra configuración personalizada

Luego debemos empezar a configurar nuestras extensiones

Editar el archivo sip.conf

;Anexos

[201]
type=friend
username=201
secret=1234
callerid=<201>
context=from-internal
disallow=all
allow=ulaw
allow=gsm
host=dynamic
dtmfmode=rfc2833
canreinvite=no

En la imagen anterior se pueden apreciar los siguientes parámetros:

[201], numero de la extensión

Type=friend, nos indica el tipo de extensión (friend, user, peer).

Username=201; numero de la extensión

Secret=1234; sirve para asignar la contraseña de la extensión.

Callerid=<201>; aquí se coloca el identificador de llamada de la extensión.

Context=from-internal; aquí se define el contexto al cual pertenece la extensión

Disallow=all, desactiva todos los codec

Allow=ulaw & gsm, activa únicamente los codecs ulaw y gsm

Host=dynamic, permite que esta extensión pueda registrarse desde cualquier dirección IP

EJERCICIO

Crear 5 extensiones del rango 201 al 205 para los siguientes usuarios
- Mark Spencer <201>
- Bill Gates <202>
- Steves Jobs <203>
- Linus Torvalds<204>
- Kevin Mitnick <205>

Considerar las siguientes características para todos los usuarios:
Type=friend
Username=según_corresponda
Secret=102030
Callerid=según_corresponda
Context=from-internal
Nat=never
Canreinvite=no
Disallow=all
Allow=ullaw
Host=dynamic
Dtmfmode=rfc2833

TEMPLATES DE CONFIGURACION

Tomando como referencia el ejemplo anterior vamos a mostrar como podemos simplificar la creación de las extensiones con el uso de templates, los cuales permiten simplificar los parámetros comunes en un grupo de extensiones

[settings](!) ; el signo de admiración indica a asterisk que este es un template
Type=friend
Secret=102030
Context=from-internal
Nat=never
Canreinvite=no
Disallow=all
Allow=ullaw
Host=dynamic
Dtmfmode=rfc2833

Ahora las demás extensiones solo deberán hacer referencia al template que se ha creado para ellas.

[201](settings)
Username=201
Callerid=Mark Spencer <201>

[202](settings)
Username=202
Callerid=Bill Gates <202>

[203](settings)
Username=203
Callerid=Steve Jobs <203>

……

[20n](settings)
Username=203
Callerid=xxxxx yyyy <20n>

CODECS

Los codecs están basados en algoritmos de compresión, existen varios tipos de codec para cada formato y tipo de medio (mp3, MPEG, JPEG, GIF, MP4, etc.). Sin embargo nosotros vamos a centrarnos en codecs diseñados para comprimir la voz.

Codec G711a / G711u
Codec GSM
Codec G729
Codec G723.1


CODEC G711
G.711 es un alto codec del estándar del índice binario (64 Kbps) ITU. Es la lengua materna de la red de teléfono digital moderna.

Aunque fue estandardizado formalmente en 1988, el codec del PCM G.711 es el abuelo de la telefonía digital. Inventado por Bell Systems e introducido en los tempranos años 70, una troncal digital T1 emplea un esquema de codificación sin comprimir de la modulación de código de pulso de 8 bits con un índice de la muestra de 8000 muestras por segundo. Esto permitió un ancho de banda máximo (teórico) de la voz de 4000 hertzios. Una troncal T1 lleva 24 canales digitales PCM multiplexados. El estándar europeo mejorado E1 lleva 30 canales.

Hay dos versiones: U-law y A-law. U-law viene del estándar T1 usado en Norteamérica y Japón. A-law viene del estándar E1 usado en el resto del mundo. La diferencia es en el método la señal análoga que es muestreada. En ambos esquemas, la señal no se muestrea linealmente, pero en una manera logarítmica. A-law proporciona una gama más dinámica en comparación con U-law. El resultado es un sonido menos “borroso”.

Usar G.711 para VoIP dará la mejor calidad de la voz; puesto que no utiliza ninguna compresión y es el mismo codec usado por la red del PSTN y las líneas del ISDN, él sonido será como usar un teléfono regular o ISDN. También tiene el delay más bajo porque no hay necesidad de la compresión, que cuesta tiempo de proceso. La desventaja es que necesita mas ancho de banda que otros codecs, hasta 84 Kbps incluyendo todo el TCP/IP de las cabeceras.
G.711 es utilizado por la mayoría de los proveedores de VoIP y se encuentra prácticamente en todos los equipos VoIP.

GSM (Global System for Mobile communications) Este codec usa la misma codificación usada para comprimir el audio en la telefonía móvil, este codec también es usado comúnmente para comunicaciones por videoconferencia y software de telefonía IP ya que consigue una compresión elevada con una calidad aceptable de audio, comúnmente voz humana.

Normalmente estos codecs se encuentran con Windows pero es posible que no se encuentren instalados en su sistema si en el proceso de instalación no eligió la opción adecuada.

CODEC GSM

GSM (Global System for Mobile communications) Este codec usa la misma codificación usada para comprimir el audio en la telefonía móvil, este codec también es usado comúnmente para comunicaciones por videoconferencia y software de telefonía IP ya que consigue una compresión elevada con una calidad aceptable de audio, comúnmente voz humana.

Normalmente estos codecs se encuentran con Windows pero es posible que no se encuentren instalados en su sistema si en el proceso de instalación no eligió la opción adecuada.

CODEC G729

El codec G.729 es un estandar de la industria que permite optimizar la codificación de la voz en paquetes de datos y así conseguir introducir más llamadas con un ancho de banda limitado, optimizando el rendimiento del uso de Voz sobre IP.

Esta tecnología, una de las más eficientes del mercado, está patentada por sus desarrolladores, Spirit DSP y su uso comercial tiene un coste. El coste es por canal concurrente.

Nota: La codificación G.729 se realiza por software, con su consiguiente carga para el procesador.

Digium, la empresa desarrolladora de Asterisk, recomienda a modo ejemplo destinar un dual Intel(R) Xeon 1.8GHz para 60 llamadas G729 concurrentes y un dual Intel(R) Xeon 2.8GHz para 80 llamadas.

CODEC G723.1

G723.1. Un standard ITU standard del tipo narrow-band audio codec que encodea el habla en una cadena de datos cada 30ms.

Consigue reducir el requerimiento de ancho de banda hasta 5kbps por canal de voz.

CONFIGURACION TARJETA ANALOGICA

Para configurar una tarjeta analógica deberemos seguir los siguientes pasos:

Paso 1:

Editar el archivo de configuración “zaptel.conf”

Ejecutar:

Vi /etc/zaptel.conf

Modificarlo de tal manera que quede como la siguiente imagen

Vi /etc/zaptel.conf



En la imagen anterior se pueden apreciar los siguientes parámetros:

Fxsks=1-2 ; significa que tenemos una tarjeta con 02 módulos FXO ubicados en los slots 1 y 2 de la tarjeta

Loadzone=us ; nos permite especificar el tipo de tonos para la tarjeta, en este caso tono para EEUU y normalmente son compatibles con los de Perú.

Defaultzone= es; la zona que utilizaran los dispositivos que no sean especificados explícitamente.

Paso 2:

Editar el archivo de configuración “zapata.conf”

Ejecutar:

vi /etc/asterisk/zapata.conf

Luego de haber editado el archivo reiniciar asterisk

asterisk –r
restart now

[trunkgroups]
[channels]

rxwink=300
echocancel=yes
echocancelwhenbridged=no
echotraining=800
relaxdtmf=yes
rxgain=2.0
txgain=2.7

signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
answeronpolarityswitch=yes
hanguponpolarityswitch=yes
channel=>3

signalling=fxs_ks
callerid=asreceived
group=0
context=from-pstn
busydetect=yes
busycount=4
channel=>4



Debemos tomar en cuenta que este archivo reemplaza al viejo zapata.conf, así que la configuración será muy similar sino la misma.

En la imagen anterior se pueden apreciar los siguientes parámetros:

Language=en; significa que las voces que se cargaran por defecto serán las voces de ingles

Rxwink = 300; su valor esta en milisegundos y normalmente se deja por defecto.

Busydetect=yes; permite que la tarjeta detect el tono de ocupado en una línea.

Busycount=4, requiere que busydetect este en yes, y permite colgar la llamadas luego de escuchar 4 tonos de ocupado en este caso.

Debemos tomar en cuenta que este archivo reemplaza al viejo zapata.conf, así que la configuración será muy similar sino la misma.

En la imagen anterior se pueden apreciar los siguientes parámetros:

Echocancel=yes; permite habilitar el cancelador de eco por software.

Echocancelwhenbridged=no ; activa el cancelador de eco para las llamadas entre los puertos de la misma tarjeta, en principio este tipo de llamadas no debería requerir cancelador de eco.

Echotraining=800; tiempo en milisegundos para el entrenamiento del cancelador de eco

Relaxdtmf=yes; permite que la tarjeta detect el tono de ocupado en una línea.

Rxgain & txgain , permite incrementar la ganancia tanto de recepción como de transmisión.

En la imagen anterior se pueden apreciar los siguientes parámetros:

SPAN 1:
Signalling=fxs_ks, Tipo de señalización para módulos FXO se utiliza fxs_ks

Callerid=asreceived, indica que el caller id será transmitido tal cual es recibido.

Group=0; Asignamos un grupo para estas troncales

Context=from-pstn; asignamos un contexto aun cuando no hemos creado este contexto en extensions.conf aun.

Answeronpolarityswitch=no; activamos la detección de inversión de polaridad al contestar una llamada

Hanguponpolarityswitch=no; activamos la detección de inversión de polaridad para colgar una llamada

Channel=>1; indicamos el canal al cual se le asignaran los parámetros anteriores.

REVERSION DE POLARIDAD

Cuando instalamos Tarjetas en nuestro servidor, debemos tomar en cuenta que la detección de reversión de polaridad para la PSTN no viene activada y para evitar que las líneas se queden pegadas cuando el llamante remoto cuelgue antes que hallamos podido contestar la llamada será necesario agregar las siguientes líneas en el archivo zapata-auto.conf justo encima del parámetro “Channel” tal como muestra la siguiente imagen.
Answeronpolarityswitch=yes
Hanguponpolarityswitch=yes



REVERSION DE POLARIDAD

También podría ser necesario agregar estas dos líneas adicionales si conectamos bases celulares.

Busydetect=yes
Busycount=4


CONFIGURACION TARJETA DIGITAL

Para configurar una tarjeta digital deberemos seguir los siguientes pasos:

Paso 1:

Editar el archivo de configuración “zaptel.conf”

Ejecutar:

Vi /etc/zaptel.conf

Modificarlo de tal manera que quede como la siguiente imagen

Vi /etc/zaptel.conf



En la imagen anterior se pueden apreciar los siguientes parámetros:
span=(spannum),(timing),(LBO),(framing),(coding)

Span =1,1,0,css,hdb3,
spannum ; indica el numero del span
timing; se usa para sincronizar los dispositivos, 0,1,2
line build out, longitud del cable, normalmente este parámetro va en “0”
framming, Css, como comunicarse con el dispositivo del otro lado de la línea
coding, Hdb3, método de codificación, podría necesitar de CRC4 en el caso de los E1

bchan= 1-15,17-31, tomara cono canales de voz los canales del 1al 15 y luego del 17 al 31 (total de 30 canales)

dchan= 16; significa que el canal de señalización será el 16

Paso 2:

Editar el archivo de configuración “zapata.conf”

Ejecutar:

vi /etc/asterisk/zapata.conf

Luego de haber editado el archivo reiniciar asterisk

asterisk –r
restart now





Debemos tomar en cuenta que este archivo reemplaza al viejo zapata.conf, así que la configuración será muy similar sino la misma.

En la imagen anterior se pueden apreciar los siguientes parámetros:

Language=en; significa que las voces que se cargaran por defecto serán las voces de ingles

Rxwink = 300; su valor esta en milisegundos y normalmente se deja por defecto.

Resetinterval=never; permite establecer la reanudacion de los canales no utilizados, por defecto son 3600 segundos.

Busydetect=yes; permite que la terjeta detect el tono de ocupado en una linea.

Busycount=4, requiere que busydetect este en yes, y permite colgar la llamadas luego de escuchar 4 tonos de ocupado en este caso.

Debemos tomar en cuenta que este archivo reemplaza al viejo zapata.conf, así que la configuración será muy similar sino la misma.

En la imagen anterior se pueden apreciar los siguientes parámetros:

Echocancel=yes; permite habilitar el cancelador de eco por software.

Echocancelwhenbridged=no ; activa el cancelador de eco para las llamadas entre los puertos de la misma tarjeta, en principio este tipo de llamadas no debería requerir cancelador de eco.

Echotraining=800; tiempo en milisegundos para el entrenamiento del cancelador de eco

Relaxdtmf=yes; permite que la tarjeta detect el tono de ocupado en una línea.

Rxgain & txgain , permite incrementar la ganancia tanto de recepción como de transmisión.

En la imagen anterior se pueden apreciar los siguientes parámetros:

SPAN 1:
Signalling=pri_cpe, tipo de señalización utilizado para primarios

switchtype=euroisdn, Este parámetro solo se utiliza para las tarjetas primarias

Group=0; Asignamos un grupo para estos canales

Context=entradapri; asignamos un contexto aun cuando no hemos creado este contexto en extensions.conf aun.

bchannel=>1-15; canal de datos

dchannel => 16; canal de control o señalización


CARGANDO VOCES EN EL SERVIDOR

Lo primero que vamos a hacer es cargar los archivos con las voces, en español en este caso.

Para ello vamos a utilizar el programa winscp, para conectarnos al servidor.

Una vez conectados nos dirigimos a la siguiente ruta:
/var/lib/asterisk/sounds/

Dentro de esta carpeta encontraremos los archivos con las voces de nuestro servidor que por defecto viene en ingles.

Para instalar el idioma debemos copiar el contenido de la carpeta voces completas en español del cd dentro de la ruta

/var/lib/asterisk/sounds

De manera que se carguen los archivos en español en las respectivas rutas de manera automática

/var/lib/asterisk/sounds/es
/var/lib/asterisk/sounds/digits/es
/var/lib/asterisk/sounds/letters/es
/var/lib/asterisk/sounds/followme/es
Etc…

CONFIGURANDO ARCHIVOS PARA CAMBIAR EL IDIOMA

Es necesario cambiar tres archivos principalmente.

1./etc/asterisk/sip.conf – para cambiar el idioma a los anexos
2./etc/asterisk/iax.conf – para cambiar el idioma a los anexos
3./etc/asterisk/zapata.conf – para cambiarle el idioma a la troncal
En todos será necesario ingresar o modificar el parámetro “language” para que quede de la siguiente manera
“language = es”

FINALIZANDO LA CARGA DEL IDIOMA

Finalmente una ves modificado deberemos reiniciar el servicio de asterisk para que se ejecuten los cambios.

INSTALACION Y SERVIDOR BASE

•INSTALACION Y SERVIDOR BASE

–Instalación de Linux Ubuntu Server 8.04
–Conexión vía Putty y WinSCP
–Comandos básicos y cambio de contraseñas
–Instalación de Dependencias de Asterisk
–Instalación de Asterisk 1.4


Instalación de Linux Ubuntu Server 8.04
BOOT CD
































Al finalizar la instalación deberemos logearnos con el nombre de usuario que creamos durante la instalación.





Luego le asignaremos una contraseña al usuario root
Ejecutamos:
sudo passwd



Salimos de la sesión
Ejecutar:
logout
Nos aseguramos que tenemos acceso a internet con los comandos “ifconfig” y “ping”
Ingresamos ahora como root e instalamos ssh para las conexiones remotas desde windows
apt-get install ssh
Podemos modificar el archivo /etc/network/interfaces, para asignarle una dirección ip estática a nuestro sistema



También modificar el archivo /etc/resolv.conf para configurar o modificar manualmente los dns del sistema



Luego de modificar el archivo “interfaces”, es necesario reiniciar el servicio de red para ejecutr los cambios.
Ejecutar:
/etc/init.d/networking restart




CONEXION VIA PUTTY Y WINSCP










COMANDOS BASICOS LINUX

shutdown -h now: permite apagar el servidor
shutdown –r now: permite reiniciar el servidor
exit: Detiene la conexión remota
/etc/init.d/networking restart: reinicia el servicio de red



CAMBIO DE CONTRASEÑAS


Es muy recomendado por seguridad modificar o cambiar completamente las contraseñas que viene por defecto en el sistema ya que de lo contrario cualquier usuario, podría introducirse en nuestro sistema y realizar cambios no autorizados

Cambiar el password de root
Password del root (administrador de linux): passwd

INSTALACION DE DEPENDENCIAS

Ejecutar:

apt-get update
apt-get upgrade
cd /usr/src
apt-get install -qy make linux-headers-`uname -r` gcc g++ libstdc++6
apt-get install -qy bison flex libncurses5-dev zlib1g-dev libssl-dev libnewt-dev
apt-get install -qy libiksemel-dev libiksemel-utils


INSTALACION DE ASTERISK

Paso 1:
Ahora vamos a iniciar la instalación de Asterisk en nuestro sistema; para ello vamos a comenzar copiando los instaladores al sistema con WinScP, los instaladores los encontraran en su CD de materiales de instalación.

Abrir WinScP y conectarnos al servidor asterisk
Crear una carpeta asterisk dentro de la ruta: /usr/src/
Dirigirnos a la carpeta /usr/src/asterisk
Copiar los archivos de instalación dentro de la carpeta asterisk



Paso 2:
Desde putty no colocamos en la carpeta asterisk ejecutando:
cd /usr/src/asterisk/

Luego para descomprimir los archivos de instalación ejecutar:
tar xvfz asterisk-1.4.21.tar.gz
tar xvfz zaptel-1.4.12.1.tar.gz
tar xvfz libpri-1.4.7.tar.gz

Paso 3:
Una vez descomprimidos los archivos de instalacion empezaremos la complicacion en el siguiente orden: libpri, zaptel, asterisk.

Ingresamos a la carpeta libpri, compilamos e instalamos

Ejecutar:
cd /usr/src/asterisk/libpri-1.4.7
make clean
make
make install
cd ..

Paso 4:
Ingresamos a la carpeta zaptel, compilamos e instalamos

Ejecutar:
cd /usr/src/asterisk/zaptel-1.4.12.1/

make clean
make
make install
make config
genzaptelconf -sdvM
cd ..



Nota Paso 4:
Si durante la ejecución del comando make, obtenemos el siguiente error solo debemos ejecutar nuevamente el comando make



Paso 5:
Comprobamos si zaptel ha reconocido el hardware con el comando
zaptel_hardware





Paso 6:
Ingresamos a la carpeta asterisk, compilamos e instalamos

Ejecutar:
cd /usr/src/asterisk/asterisk-1.4.21/
make clean
./configure
make
make install
make samples
make config
cd ..

De haber ejecutado correctamente los pasos deberíamos obtener las siguientes pantallas luego de la ejecución de los comandos



./configure



make



make install

Paso 7:

Finalmente iniciamos asterisk con el comando
asterisk -vvvvvc