viernes, 22 de agosto de 2014

TRONCAL E1 PRI ENTRE ASTERISK Y CISCO CME


El adaptador E1 de voz consiste en una Línea Digital que permite tener acceso telefónico de 30 canales de voz con un ancho de banda de 64 Kbps cada uno, también cuenta con dos canales para señalización, esto es, indica en qué estado está la llamada, si está colgada, descolgada, como se marcan los números, el tono de ocupado etc. Los 30 canales de acceso del E1 son compartidos por todos los números telefónicos asignados al mismo, por lo que todas las llamadas entrantes o salientes de cualquiera de las extensiones asignadas podrán ser atendidas directamente mientras exista un canal disponible.


La configuración se hará con una tarjeta TE220 Digium, recordar que Digium es una empresa especializada en la creación de equipos de telefonía enfocados en Asterisk.

Los aspectos técnicos mas importantes a considerar para la selección de una tarjeta E1 son (http://elastixtech.com/configurar-adaptador-e1-en-elastix/)

1.- El tipo de interfaz PCI o PCI Express, dependerá del modelo de la computadora a utilizar como servidor

2.- Que incorpore hardware para cancelación de eco, se recomienda que lo incluya.

3.- La cantidad de puertos E1 incluidos, comprar lo que se va a utilizar ya que esto complica la configuración.

4.- Soporte para los 3 estándares digitales T1/E1/J1 aunque solo se use uno, lo determina el proveedor

5.- Que soporte los estándares de decodificación de línea: HDB3, AMI, B8ZS, aunque solo se use uno.

6.- Tipos de Tramas (Framing): CRC-4, Non CRC4, ESF, SF, D4. lo determina el proveedor telefónico.

Los 3 primeros aspectos son los más importantes, se debe estar seguro que tipo de bus PCI tiene el servidor ya que al momento de instalar la tarjeta esta debe ser compatible con este tipo de interface.

Con relación al cancelador de eco por hardware, (recordar que el eco se produce por un fenómeno técnico que se da por un retorno de la señal que se escucha por el teléfono y se cuela de nuevo por el micrófono, es decir, que el eco es una reflexión retardada de la señal acústica original. El eco es especialmente molesto cuanto mayor es el retardo y su intensidad) es muy recomendable que la tarjeta E1 lo tenga de lo contrario se tendrá que hacer por software complicando la configuración además de sobrecargar en procesamiento del servidor, esto se vuelve critico cuando la densidad de puertos es superior a 60 canales (2 E1), degradando el rendimiento del sistema. Las tarjetas que no incorporan cancelador de eco por hardware son más baratas.

En cuanto a la cantidad de puertos E1, no es que sea mala idea comprar una con más puertos de los que se van a utilizar porque es probable que un futuro se utilice, el problema se presenta al momento de configurarla ya que en algunas ocasiones en especial con la marca Sangoma esta se complica ya que se tienen que configurar los puertos aunque no se utilice.

En el Sistema T1 se multiplexan 24 señales de Voz/Datos, estas señales analógicas de entrada se muestrean a 8000 muestras por segundo formando una trama de 192 dígitos a los cuales se les agrega un dígito adicional para sincronización de trama. La trama contiene entonces 193 dígitos y la velocidad de señalización es de 1544 kbps.

El sistema E1 está formado por 32 canales, con 8 dígitos por canal para un total de 256 dígitos por trama. Como la frecuencia de muestreo es de 8000 muestras por segundo, la velocidad de la trama E1 es de 2048 kbps.

En el proceso de digitalización de una señal analógica, primero se muestrea, luego se cuantiza y por último se codifica la señal analógica, para así poder transportar los valores digitales a través de la red, para esto se pueden utilizar diferentes formas de codificación, bipolar, bipolar con inversión de marca alternada (AMI), Bipolar con sustitución de ocho ceros (B8ZS), bipolar de alta densidad de 3 ceros (HDB3), es por esto que el esquema de codificación basado en Norteamérica se llama B8ZS y el utilizado en Europa, Colombia y Japón es el HDB3, ambos se basan en la codificación AMI.

Los protocolos de señalización se utilizan para transmitir información de estado del canal de comunicaciones (como “desconectado”, “timbrando”, “ocupado”), información de control y otra información como DTMF, caller ID, entre otros. Los protocolos de señalización se pueden agrupar en dos tipos llamados CAS (Channel Associated Sgnaling) y CCS (Common Channel Signaling). La diferencia es que mientras CAS transmite la señalización en el mismo canal en que viaja la información, CCS la transmite en un canal separado. Por este hecho es que con CAS se reduce ligeramente el ancho de banda disponible o útil para la comunicación ya que una parte de él se está usando para señalización. Esa es una de las razones por las cuales las compañías telefónicas han adoptado en su mayoría CCS.


Tomar en cuenta el color de los puertos:

Si la tarjeta E1 es detectada pero aún no tiene el enlace del proveedor telefónico conectado, los puertos aparecen en color rojo.

Si la tarjeta E1 es detectada y ya tiene el enlace del proveedor telefónico conectado, los puertos aparecen en color verde.

Si la tarjeta E1 es detectada y ya tiene el enlace del proveedor telefónico conectado, pero los puertos aun aparecen en color rojo, esto significa que los puertos aun no están  sincronizados con el enlace del proveedor.

Ahora viene la parte más importante que determinara como van a funcionar los puertos, para esto es necesario que el proveedor del enlace telefónico E1, nos provea la siguiente información básica:

MASTER: Lo genera el cliente (La tarjeta E1 de nuestro servidor Asterisk), valor 0
SLAVE: Lo genera el proveedor, valor 1

[numero de espan]: Numero del Puerto E1 si es el primero 1 si es el segundo 2, se debe configurar todo esto para cada puerto.

BCHAN: Determinan los canales disponibles de voz o datos del E1, no se deben usar los canales 0 y 16. 

Un ejemplo de esta línea es la siguiente: bchan=1-15,17-31

DCHAN: Indica los canales utilizados para la señalización o sincronismo

ECHOCANCELLER: Se utiliza solamente si la tarjeta E1 no tiene cancelador de eco por hardware, aunque no afecta en nada si se coloca este parámetro aun teniéndolo. Se recomienda que se utilice OSLEC, se deben especificar sobre los canales en que va a funcionar.

Esta configuración se debe realizar por cada puerto de la tarjeta E1, si la tarjeta tiene 2 puertos E1 se deben crear 2 SPAN uno por cada puerto, el SPAN es una agrupación de 30+1 canales (30 para la voz y 1 para control). Como E1 está compuesto por 32 canales, sin embargo el proveedor de telefonía Telco hace uso de solo un canal para señalización o control, el otro no se utiliza para este propósito.

El número de los canales utilizados van numerados secuencialmente en orden ascendente, por ejemplo en una tarjeta con 2 puertos E1 los canales están distribuidos de la siguiente manera:

PUERTO 1 (SPAN 1):
Canales de voz 1-15 y 17-31
Canal de sincronismo o control 16
PUERTO 2 (SPAN 2): Canales de voz 32-46 y 48-62
Canal de sincronismo o control 47

El canal de sincronismo o control, también llamado de señalización es utilizado exclusivamente para sincronizar la separación de las señales digitales durante la transmisión de la voz, de esta manera se logra enviar 30 canales de voz equivalentes a 30 líneas telefónicas en solo 4 hilos (TX – RX).

De esta manera se ha configurado el adaptador E1 para la comunicación con el proveedor de Telefonía, pero aún falta configurar los canales para que sean reconocidos como troncales por el servidor Asterisk
El otro archivo a editar es /etc/asterisk/dahdi-channels.conf,  aquí se crearan agrupaciones de canales que servirán de troncales digitales para la entrada y salidas de llamadas.

Se pueden configurar tantos grupos como canales se tengan, para el caso un puerto E1 tiene 30 canales efectivos para la voz, en teoría se pueden crear 30 grupos o troncales, uno por canal, sin embargo esto no es nada practico debido a que el proveedor de telefonía envía las llamadas por cualquier canal, por esta razón lo que se hace es crear un solo grupo de canales por cada puerto E1, de esta manera se podrán utilizar cualquiera de los 30 canales disponibles para las llamadas entrantes y salientes hacia un mismo proveedor.

Para el caso de tarjetas con 2 o más puertos se recomienda crear un grupo o troncal de canales por cada uno de los puertos, en especial si hay más de un proveedor de telefonía, de esta manera se crean 2 o más grupos de troncales uno por cada proveedor.

switchtype = euroisdn : Tipo de protocolo, también puede ser national o qsig existen varias opciones
signalling = pri_cpe : Origen de la señal de reloj, pri_net para master y pri_cpe para esclavo
channel => 1-15,17-31 : Canales que formaran parte de este grupo

Una manera de comprobar que se están reconociendo los canales de los puertos E1 es:
CLI > dahdi show channels

Y para controlar que efectivamente la cancelación de echo configurada sea OSLEC
dahdi_cfg -vvv


CONFIGURACIÓN DEL ROUTER CISCO 2801 COMO PSTN



Ya se configuro el proveedor SIP, ahora se implementara la troncal digital por medio de los enlaces E1 con la PSTN, para simular la red PSTN se utilizara un router Cisco arquitectura 2801, con dos módulos de voz, uno con dos puertos FXS y otro con un puerto digital E1.

Los PVDM son los encargados de digitalizar las señales analógicas y hacer que los módulos de voz instalados en el router sirvan para este fin, por ejemplo, en el router se tienen instalados dos módulos que permiten trabajar con 16 canales de voz, como se tiene un módulo con dos puertos FXS, entonces, quedan 14 canales para utilizar en el enlace digital E1, si se quieren aumentar los canales digitales, es necesario adquirir módulos PVDM con más DSP.

El IOS es el software utilizado en la gran mayoría de routers y switches de Cisco y es necesario que el router tenga instalado el que servirá para la configuración de los módulos de voz, en resumen, no todos los routers cisco sirven como gateways de voz 


Antes de configurar los módulos FXS y el E1, será necesario tener un softphone para hacer y recibir las llamadas, como vimos en Asterisk que se utilizaban diferentes softphones, Cisco tiene uno llamado CIPC, la configuración básica de este softphone y los teléfonos IP físicos de cisco se hace siguiendo esta serie de pasos.

Conocer número máximo de teléfonos y directorios, dependiendo del router

Source IP Address Information, esta opción le dice a los teléfonos IP de cisco que van a utilizar esta dirección IP para registrarse y así el router darles todas las opciones de configuración que se verá más adelante, como hacían los sofphones con Asterisk.

Básicamente es la actualización de los archivos necesarios para que los teléfonos IP físicos funciones adecuadamente por medio del comando Source IP Address del router Cisco 


Para poder configurar los módulos de voz del router, es decir, configurar el plan de marcación,  es necesario entender el comportamiento de una llamada a través de la red, sea por medio de la red telefónica PSTN o por VoIP.

En este caso se configura el POTS Dial Peer, ya que es aquí donde se define todo lo relacionado con la red telefónica tradicional, aquí es donde se encontraran módulos de voz FXS, FXO y E1 según sea el caso, el truco es ver que en esta clase de módulos no se configura ninguna dirección IP como se verá más adelante


El cable que se va a utilizar para conectar la interfaz E1 de la red PSTN, (en este caso el router Cisco) con la interfaz E1 de Asterisk es un cable RJ48, similar a un RJ45 en cuanto al número de hilos (8 hilos) y al conector (8 pines), por lo que un cable de red UTP servirá para fabricar uno, tanto el RJ45 como el RJ48 se pueden encontrar cruzados y directos. La diferencia consiste básicamente en la configuración de los pines que lo forman. Mientras que el RJ45 (cable de red) utiliza los pines 1,2,3 y 6, el RJ48 utiliza los pines 1,2,4 y 5 (a veces incluso el 3 y el 6). Otra diferencia, aunque obvia puede dar lugar a grandes complicaciones como por ejemplo:

- ¿Qué ocurre si se conecta un cable RJ48 que viene de un proveedor en una tarjeta de red?
- La tarjeta de red se quema.
- ¿Qué ocurre si se conecta un cable RJ45 a una tarjeta con un puerto E1?
- No habrá red 

CONFIGURACIÓN TRONCAL SIP CISCO ASTERISK 

- Dial Peer envía llamadas a Asterisk

dial-peer voice 4000 voip
 destination-pattern 4...
 session protocol sipv2
 session target ipv4:172.16.1.5
 dtmf-relay rtp-nte
 codec g711ulaw

- Configuración router CME directorios y teléfonos con el protocolo SCCP

telephony-service
 max-ephones 30
 max-dn 100
 ip source-address 192.168.1.100 port 2000

- configurar directorios (dn1 y dn2)

ephone-dn 1  dual-line
 number 3305
 label Telecomunicaciones

 ephone-dn 2  dual-line
 number 3303
 label Redes

- configurar teléfonos 1 y 2 y asociarlos a los directorios 1 y 2 creados

ephone 1
 mac-address 0200.4C4F.4F50
 button  1:1

ephone 2
 mac-address 000C.2947.A416
 button  1:2

- habilitar el servicio VoIP y las llamadas entre teléfonos SIP

voice service voip
 allow-connections sip to sip
 sip
  registrar server expires max 1200 min 300

- Router CME como cliente SIP de Asterisk

sip-ua
 mwi-server ipv4:172.16.1.5 expires 86400 port 5060 transport tcp unsolicited
 registrar ipv4:172.16.1.5 expires 3600 secondary 

- Configuración router CME directorios y teléfonos con el protocolo SIP

voice register global
 mode cme
 source-address 192.168.1.100 port 5060
 max-dn 10 
 max-pool 5
 create profile

- configurar directorios (dn1 y dn2)

voice register dn 1
 number 3304
 
voice register dn 2
 number 3307

- configurar teléfonos 1 y 2 y asociarlos a los directorios 1 y 2 creados

voice register pool 1
 id mac DEAD.BEEF.0001 
 number 1 dn 1 
 dtmf-relay sip-notify 
 username sena password 1234 
 codec g711ulaw

voice register pool 2
 id mac DEAD.BEEF.0001 
 number 2 dn 2 
 dtmf-relay sip-notify 
 username cisco password 1234 
 codec g711ulaw

CONFIGURACIÓN TRONCAL PRI E1 CISCO ASTERISK

card type e1 0 2

network-clock-participate wic 2
isdn switch-type primary-qsig

controller E1 0/2/0
framing crc4
linecode hdb3
pri-group timeslots 1-14

clock source internal

interface Serial 0/2/0:15
isdn switch-type primary-qsig
isdn incoming-voice voice

dial-peer voice 4001 pots
destination-pattern 4...
no digit-strip
direct-inward-dial
port 0/2/0:15


ARCHIVOS DE CONFIGURACIÓN ASTERISK

sip.conf

[agentes](!)

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

[4002](agentes)

[4003](agentes)

[4004](agentes)

[3301](agentes)

[3302](agentes)

[3303](agentes)

[3304](agentes)

[3305](agentes)

[3306](agentes)


extensions.conf

[agentes]

;llamadas SIP Cisco_Asterisk
exten => _400X,1,Dial(SIP/${EXTEN},15)
same => n,Hangup

exten => _330X,1,Dial(DAHDI/R0/${EXTEN})
same => n,Hangup

exten => _400X,1,Dial(DAHDI/R0/${EXTEN})
same => n,Hangup

;llamadas SIP Asterisk_Cisco
exten => _330X,1,Dial(SIP/${EXTEN},192.168.1.100)
same => n,Hangup

[from-pstn]

exten => _330X,1,Dial(DAHDI/R0/${EXTEN})
same => n,Hangup

exten => _400X,1,Dial(DAHDI/R0/${EXTEN})
same => n,Hangup

dahdi-channels.conf

[trunkgroups]

[channels]

language=en
usecallerid=no
hidecallerid=no
callwaiting=yes
usecallingpres=yes
callwaitingcallerid=yes
threewaycalling=yes
transfer=yes
cancallforward=yes
callreturn=yes
echocancel=yes
echocancelwhenbridged=no
echotraining=800
rxgain=0.0
txgain=0.0
group=0
callgroup=1
pickupgroup=1
prilocaldialplan=unknown

; Span 1: TE2/0/1 "T2XXP (PCI) Card 0 Span 1" (MASTER) HDB3/ RED

group = 0
context = from-pstn
switchtype = qsig
signalling = pri_net
channel => 1-14
overlapdial=yes

system.conf

span = 1,1,0,ccs,hdb3,crc4
bchan=1-14
dchan=16
echocanceller=oslec,1-14
loadzone = us
defaultzone = us

chan_dahdi.conf

#include /etc/asterisk/dahdi-channels.conf





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})