En este ejemplo se realiza una configuración de centralita, en la cual se realizan varias comprobaciones mediante una Macro llamada «horarios».
La llamada entra, se verifica que no sea un día definido como festivo y que estemos dentro del horario de atención, si esta fuera del horario o nadie coge, da la posibilidad de dejar un voicemail. Si esta dentro del horario, comprueba si el numero esta en blacklist («http://jblazquez.es/configurar-blacklist-en-asterisk-por-agi«) y pasa la llamada a un grupo de salto, con 15 segundos de llamada a cada peer, si nadie atiende, vuelve a dar la posibilidad de dejar un voicemail.
Lo primero debemos tener configurados nuestros peers en el archivo sip.conf, dejo un peer de ejemplo:
[67] type=friend host=dynamic context=directorio callerid=Jesus Blazquez username=jblazquez secret= nat=force_rport,comedia registersip=yes disallow=all allow=ulaw allow=alaw callgroup=6 pickupgroup=6 qualify=yes dtmf=auto
Tras esto realizamos la configuración del dialplan en el archivo extensions.conf:
exten => 900000000,1,Set(llamante=${CALLERID(num)})
same => 2,ANSWER(3)
same => 3,agi(/usr/share/asterisk/agi-bin/bloqueo_in.sh,${CALLERID(num)}) ; AGI para revision de blaclist
same => 4,Gotoif($["${answer}"="0"]?corte) ;AGI para revision de blaclist
same => 5,Playback(/var/lib/asterisk/sounds/LOCBIENVENIDA)
same => 6,GOTO(horarios,s,1) ; Mandamos a la macro a comprobar si es festivo y si el horario es el correcto
same => 7,Set(CALLERID(num)=0${llamante})
same => n,MixMonitor(60/${UNIQUEID}.wav,ab) ; se graba la llamada
same => n,Dial(SIP/60,15,r) ; se pasa la llamada al peer 60 durante 15 segundos
same => n,MixMonitor(67/${UNIQUEID}.wav,ab) ; se graba la llamada
same => n,ExecIf($["${DIALSTATUS}"!="ANSWER"]?Dial(SIP/67,15)) ; se pasa la llamada al peer 67 durante 15 segundos
same => n,MixMonitor(41/${UNIQUEID}.wav,ab) ; se graba la llamada
same => n,ExecIf($["${DIALSTATUS}"!="ANSWER"]?Dial(SIP/41,15)) ; se pasa la llamada al peer 41 durante 15 segundos
same => n,ExecIf($["${DIALSTATUS}"!="ANSWER"]?Playback(/var/lib/asterisk/sounds/LINEASOCUPADAS)
same => n,VoiceMail(67) ; se ejecuta el voicemail, para que deje un mensaje si nadie atendio
same => n,StopMixMonitor() ; para las grabaciones
same => n(corte),Hangup()
Aqui detallo la macro «horarios» que se llama desde el Dialplan
[horarios]
exten => s,1,Set(DNIS=${CALLEDID(num)})
same => n,GotoIfTime(*,*,15,aug?festivo) ;compara los dias descritos como festivos en el año
same => n,GotoIfTime(*,*,12,oct?festivo)
same => n,GotoIfTime(*,*,01,nov?festivo)
same => n,GotoIfTime(*,*,09,nov?festivo)
same => n,GotoIfTime(*,*,06,Dec?festivo)
same => n,GotoIfTime(*,*,25,Dec?festivo)
same => n,GotoIfTime(9:00-16:15|mon-fri|1-31|jan-dec?to-pbx,917875950,7); si no es festivo compara horario
same => n,Wait(2); si esta fuera de horario y o es festivo, da audio fuera de horario y pasa a voicemail
same => n(festivo),Playback(/var/lib/asterisk/sounds/FUERAHORARIO-VERANO)
same => n,VoiceMail(67)
same => n,Wait(2)
same => n,Hangup()
En el caso de que no se cumpla las condiciones de la Macro, la llamada vuelve al punto 7 del dialplan y continua su curso normal.
En un próximo articulo, se explicara como gestionar el voicemail.
Saludos
Jesus