Si alguna vez has soñado con que tus clientes naveguen por un laberinto de opciones telefónicas, pulsando números hasta perder la paciencia (o la fe en la humanidad), este artículo es para ti. Hoy aprenderás, con humor y sin perder la cordura, a usar la mítica aplicación Read de Asterisk para construir un IVR multinivel digno de una operadora de los 90, pero con la potencia de la VoIP moderna.
Read es la aplicación de Asterisk que te permite leer dígitos introducidos por el usuario y almacenarlos en una variable. Es el equivalente digital a pedirle a tu abuelita que marque el 1 para hablar con el nieto favorito, el 2 para el que nunca llama, y el 3 para el que sólo pide dinero.
Imagina que tienes varios departamentos y quieres que la gente pueda marcarlos directamente o navegar por menús. Además, tienes varios contextos porque te gusta complicarte la vida (y porque tienes varias sucursales).
extensions.conf
[entrada_principal] exten => s,1,Answer() same => n,Playback(bienvenido-a-todolio) same => n,Playback(si-sabe-la-extension-marquela) same => n,Read(EXT,por-favor-marque-la-extension,4,,3,5) same => n,GotoIf($["${EXT}" = ""]?menu_principal,s,1) same => n,Goto(dial_extensiones,${EXT},1) [menu_principal] exten => s,1,Playback(menu-principal) same => n,Playback(pulse-1-ventas) same => n,Playback(pulse-2-soporte) same => n,Playback(pulse-3-contabilidad) same => n,Read(OPCION,por-favor-ingrese-opcion,1,,3,5) same => n,GotoIf($["${OPCION}" = "1"]?ventas,s,1) same => n,GotoIf($["${OPCION}" = "2"]?soporte,s,1) same => n,GotoIf($["${OPCION}" = "3"]?contabilidad,s,1) same => n,Playback(opcion-invalida) same => n,Goto(menu_principal,s,1) [dial_extensiones] exten => _1XX,1,Dial(SIP/${EXT}@internos) same => n,Hangup() [ventas] exten => s,1,Playback(ha-contactado-ventas) same => n,Hangup() [soporte] exten => s,1,Playback(ha-contactado-soporte) same => n,Hangup() [contabilidad] exten => s,1,Playback(ha-contactado-contabilidad) same => n,Hangup() ; Contexto de otra sucursal [sucursal2_entrada] exten => s,1,Answer() same => n,Playback(bienvenido-sucursal2) same => n,Read(EXT2,marque-extension,4,,3,5) same => n,GotoIf($["${EXT2}" = ""]?menu_sucursal2,s,1) same => n,Goto(dial_extensiones_s2,${EXT2},1) [menu_sucursal2] exten => s,1,Playback(menu-sucursal2) same => n,Playback(pulse-1-rrhh) same => n,Playback(pulse-2-it) same => n,Read(OPCION2,ingrese-opcion,1,,3,5) same => n,GotoIf($["${OPCION2}" = "1"]?rrhh,s,1) same => n,GotoIf($["${OPCION2}" = "2"]?it,s,1) same => n,Playback(opcion-invalida) same => n,Goto(menu_sucursal2,s,1) [dial_extensiones_s2] exten => _2XX,1,Dial(SIP/${EXT2}@internos_s2) same => n,Hangup() [rrhh] exten => s,1,Playback(ha-contactado-rrhh) same => n,Hangup() [it] exten => s,1,Playback(ha-contactado-it) same => n,Hangup()
Goto
dinámico.[contexto1]
, [contexto2]
. ¡Ponle chispa a tu dialplan!Montar un IVR multinivel con Read en Asterisk es más fácil de lo que parece, y mucho más divertido si te lo tomas con humor. Recuerda: un buen IVR puede ser la diferencia entre un cliente feliz y uno que te maldice en tres idiomas. ¡Suerte, y que las extensiones estén siempre a tu favor!