Asterisk 1.8.X y los Calendarios - Segunda parte: La función CALENDAR_BUSY

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

Vota el Articulo: 

Sin votos (todavía)
Evalúa la calidad del articulo
Suscribirse a Comentarios de "Asterisk 1.8.X y los Calendarios - Segunda parte: La función CALENDAR_BUSY" Suscribirse a VozToVoice - Todos los comentarios