Enviado por admin el
Este articulo es la continuación de la primera parte que encuentran en esta pagina. La función CALENDAR_BUSY permite consultar un calendario para ver si su estado es libre o ocupado. Este tipo de respuesta se puede utilizar en el dialplan asociando el calendario a una determinada extensión y en base al estado del calendario procesar la llamada de diferentes formas. Un ejemplo: el calendario configurado en Asterisk está asociado a la extensión 1000. Si el estado del calendario es ocupado, se anuncia al llamante de llamar más tarde, sino se pasa la llamada a la extensión 1000.
Se abre el dialplan
nano /etc/asterisk/extensions.conf
en el contesto internas se pone una entrada para las llamadas a la extensión 1000:
exten => 1000,1,Macro(calendario)
same => n,Dial(SIP/${EXTEN},45)
same => n,Hangup
y al final del archivo, se añade la nueva macro:
[macro-calendario]
exten => s,1,Noop(${MACRO_EXTEN})
same => n,Set(estado=${CALENDAR_BUSY(campusvoztovoice)})
same => n,Noop(Estado = ${estado})
same => n,Gotoif($[${estado} = 1]?ocupado)
same => n,MacroExit
same => n(ocupado),Agi(googletts.agi,"la extensión se encuentra ocupada, llame mas tarde. Gracias",es)
same => n,Hangup
Esta nueva macro revisa si el calendario asociado a la extensión 1000 (en este caso campusvoztovoice) resulta libre o ocupado. Si resulta ocupado, Asterisk devuelve el valor 1, si resulta libre Asterisk devuelve el valor 0). En el caso que el resultado sea 1, se le anuncia al llamante (con el AGI de google) que la extensión se encuentra ocupada y que llame más tarde). Si el resultado es 0 se sale de la Macro y se vuelve al contexto, extensión, prioridad +1 de donde la Macro se ha llamado, es decir, la línea del Dial
Se guardan los cambios y se recarga el dialplan:
asterisk -rvvvvvvvvvvvvvvvvvvvvv
CLI> dialplan reload
se averigua el estado del calendario:
CLI> calendar show calendars
Calendar Type Status
-------- ---- ------
campusvoztovoice caldav busy
Como en este caso resulta ocupado, si desde la extensión 1001 se marca a la extensión 1000, se debería escuchar el anuncio que la extensión se encuentra ocupada).
El resultado de la llamada en la consola:
Extension Changed 1001[subscribe] new state InUse for Notify User 1000
-- Executing [1000@externas:1] Macro("SIP/1001-0000000f", "calendario") in new stack
-- Executing [s@macro-calendario:1] NoOp("SIP/1001-0000000f", "1000") in new stack
-- Executing [s@macro-calendario:2] Set("SIP/1001-0000000f", "estado=1") in new stack
-- Executing [s@macro-calendario:3] NoOp("SIP/1001-0000000f", "Estado = 1") in new stack
-- Executing [s@macro-calendario:4] GotoIf("SIP/1001-0000000f", "1?ocupado") in new stack
-- Goto (macro-calendario,s,6)
-- Executing [s@macro-calendario:6] AGI("SIP/1001-0000000f", "googletts.agi,"la extension se encuentra ocupada, llame mas tarde. Gracias",es") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/googletts.agi
-- Playing '/tmp/80eb1469553d3ab98b95661fbf6a2f1c' (escape_digits=) (sample_offset 0)
-- <SIP/1001-0000000f>AGI Script googletts.agi completed, returning 0
-- Executing [s@macro-calendario:7] Hangup("SIP/1001-0000000f", "") in new stack
La sintaxis de la función:
CLI> core show function CALENDAR_BUSY
-= Info about function 'CALENDAR_BUSY' =-
[Synopsis]
Determine if the calendar is marked busy at this time.
[Description]
Check the specified calendar's current busy status.
[Syntax]
CALENDAR_BUSY(calendar)
[Arguments]
Not available
[See Also]
CALENDAR_EVENT, CALENDAR_QUERY, CALENDAR_QUERY_RESULT, CALENDAR_WRITE
Comentarios recientes