[asterisk-dev] Calendaring API

John Todd jtodd at digium.com
Tue Oct 7 15:01:50 CDT 2008

This is a _really_ powerful feature, and I'm happy to see it go into 
public release thanks to Terry's hard work.  Several companies have 
built hack-ish solutions that do the same thing (AGI, or System() 
calls) but this is the right way to do it.

I'd encourage everyone to experiment with this to get it to the point 
where it's ready for inclusion in TRUNK.  This is a highly-useful 
feature for anybody who works in a business environment - even if you 
use Google calendars or some other outsourced calendaring system. 
Being able to route calls based on assumed availability is really 
great - or if not "route", then at least "treat" calls differently 
based on assumed availability (two rings instead of 8 before 
voicemail when I'm in a meeting, for instance.)

Terry: What would be required to get more details in the 
${CALENDAR_BUSY()} function?  It would be useful to get more back 
other than just the status.  It would be useful to get back any of 
the data that you expose with CALENDAR_EVENT, so the dialplan can do 
something like "John has an incoming call, but he is in a meeting. 
If the caller is the meeting organizer, then send the call through to 
his cell phone, otherwise send to voicemail."

I'm really interested in seeing this eventually become "2-way", as 
noted.  At the very least, I can't see why everyone wouldn't want to 
have a private calendar that showed all inbound and outbound calls, 
with time durations and caller IDs/destination numbers.  It's 
basically a way to do a variation of CDRs in a way that is meaningful 
to an individual instead of to a billing program, and at least as 
useful as the current "call history" list that most phones contain. 
With the proliferation of smart phones with multi-calendar capability 
and "click-to-dial" tel: URI embedding, this would make life a lot 
easier when trying to continue threads of conversation that occur via 

It would be interesting to make this "realtime" capable, also, since 
I expect this feature will be one of the ones that is very frequently 
used by larger installations of Asterisk systems that are managed 

Actually, it also might be useful to do something like this, where 
both named calendars out of calendar.conf could be used as well as 
fully-qualified calendar URLs in an ad-hoc fashion:

Looks in calendar called 'calendar1' and returns status (same result for each):

Looks in calendar called 'calendar1' and returns organizer:

Looks in calendar referenced by URL and returns organizer:
${CALENDAR_BUSY(ical/jdoe:supersecret at https://example.com/home/jdoe/Calendar/,organizer)}

Of course, if you wanted to extend this ad-hoc method into the 
resources as well (i.e.: hints) then you'd have to come up with some 
different separator between the calendar type ("ical" or "exchange") 
and in the rest of the URL, or embed it in quotes or something, since 
"/" characters can't be used in device state providers.


At 8:35 PM +0300 2008/10/7, Atis Lezdins wrote:
>On Tue, Oct 7, 2008 at 7:49 PM, Martin Smith <martins at bebr.ufl.edu> wrote:
>>  Neat idea, Terry!
>>  Do you have any plans to enable 2-way calendaring or expose manager
>>  commands for calendaring functionality?
>Two way? It sounds to me as "Write CDR to calendar". For example, your
>calendar automatically gets updated with whom you had conversations.
>Also calendar could automatically place a call when you have a note
>"Call John" :D
>Anyway - nice job :)
>>  Martin Smith, Systems Developer
>>  martins at bebr.ufl.edu
>>  Bureau of Economic and Business Research
>>  University of Florida
>>  (352) 392-0171 Ext. 221
>>>  -----Original Message-----
>>>  From: asterisk-dev-bounces at lists.digium.com
>>>  [mailto:asterisk-dev-bounces at lists.digium.com] On Behalf Of
>>>  Terry Wilson
>>>  Sent: Tuesday, October 07, 2008 12:41 PM
>>>  To: Asterisk Developers Mailing List
>  >> Subject: [asterisk-dev] Calendaring API
>>>  I have created a public branch at
>  >> http://svn.digium.com/svn/asterisk/team/twilson/calendaring
>>>    that contains my work on a Calendaring API for Asterisk.  It
>>>  currently has modules that include both iCalendar and Microsoft
>>>  Exchange calendar support.
>>>  Features: ${CALENDAR_BUSY(<calendar>)} dialplan function to make
>>>  dialplan jumps based on calendars busy status
>>>            Device state provider so phones can subscribe to a
>>>  calendars
>>>  busy status
>>>            Event notification through a Channel and application or
>>>  context and extension (similar to pbx_spool)
>>>  So, the idea is that you can, instead of creating lots of
>>>  GotoIfTime()
>>>  or time-based includes, just create a calendar (Google Calendar,
>>>  Zimbra, Exchange, whatever), with your schedule, business hours,
>>>  holidays, etc. and just jump in your dialplan based on the
>>>  busy state
>>>  of the calendar.  Also, I tend to be bad at remembering
>>>  meetings--so,
>>>  the notification ability will allow you to place calls to notify you
>>>  of an event.  Data about the event is available with the $
>>>  {CALENDAR_EVENT()} function, where you can get information like the
>>>  summary, description, start and end times, location, etc. of the
>>>  event.  Couple that with res_cepstral and you can have Asterisk read
>>>  you the event information if you would like.
>>>  Anyway, I'd like some feedback and testing--so if this
>>>  interests you,
>>>  please check it out and give me some feedback on how it works
>>>  for you
>>>  and what improvements I need to make.  (libneon
>>>  <http://www.webdav.org/neon/
>>>   > is currently a build requirement, as is libical
>  >> <http://sourceforge.net/projects/freeassociation/
>  >>  > )
>  >> Terry
>  >>
>Atis Lezdins,
>VoIP Project Manager / Developer,
>atis at iq-labs.net
>Skype: atis.lezdins
>Cell Phone: +371 28806004
>Cell Phone: +1 800 7300689
>Work phone: +1 800 7502835

John Todd
jtodd at digium.com        +1-256-428-6083
Asterisk Open Source Community Director

More information about the asterisk-dev mailing list