miércoles, 4 de junio de 2014

IMPLEMENTACION DE UNA TRONCAL SIP UTILIZANDO UN PROVEEDOR VoIP

Las troncales son el medio que permite comunicar a Asterisk con el mundo exterior o PSTN, son los canales de comunicación de entrada y salida de llamadas, también permiten la comunicación hacia otras PBX, tradicionales o IP.

El tipo de troncal a utilizar, dependerá de la manera que el proveedor brinda el servicio de telefonía. Tradicionalmente el servicio es entregado por medio de líneas de cobre, fibra óptica, redes IP, por medio de Internet o enlaces dedicados de datos; con la opción de redes IP, no es necesario instalar ningún hardware de comunicación en Asterisk.

Troncales SIP (SIP Trunk): se transporta la voz por medio de las redes IP, se puede utilizar Internet para establecer los enlaces, de esta manera se podrán tener números telefónicos de cualquier parte del mundo sin importar la ubicación geográfica. La cantidad de canales dependerá del ancho de banda del enlace IP.

Troncales Digitales (Puertos E1): Es el método más utilizado por los proveedores para la entrega de los servicios telefónicos, utiliza medios físicos para el transporte de la voz como cable de cobre o fibra óptica, se debe instalar una tarjeta en el servidor para configurar el troncal.

Troncales Análogas (Puertos FXO): Es la manera tradicional de recibir las líneas telefónicas.  Por cada línea es necesario un puerto, por ejemplo si hay 4 líneas telefónicas es necesario utilizar un adaptador con 4 puertos FXO. 

El tipo de troncal determina el número de llamadas simultaneas, por ejemplo, en una troncal digital E1 permite hasta un máximo de 30 llamadas por enlace.

En una troncal análoga FXO solo permite una llamada por enlace.


En troncales SIP, en teoría no hay límite de llamadas simultaneas, el limite lo impone el ancho de banda de la red IP, y es recomendable realizar menos de 150 llamadas simultaneas.

Las rutas son reglas que indican por cual troncal se deberán enviar las llamadas en base a ciertos patrones de marcado del dialplan. También se utilizan rutas para recibir llamadas, cuando una llamada entrante es recibida en una troncal se requiere que estas sean direccionadas a un numero de extensión, como también puede ser a un IVR, para esto se requiere que se cree un plan de marcado para llamadas entrantes.

Por ejemplo, el proveedor VozToVoice, el cual se va a utilizar como ejemplo,  requiere que la sintaxis para marcar cualquier numero sea: 00 + código país + numero.

Para configurar el troncal SIP, se utilizara, en este caso, el proveedor SIP VozToVoice. Para utilizar este proveedor se puede abrir una cuenta desde esta página. Una vez que la cuenta ha sido activada, habrá 1 dólar de crédito para realizar las llamadas por medio de este proveedor.

en el archivo sip.conf se configura lo siguiente:

;register => username:password@your.sip.provider

[voztovoice]
username=
type=friend
secret=
host=sip.voztovoice.eu 
fromuser=
context=voztovoice 
qualify=yes
disallow=all
allow=ulaw
allow=alaw 
trustrpid = yes
sendrpid = yes
directmedia = no

en el archivo extensions.conf se configura lo siguiente:

#include llamadas_externas.conf


archivo llamadas_externas.conf

[supervisor]
exten => _00.,1,Dial(SIP/voztovoice/${EXTEN},30)

exten => _3XXXXXXXXX,1,Dial(SIP/voztovoice/0057${EXTEN},30)

exten => _[12,4-9]XXXXXX,1,Dial(SIP/0057${EXTEN}@voztovoice,30)


Contexto [desvio_llamadas]

Las llamadas con destino a una extensión, se podrán desviar a una serie de números que se hayan definido previamente.

Include=> desvio_llamadas


AstDB: Asterisk Database

Se permitirá a los agentes o el supervisor activar y desactivar la funcionalidad en cualquier momento, el valor 0 significa desactivado, el valor 1 significa activado.
Se organiza en familias, y dentro de una familia se pueden tener diversas claves, y para cada clave un solo valor.

*CLI> database put familia clave valor
*CLI> database show
*CLI> database show familia 

Set(var=${DB(familia/clave)})
Set(DB(familia/clave)=${var})

[desvio_llamadas]

;Activar FollowMe
exten => *00,1,NoOp (activando followme)
same => n,Set(DB(FM/${CALLERID(num)})=1)
same => n,Playback(beep)
same => n,hangup

;Desactivar FollowMe
exten => *01,1,NoOp (desactivando followme)
same => n,Set(DB(FM/${CALLERID(num)})=0)
same => n,Playback(beep)

same => n,hangup


La aplicación Gotoif: literalmente es: ve al destino indicado, (destino 1) si la expresión es verdadera, sino ve al destino 2 si la expresión es (falsa). Si la segunda prioridad no se especifica, el dialplan continúa con la prioridad que sigue. (Mostrar los dos ejemplos en el dial plan)

[desvio_llamadas]
exten => 345,1,Set(TEST=1)
same => n,GotoIf($[${TEST} = 1]?comadrejas:iguanas)
same => n(comadrejas),Playback(weasels-eaten-phonesys)
same => n,Hangup()
same => n(iguanas),Playback(office-iguanas)
same => n,Hangup()


Configuración del archivo followme.conf

[4001]
musicclass=> default
context=> desvio_llamadas
number=> 4010,15
number=> 00573155768698,15

se llamará el numero 4010 primero y después al número celular por 15 segundos

[desvio_llamadas]

exten => _40XX,1,Answer()
same => n,GotoIf($[${DB(FM/${EXTEN})} = 1]?FM)
same => n,Dial(SIP/${EXTEN},15,hHkKtTwWxXhHkKtTwWxX)
same => n,Hangup
same => n(FM),FollowMe(${EXTEN})
same => n,Hangup

Contexto [limitar_llamadas]

Limita el número de canales utilizados en las llamadas entrantes y salientes. A través de estas dos funciones, es posible limitar el número de canales utilizados en las llamadas entrantes y salientes. Por ejemplo, para limitar a 2 el número de llamadas simultaneas por extensión y también limitar a 2 las llamadas simultáneas por la troncal.  Se configura el dialplan donde si una extensión intenta sacar la tercera llamada simultánea, se le avise que no es posible, y si los 2 canales de la troncal se están utilizando, informar que no hay más canales disponibles

GROUP([category])
Set(GROUP(voip)=voztovoice)
Set(GROUP(salida)=${CALLERID(num)})

GROUP_COUNT([groupname][@category])
Set(trunksal=${GROUP_COUNT(voztovoice@voip)})
Set(extsal=${GROUP_COUNT(${CALLERID(num)}@salida)})

Gotoif($[${extsal} > 2 | ${trunksal} > 2]?busy)
Dial(SIP/voztovoice/${EXTEN})
Hangup
(busy),Playback(all-outgoing-lines-unavailable)
Hangup 

miércoles, 30 de abril de 2014

IMPLEMENTACION DEL CALL CENTER CON MACROS, COLAS Y AGENTES DIRECTORIO, Y CHAN_SPY

Call Center Vídeo_3

En este entrada se comienza a dar solución de forma total al primer objetivo del proyecto, en la entrada anterior, se vio como configurar las llamadas y el servicio de correo de voz mediante un macro, para lograr solucionar completamente el objetivo uno "comunicar todas las extensiones internas (dispositivos SIP) entre sí y brindarles servicios de correo, directorio telefónico entre otros".

El contexto entrante, como su nombre lo indica, recibe las llamadas que ingresen por las troncales analógicas o digitales según sea el caso. Cuando se llame utilizando el número 01800123, una contestadora automática da una bienvenida para seleccionar la opción de un menú. El menú dirige al cliente a una de las siguientes opciones, según el número marcado:

[entrante]
exten => 1,1,Macro(llamadas,SIP/4001)
exten => 2,1,Macro(colas,${COLA1})
exten => 3,1,Macro(colas,${COLA2})
exten => 4,1,Playback(conference-call)
exten => 4,2,Goto(conferencia,s,1)
exten => 5,1,Goto(ivr,s,1)

Es por esto que se crearan una serie de contextos los cuales van a permitir manejar de cierta forma  las llamadas internas, brindando a los usuarios servicios como por ejemplo, correo de voz, Directorio, Control de llamadas y además, dentro del proyecto se permitirá acceder directamente a las opciones del IVR

[entrante]

#include llamadas_internas.conf

archivo llamadas_internas.conf

[agentes]
include => llamadas_internas

[supervisor]
include => llamadas_internas
include => Directorio

[llamadas_internas]
exten => 01800123,1,Goto(entrante,s,1)
exten => _40XX,1,Macro(llamadas,SIP/${EXTEN},agentes)
exten => 150,1,VoiceMailMain(${CALLERID(num)}@agentes)

El contexto Directorio se crea para buscar un usuario asignado a un número telefónico, como se vio al crear el contexto llamadas_internas, el numero para ejecutar el directorio será el 150, esta aplicación relaciona dos contextos en este orden, el creado en el archivo voicemail.conf ya que en este están registrados los usuarios asociados a los números telefónicos y el contexto llamadas internas ya que si encuentra la persona asociada al número de extensión esta extensión timbrara.

[Directorio]
exten => 155,1,Directory(agentes,llamadas_internas)

[agentes]
include => Directorio

[supervisor]
include => Directorio

Para empezar a recibir llamadas, el agente debe identificarse en el sistema mediante su número de agente y contraseña. A partir de ese momento, el agente permanecerá conectado, escuchando una música hasta que haya alguna llamada para atender, este tipo de agentes es utilizado en call centers donde se puede utilizar una extensión exclusivamente para atender llamadas, pero si el call center cuenta con pocas extensiones, no será posible estar todo el tiempo conectado como agente, es necesario realizar las actividades cotidianas con los teléfonos y al mismo tiempo atender las llamadas.

Para configurar los agentes que atenderán las llamadas entrantes a las distintas colas hay que modificar el archivo agents.conf.

[general]
persistentagents=yes

[agents]
autologoff=15

agent => 1151,4321,Dexter Morgan
agent => 1152,4321,Walter White

exten => _115X,1,Agentlogin(${EXTEN})
same => n,Hangup

Para que los agentes puedan autenticarse y atender las colas de que son miembros, se utiliza en el dialplan la aplicación Agentlogin

exten => 115,1,Addqueuemember(Telecontacto,SIP/${CALLERID(num)})
same => n,Playback(agent-loginok)
same => n,Hangup

exten => 116,1,Removequeuemember(Telecontacto,SIP/${CALLERID(num)})
same => n,Playback(agent-loggedoff)
same => n,Hangup

Como es poco productivo tener un agente conectado permanentemente a una cola ya que utiliza parte del ancho de banda disponible, es por esto que se podrían conectar de forma dinámica y que mientras esperan las llamadas en cola puedan utilizar el teléfono para otro tipo de actividad, para añadir y eliminar de forma dinámica a la cola en el dial plan, se utilizan aplicaciones como AddQueueMember y RemoveQueueMember

CLI> module reload chan_agent.so
CLI> agent show

Las Colas permiten administrar de manera más eficiente las llamadas entrantes, estas llamadas que entran a una cola serán distribuidas por orden de llegada y serán atendidas por los agentes.

En el archivo queues.conf se configuran las distintas colas de espera, cuando se envía una llamada a una cola a través del dialplan, esta llamada se queda en espera hasta el momento en el que pueda ser atendida por un agente.  

Las llamadas que entran en una cola serán distribuidas por orden de llegada entre los miembros de esta cola. Para decidir a qué usuario se envía cada llamada, el sistema usará una serie de estrategias de distribución de que dispone

[general]
persistentmembers=yes
autofill=yes

[Telecontacto]

joinempty=paused,unavailable,invalid,unknown
leavewhenempty=paused,unavailable,invalid,unknown

member => Agent/1151
member => Agent/1152

exten => 110,1,Answer
same => n,Set(SPYGROUP=Telecontacto)
same => n,Queue(Telecontacto)
same => n,Voicemail(4002@agentes)
same => n,Hangup

CLI> module reload app_queue.so
CLI> queue show Telecontacto


En Asterisk el archivo del dialplan extensions.conf se divide en tres bloques:

La etiqueta que da inicio a la parte general, 
La etiqueta donde empieza la definición de las variables globales, 
Terminada la configuración [general] y [globals] se empieza a construir el dialplan, creando los contextos que ya se han visto.

#include variables_globales.conf

[globals]

COLA1 = Telecontacto
Supervisor = SIP/4001

[macro-colas]

exten => s,1,Queue(${ARG1})
same => n,Voicemail(4002@agentes)
same => n,Hangup

exten => 1,1,Macro(llamadas,${Supervisor})

Este contexto [control_llamadas] se crea para escuchar las conversaciones telefónicas por parte del supervisor sin que los teléfonos involucrados o espiados se den cuenta, este contexto permitirá controlar la calidad de las llamadas y al mismo tiempo ir capacitando a los agentes en sus actividades dentro del call center.

La aplicación chan_spy permite escuchar las conversaciones entre extensiones, tiene la opción de que las extensiones no de den cuenta de que están siendo vigiladas, se puede también hablar con la extensión que se monitorea sin que el interlocutor pueda escuchar la conversación, hablar con las dos extensiones simultáneamente etc. 
.
La variable ${SPYGROUP} permite escuchar solo los canales que pertenecen a un grupo, que por ejemplo, podrían ser los de la cola de espera Telecontacto

[control_llamadas]
exten => 160,1,ChanSpy(SIP,qbg(Telecontacto))
same => n,Hangup

[supervisor]
include => control_llamadas

exten => 110,1,Answer
same => n,Set(SPYGROUP=Telecontacto)
same => n,Queue(Telecontacto)

[macro-colas]
exten => s,1,Answer
same => n,Set(SPYGROUP=${ARG1})
same => n,Queue(${ARG1})

sábado, 19 de abril de 2014

ARCHIVOS DE CONFIGURACIÓN Y APLICACIONES UTILIZADAS EN EL CALL CENTER


A diferencia de las redes telefónicas tradicionales, Asterisk no transmite la voz en tiempo real, lo que sucede es una transmisión de paquetes entre dos direcciones IP a través de un canal de comunicación. Cuando se habla a través de un teléfono IP, por ejemplo, es necesario un protocolo que convierta la voz en paquetes de datos que puedan ser transportadas por la red de datos.

Es por esto que se utiliza el protocolo de señalización SIP, el cual permite establecer sesiones multimedia entre cliente y servidor para transmitir voz o vídeo, intercambiando peticiones o respuestas entre agentes a través de un servidor proxy por ejemplo.

Configuración extensiones archivo sip.conf

En Asterisk, el archivo sip.conf es donde se definen las extensiones SIP, los proveedores SIP y, en general, todo lo relacionado con el protocolo SIP. Con las extensiones configuradas se podrán llamar una con otra, se podrán enrutar las llamadas a teléfonos fijos y/o celulares, utilizar proveedores SIP, Gateway PSTN, y aprovechar los típicos servicios de una PBX como llamada en espera, desvío de llamadas, llamada a tres, contestador automático, buzón de voz, etc.

[supervisor](!)

type=friend
context=supervisor
language=es
host=dynamic
nat=yes
secret=1a2b3c
dtmfmode=auto
disallow=all
allow=alaw

[4001](supervisor)

[agentes](!)

type=friend
context=agentes
language=es
host=dynamic
nat=yes
secret=a1b2c3
dtmfmode=auto
disallow=all
allow=alaw

[4002](agentes)
mailbox=4002@agentes
callerid= Dexter Morgan 

[4003](agentes)
mailbox=4003@agentes
callerid= Walter White 


Configuración Dial Plan archivo extensions.conf

El archivo de configuración de Asterisk extensions.conf es donde se define el dialplan de Asterisk. Todas las llamadas entrantes y salientes se procesan en este archivo. Cabe señalar que las extensiónes en Asterisk son una serie de números o letras que definen bloques en el dialplan dentro del cual se ejecutan aplicaciones o funciones como ya se había mencionado.

; Numero para simular una llamada desde el exterior

exten => 01800123,1,Goto(entrante,s,1)

[agentes]

exten => _40XX,1,Macro(llamadas,SIP/${EXTEN},agentes)

exten => 150,1,VoiceMailMain(${CALLERID(num)@agentes})

[supervisor]

include => agentes

[entrante]

exten => s,1,Answer()
same => n,Playback(welcome)
same => n,Background(main-menu)
same => n,WaitExten(5)

exten => i,1,Playback(pbx-invalid)
same => n,Goto(entrante,s,1)

exten => t,1,Playback(thank-you-for-calling)
same => n,Dial(SIP/4003)
same => n,Voicemail(4003@agentes)

#include macros.conf


macros.conf

[macro-llamadas]

exten => s,1,Dial(${ARG1},7)
same => n,Voicemail(${MACRO_EXTEN}@${ARG2})


Inclusión de archivos y contextos

Hacen referencia a la acción de incluir algo dentro de un contexto o apartado del Dial Plan, sin tener que reescribirlo todo para evitar la redundancia. Son muy parecidos a los Include de la mayoría de los lenguajes de programación existentes.
Existen dos opciones:

Incluir un contexto: Mecanismo principal para establecer una jerarquía, o un mecanismo de "herencia" para distintos contextos a los que están asociados varios dispositivos.

Incluir un archivo: Sirven principalmente, para poder "modularizar" el Dial Plan evitando miles de líneas que hacen difícil la interpretación.
La sintaxis es, "#include archivo.conf".

Por ejemplo, al hacer un IVR se creara un contexto dentro de un archivo llamando por ejemplo ivr-extensions.conf y dentro de este exclusivamente el contexto [ivr] con todo el proceso que deseemos aportar. Es una buena práctica trabajar siguiendo este concepto.


Aplicaciones

Acciones aplicables al manejo de las llamadas dentro del Dial Plan. Por ejemplo, la más popular sería la aplicación Dial, la cual simplemente tiene como propósito hacer que los teléfonos  se llamen entre ellos. Existen otras aplicaciones comunes, como:

Dial
Voicemail
Answer
Playback
Backgraund
WaitExten
Goto
Macro

Background() y Playback(), reproducen archivos de audio, ubicados en /var/lib/asterisk/sounds/es, la diferencia radica en que al momento de presionar una tecla, Background() hace que se interrumpa la grabación inmediatamente se presione una tecla del teléfono.

WaitExten() Esta aplicación espera un tiempo para que sea oprimida una tecla por y es usada directamente con la aplicación Background().

Cuando un contexto recibe una solicitud de una extensión no valida, la llamada es enviada a la extensión i. 

Cuando al estar llamando no se oprime la tecla dentro del tiempo valido (10 segundos por defecto) la llamada será enviada a la extensión t.

Cuando en el DialPlan algunas acciones son repetitivas, los Macros permiten simplificar este tipo de operaciones.

Macro(nombre macro, argumento1,argumento2,argumentoN)

ArgumentoN es un valor o una variable que se pasa a la macro al momento de llamarla desde el plan de marcado.
La aplicación macro crea las siguientes variables de canal:
• ${MACRO_EXTEN} contendrá el numero marcado
• ${MACRO_CONTEXT} contendrá el contexto de donde se ha llamado la Macro
• ${MACRO_PRIORITY} contendrá la prioridad de la línea de donde se ha llamado la Macro
• ${ARG1}, ${ARG2}, ${ARGN) son las variables que contienen los argumentos que se han enviado a la Macro.

                                       Configuración Buzón de Voz archivo voicemail.conf


En el archivo voicemail.conf es donde se configura todo lo relacionado con el buzón de voz. Si se recibe una llamada y no se contesta o la línea está ocupada, entrará en función el buzón de voz, y se podrá grabar un mensaje. Es posible crear distintos grupos de buzones de voz, en el caso del proyecto se creara uno para los agentes.

En el archivo sip.conf, Se configura el parámetro mailbox, cuando las extensiones se conecten al servidor Asterisk, éste controlará si hay mensajes de voz pendientes y en caso positivo se lo comunicará usando MWI = Message Waiting Indicator,  que puede ser recibida por la mayoría de los teléfonos IP o Softphone.


La opción callerid es el nombre y el número que identifica la extensión cuando llama.

[agentes]

; Numero extensión => contraseña, nombre apellido,

4002=> 4321, Dexter Morgan

4003=> 4321, Walter White 

sábado, 12 de abril de 2014

IMPLEMENTACION DE UN CALL CENTER CON ASTERISK

Call Center Video_1

El siguiente es el  primero de una serie de vídeos donde se implementara una central telefónica IP con el software de código abierto Asterisk, esta central telefónica manejara dos troncales 1 analógica y 1 digital las cuales permitirán la entrada y salida de llamadas a través de la red telefónica pública (PSTN), ademas se contratara una cuenta para llamadas internacionales a través de una conexión a Internet por medio de un proveedor SIP. Se configuraran contextos para el manejo de llamadas internas, entrantes y salientes para poder brindar capacidades de call center. Entre las capacidades para el Call Center se encuentran la administración de colas y agentes, el desarrollo de un IVR que se integre con las bases de datos MySQL y de Asterisk, ademas de contar con capacidades de transformación de texto a voz mediante el uso de TTS.

La Configuración realizada en el Servidor Asterisk, busca lo siguiente.

1. Comunicar todas las extensiones internas (dispositivos SIP) entre sí y brindarles servicios básicos

2. Recibir y enrutar llamadas entrantes desde las troncales analógicas y digitales, mediante el uso de una contestadora automática.

3. Permitir la salida de llamadas externas a través de las troncales adecuadas dependiendo del tipo de llamada (local, nacional o celular).

4. Autorizar y denegar la salida de llamadas de acuerdo a los permisos de cada usuario.














lunes, 10 de diciembre de 2012


USO DE VARIABLES

exten => 301,1,Set(LEIF=SIP/1000)
same => n,Dial(${LEIF})

Si se va a referenciar el nombre de la variable, en este caso será LEIF
Si se va a referenciar el contenido del valor, en este caso será ${LEIF}

Asterisk maneja 3 tipos de variables:

-Variables Globales: Pueden ser declaradas dentro del contexto [globals] al principio del archivo extensions.conf
[globals]
LEIF=SIP/1000

-variables de canal: Variable asociada con una llamada en particular, definida solamente mientras dura la llamada. Son configuradas con la aplicación set()

exten => 202,1,Set(MagicNumber=42)
same => n,SayNumber(${MagicNumber})

-Variables de ambiente: se utilizan para leer la variables del sistema (Linux). Para crearlas se utiliza la aplicación set() y la función del dialplan env(). No son muy utilizadas en el dialplan de Asterisk


Agregando variables al dialplan
[globals]
LEIF=SIP/1000
JIM=SIP/1001
RUSSELL=SIP/1002

[LocalSets]
exten => 1000,1,Dial(${LEIF})
exten => leif,1,Dial(${LEIF})

exten => 1001,1,Dial(${JIM})
exten => jim,1,Dial(${JIM})

exten => 1002,1,Dial(${RUSSELL})
exten => russell,1,Dial(${RUSSELL})

exten => 201,1,Goto(TestMenu,start,1)

[TestMenu]
exten => start,1,Answer()
same => n,Background(enter-ext-of-person)
same => n,WaitExten()

exten => 1,1,Dial(SIP/1000,10)
same => n,Playback(vm-nobodyavail)
same => n,Hangup()

exten => 2,1,Dial(SIP/1001,10)
same => n,Playback(vm-nobodyavail)
same => n,Hangup()

exten => i,1,Playback(pbx-invalid)
same => n,Goto(incoming,123,1)

exten => t,1,Playback(vm-goodbye)
same => n,Hangup()

En el siguiente vídeo se muestra la configuracion: Variables DialPlan


CONFIGURACION DE EXTENSIONES EN ASTERISK

En esta parte se configurarán los archivos sip.conf y extensions.conf ubicados en el directorio /etc/asterisk

RELACION ENTRE LOS CANALES DE CONFIGURACION Y EL DIALPLAN

En la grafica se muestra como se relaciona el archivo de configuración sip.conf con el archivo extensions.conf

El archivo de configuración de Asterisk extensions.conf es donde se define el dialplan de la centralita. Todas las llamadas entrantes y salientes se procesan en este archivo. En el lenguaje común, la extensión es el número de teléfono interno de una oficina o de un determinado servicio con el que se quiere comunicar. En el caso de Asterisk, la extensión es una serie de números o letras que define un bloque del dialplan dentro del cual se ejecutan aplicaciones o funciones de la PBX.

En Asterisk, el archivo sip.conf es donde se definen las extensiones SIP, los proveedores SIP y, en general, todo lo relacionado con el protocolo SIP. Con las extensiones configuradas se podrán llamar una con otra, se podrán enrutar las llamadas a teléfonos fijos y/o celulares, utilizar proveedores SIP, Gateway PSTN, y aprovechar los típicos servicios de una PBX como llamada en espera, desvío de llamadas, llamada a tres, contestador automático, buzón de voz, etc.


ARCHIVO SIP.CONF
Se crea el archivo sip.conf y se copia en él lo siguiente, así:

nano /etc/asterisk/sip.conf
[general]
context=unauthenticated
allowguest=no
srvlookup=yes
udpbindaddr=0.0.0.0
tcpenable=no

[office-phone](!)
type=friend
context=LocalSets
host=dynamic
nat=yes
secret=1234
dtmfmode=auto
disallow=all
allow=alaw

[1000](office-phone)
[1001](office-phone)

[general] etiqueta que introduce la parte general de la configuración
allowguest No = no se permiten llamadas entrantes (INVITE) de usuarios no autenticados (aumenta la seguridad de Asterisk). Yes = se permiten llamadas entrantes (INVITE de usuarios no autenticados
context default = el contexto donde llegarán las llamadas no autenticadas si allowguest=yes
srvlookup Permite hacer búsquedas de registros DNS SRV (RFC 2782) basadas en los nombres de dominio para llamadas SIP salientes del tipo: SIP/usuario@dominio. La búsqueda se hará solamente para el primer registro presente en el dominio. Valor: Yes
udpbindaddr Es la dirección IP y el puerto donde Asterisk se pondrá a la escucha para las señalización SIP utilizando el protocolo de transporte UDP. Si se indica 0.0.0.0 Asterisk escuchará en todas la direcciones IP presentes en el servidor Linux. Valor: 0.0.0.0:5060
tcpenable Permite la señalización SIP sobre el protocolo de transporte TCP Valor yes

[office-phone](!)
[office-phone] es la descripción del template (en este ejemplo se utilizará para configurar todas las extensiones que tienen acceso solo a llamadas locales). (!) es las sintaxis que indica que se trata de un template.
type friend=es un user y peer al mismo tiempo
• user: una extensión que se autentica al servidor Asterisk usando el campo From para hacer llamadas.
• peer: una extensión que se autentica para las llamadas entrantes utilizando la dirección IP y el puerto
context El contexto a que tendrá acceso la extensión. Valor LocalSets como se ha creado en el dialplan
host Si la extensión se conecta remotamente con un IP dinámico se pone dynamic. En caso contrario se pone la dirección IP del servidor Asterisk
nat se asume que los dispositivos están detrás de un NAT
secret La contraseña para la extensión. Personalizar Valor predefinido: 1234
dtmfmode Protocolo para los tonos DTMF
disallow all=se deshabilita todos los codec (audio/video)
allow alaw=se habilita el codec audio alaw

Para configurar una nueva extensión se puede utilizar el template de la siguiente forma:

[1000](office-phone)
[1001](office-phone)


CARGANDO LA CONFIGURACION DEL ARCHIVO SIP.CONF
Asterisk CLI

Desde la consola de asterisk se cargan los archivos de configuración de los canales

#asterisk -r
*CLI> module reload chan_sip.so

Verificar que los nuevos canales han sido cargados:
*CLI> sip show peers
*CLI> sip show users


UN DIAL PLAN BASICO PARA VERIFICAR LA CONFIGURACION DE LOS DISPOSITIVOS

Se copia lo siguiente en el archivo /etc/asterisk/extensions.conf

[LocalSets]
exten => 1000,1,Dial(SIP/1000)
exten => 1001,1,Dial(SIP/1001)

exten => 123,1,Answer()
same => n,Playback(hello-world)
same => n,Hangup()

Se recarga el dialplan después de configurar el archivo extensions.conf:

#asterisk -rx "dialplan reload”

O desde la consola de asterisk:

*CLI> dialplan reload

[LocalSets]
Se define el contexto LocalSets
exten => 1000,1,Dial(SIP/1000)
El comando exten => es para definir una extensión, 1000 es la extensión, 1 es la prioridad y Dial es la aplicación que se utiliza para iniciar una llamada usando el protocolo SIP.

exten => 123,1,Answer
Answer es la aplicación que se utilizará. En este caso Answer contesta la llamada
exten => 123,2,Playback(hello-world)
En este caso la aplicación es Playback cuya función es enviar el audio de una locución al canal que está llamando.

Para ver la configuración en detalle, ver el siguiente vídeo en youtube: Configuración extensiones en Asterisk







domingo, 9 de diciembre de 2012



DIALPLAN BASICO

SINTAXIS DEL DIALPLAN: un dialplan esta formado por 4 conceptos principales:

1. Contexto: Se define dándole el nombre del contexto dentro de corchetes [ ].

Hay dos contextos especiales [general] y [globals].

Al definir un canal (por ejemplo un archivo sip.conf, iax.conf, chan_dahdi.conf) uno de los parámetros requeridos en cada definición del canal es el contexto.

El contexto es el punto del dialplan donde las conexiones desde cada canal se inicia.

2. Extensions: Serie de pasos que contienen una aplicación a través de las cuales Asterisk tomara la llamada.

La sintaxis para una extensión es la palabra exten: (exten=>). Cada paso en una extensión esta compuesto por 3 opciones:

exten=> nombre, prioridad, aplicación()

3.Prioridades:
exten => 123,1,Answer()
exten => 123,2,do something
exten => 123,3,do something else
exten => 123,4,do one last thing
exten => 123,5,Hangup()

exten => 123,1,Answer()
same => n,do something
same => n,do something else
same => n,do one last thing
same => n,Hangup()

4.Aplicaciones:

Answer(): Traducción directa de "Responder". La función de esta aplicación básicamente es la de descolgar la llamada entrante

Playback(): Sirve para reproducir una pista de audio contenida en un archivo dentro del directorio especifico de pistas en español (var/lib/asterisk/sounds/es/)

Hangup(): Simplemente, cuelga la llamada. No es necesario pasarle ningún parámetro especifico.


DIALPLAN INTERACTIVO

-Goto() Envía una llamada a otra parte del diaplan

same => n,Goto(context,extension,priority)

- Background() Al igual que la aplicación Playback(), esta reproduce un archivo de audio grabado, sin embargo, al momento de presionar una tecla se interrumpe la grabación pasando la llamada a la extensión que corresponde con el numero que se presiono.

-WaitExten() Esta aplicación espera que el que esta llamando ingrese dígitos mediante DTMF y es usada directamente con la aplicación Background()



MANEJO DE ENTRADAS NO VÁLIDAS Y TIEMPOS DE ESPERA

En Asterisk cuando un contexto recibe una solicitud de una extensión no valida, la llamada es enviada a la extensión i.

Cuando al estar llamando no se oprime la tecla dentro del tiempo valido (10 segundos por defecto) la llamada será enviada a la extensión t

Ejemplo: exten => 201,1,Goto(TestMenu,start,1)


[TestMenu]
exten => start,1,Answer()
same => n,Background(main-menu)
same => n,WaitExten(5)

exten => 1,1,Playback(digits/1)
same => n,Goto(TestMenu,start,1)

exten => 2,1,Playback(digits/2)
same => n,Goto(TestMenu,start,1)

exten => i,1,Playback(pbx-invalid)
same => n,Goto(TestMenu,start,1)

exten => t,1,Playback(vm-goodbye)
same => n,Hangup()

Para ver la configuración en vídeo, ir al siguiente enlace: Aplicación Goto()