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