You are on page 1of 6

IVR

IVR es la sigla de Interactive Voice Response, que se traduce del ingls como Respuesta de Voz Interactiva. Consiste en
un central telefnica (en este caso Asterisk) que es capaz de recibir una llamada e interactuar con el usuario a travs de
grabaciones de voz y el reconocimiento de respuestas a travs del uso de las teclas del telfono. Algunos ejemplos: el
men que se escucha cuando se llama a un centro de atencin al cliente; los bancos que permiten hacer consultas o
pagos a travs de un men vocal

En Asterisk con la aplicacin Record se pueden grabar archivos de audio para luego utilizarlos en la creacin de un IVR.
Para implementarla hay que modificar el dialplan.

nano /etc/asterisk/extensions.conf
En el contexto LocalSets se pone el siguiente bloque:
exten => _66XX,1,Answer()
same => n,Wait(2)
same => n,Record(/tmp/prompt${EXTEN:2}:wav)
same => n,Wait(2)
same => n,Playback(/tmp/prompt${EXTEN:2})
same => n,Wait(2)
same => n,Hangup()

Lnea 1: contesta la llamada
Lnea 2: espera 2 segundos
Lnea 3: Graba el archivo audio en la carpeta /tmp con nombre promptXX donde XX son los ltimos dos dgitos de la
extensin que se ha marcado desde el Softphone. Ejemplo: Si se llama la extensin 6650 el archivo de audio tendr el
nombre prompt50.waw
Lnea 4: espera 2 segundos
Lnea 5: devuelve el archivo recin grabado
Lnea 6: espera 2 segundos
Lnea 7: cuelga la llamada
Si la grabacin no es satisfactoria, se vuelve a grabar marcando el mismo numero. La nueva
grabacin remplazar la vieja.

Esta solucin permite grabar hasta 99 archivos de audio. Para el ejemplo a seguir hay que
grabar tres archivos de audio que contienen las siguientes frases:

prompt01.wav - for english press one, para espaol marque dos
prompt02.wav - para efectuar un test de echo marque 1, para escuchar la msica en espera
marque 2, para la oficina de ventas marque 3
prompt03.wav - for echo test press 1, for music on hold press 2, for sales office, press 3

Desde la extensin 1000 se marca 6601 y se graba la primera frase; luego 6602 y se graba la
segunda; se termina con 6603 y se graba la tercera. (para terminar la grabacin hay que
presionar la tecla numero #) Una vez terminadas las grabaciones se crea un nueva carpeta:

mkdir /var/lib/asterisk/sounds/custom

y se mueven los tres archivos (prompt01.wav prompt02.wav y prompt03.wav) a la carpeta
creada

cd /tmp
mv prompt* /var/lib/asterisk/sounds/custom
Creacin del IVR

Con las locuciones grabadas , ya se puede configurar el IVR. Para hacerlo se crea un nuevo archivo
que luego se incluir en el dialplan.

nano /etc/asterisk/IVR

se copian los tres bloques que siguen:

[IVR]
exten => s,1,Wait(1)
exten => s,2,Set(CHANNEL(language)=es)
exten => s,3,Set(TIMEOUT(digit)=7)
exten => s,4,Set(TIMEOUT(response)=10)
exten => s,5,BackGround(custom/prompt01)
exten => s,6,WaitExten()
exten => 1,1,goto(IVR1,s,1)
exten => 2,1,goto(IVR2,s,1)
exten => i,1,Playback(invalid)
exten => i,2,Goto(IVR,s,2)
exten => i,3,Hangup
exten => t,1,goto(IVR,s,2)
exten => h,1,Hangup
[IVR1]
exten => s,1,Set(TIMEOUT(digit)=7)
exten => s,2,Set(TIMEOUT(response)=10)
exten => s,3,Set(CHANNEL(language)=en)
exten => s,4,BackGround(custom/prompt03)
exten => s,5,WaitExten()
exten => 1,1,Playback(demo-echotest)
exten => 1,2,Echo()
exten => 2,1,MusicOnHold
exten => 3,1,Playback(pls-wait-connect-call)
exten => 3,2,Goto(LocalSets,100,1)
exten => i,1,Playback(invalid)
exten => i,2,Goto(IVR1,s,1)
exten => i,3,hangup
exten => t,1,goto(IVR1,s,1)
exten => h,1,Hangup

[IVR2]
exten => s,1,Set(TIMEOUT(digit)=7)
exten => s,2,Set(TIMEOUT(response)=10)
exten => s,3,Set(CHANNEL(language)=es)
exten => s,4,BackGround(custom/prompt02)
exten => s,5,WaitExten()
exten => 1,1,Playback(demo-echotest)
exten => 1,2,Echo()
exten => 2,1,MusicOnHold
exten => 3,1,Playback(pls-wait-connect-call)
exten => 3,2,Goto(LocalSets,100,1)
exten => i,1,Playback(invalid)
exten => i,2,Goto(IVR2,s,1)
exten => i,3,hangup
exten => t,1,goto(IVR2,s,1)
exten => h,1,Hangup

IVR:

Wait(1) Espera un segundo
Set(CHANNEL(language)=es) Se pone como idioma predefinido para las locuciones el espaol
Set(TIMEOUT(digit)=7) numero de segundos mximo (7) entre el primer dgito y los siguientes
Set(TIMEOUT(response)=10) numero de segundos que el sistema esperar para que el llamante
presione una tecla del telfono.
BackGround(custom/prompt01) presenta la locucin prompt01 y al mismo tiempo se pone a la
escucha de los dgitos que pueda presionar el llamante.
WaitExten() - Espera que el llamante presione una tecla
1,1,goto(IVR1,s,1) si el llamante presiona 1 va (goto) al contexto IVR1, extensin s, prioridad 1
2,1,goto(IVR2,s,1) si el llamante presiona 2, va (goto) al contexto IVR2, extensin s, prioridad 1
i,1,Playback(invalid) si la tecla presionada no es valida (ni 1 ni 2) comunica el error
i,2,Goto(IVR,s,2) y devuelve el llamante al contexto IVR, extensin s, prioridad 2 (presenta
nuevamente el men inicial)
t,1,goto(IVR,s,2) si dentro de 10 segundos (TIMEOUT(response)), el llamante no presiona ninguna
tecla, vuelve a presentar el men inicial
h,1,Hangup si el llamante cuelga, se ejecuta la extensin h

La extensin i se utiliza para capturar dentro del dialplan, dgitos errados.
La extensin t se utiliza cuando la funcin TIMEOUT est presente en el dialplan
La extensin h se utiliza para aadir nuevas lneas de dialplan cuando se cuelga la llamada
si se digita el numero tres, la llamada se enviar al contexto LocalSets, extensin 100,
prioridad 1. Como esa extensin todava no existe, hay que crearla:

nano /etc/asterisk/extensions.conf

en el contexto LocalSets se aade el siguiente bloque:

exten => 100,1,Noop
same => n,Dial(SIP/1000&SIP/1001&SIP/1002,30)
same => n,Hangup

Lo que se har es marcar a las extensiones 1000, 1001 y 1002 simultneamente hasta que
una de las tres conteste la llamada. Este tipo de configuracin se llama Ring Group.

Para probar el IVR en local se aaden estas lneas en el contexto LocalSets:

exten => 75,1,Answer
same => n,Wait(1)
same => n,Goto(IVR,s,1)

y para incluir el archivo IVR al dialplan, al final del archivo se aade esta lnea

#include IVR

You might also like