Enviado por admin el
Puede ser que en algún momento de nuestro día laboral no queremos ser molestados por las llamadas telefónicas. Al mismo tiempo, pero, queremos que quienes nos llaman tengan las posibilidad de dejarnos un mensaje en nuestro contestador. Para hacer todo eso podemos crear una macro en Asterisk que haga ese “trabajo sucio” :)
Seguimos:
abrimos el archivo
nano /etc/asterisk/extensions.conf
y pegamos estas líneas
[macro-DND]
exten => s,1,GotoIf(${DB_EXISTS(DND/${CALLERID(num)})}?disable-dnd,1)
exten => s,n,Set(DB(DND/${CALLERID(num)})=1)
exten => s,n,playback(do-not-disturb)
exten => s,n,playback(activated)
exten => s,n,hangup
exten => disable-dnd,1,Set(DEL=${DB_DELETE(DND/${CALLERID(num)})})
exten => disable-dnd,n,playback(do-not-disturb)
exten => disable-dnd,n,playback(de-activated)
exten => disable-dnd,n,hangup
En la primera línea controlamos si en la base de datos de Asterisk existe un valor asociado a la familia DND y nuestro numero de extensión (CALLERID). Si no existe lo creamos con la línea 2 y le asignamos el valor 1. Luego usamos las voces de asterisk para anunciar que “No disturbar” ha sido activado.
En el caso que el registro ya existe en la base de datos, el Gotoif nos llevará a la extensión disable-dnd, prioridad 1 donde borraremos el registro y anunciaremos que el “No disturbar” ha sido desactivado.
En el mismo archivo dentro del contexto local insertamos dos líneas más
[local]
exten => 99,1,Macro(DND)
exten => 99,n,Hangup
La primare envía el llamante a la macro con nombre DND (la que acabamos de explicar más arriba). De esta forma podemos activar y desactivar el “No disturbar” llamando la extensión numero 99. Si el “No disturbar” está activado se desactivará de lo contrario se activará.
Ahora tenemos que decirle a Asterisk que para todas las llamadas entrantes haga este tipo de control.
Siempre en nuestro contexto local añadimos las siguientes líneas
[local]
exten => _2XXX,1,GotoIf(${DB_EXISTS(DND/${EXTEN})}?DND-ON)
exten => _2XXX,n,Dial(SIP/${EXTEN},20,t) ; DND is OFF, start dialing
exten => _2XXX,n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
exten => _2XXX,n(busy),Voicemail(${EXTEN}@default,b)
exten => _2XXX,n,hangup
exten => _2XXX,n(unavail),Voicemail(${EXTEN}@default,u)
exten => _2XXX,n,hangup
exten => _2XXX,n(DND-ON),Goto(2100,6)
exten => h,1,Hangup
Si el registro existe en la base de datos de asterisk (línea 1) la llamada será enviada a la extensión con etiqueta DND-ON, y de ahí a la extensión _2XXX prioridad 6. Esto significa que la llamada será transferida al contestador y al llamante será anunciado que la persona en la extensión XXXX no se encuentra disponible.
Si el registro no existe se procesará la línea dos y se llamará la extensión marcada. Luego según esté ocupada o en otra condición, la llamada se enviará a la correspondiente parte del plan de llamadas.
Actualizamos Asterisk
asterisk -vrrrrrrrrrrrr
CLI> dialplan reload
Más Información: DB_EXISTS DB_DELETE
Via: Bart’s Blog
Comentarios recientes