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