Integrare Asterisk con Google Calendar

Spesso capita che il cliente mi chieda delle modifiche al Dialplan di Asterisk in seguito a necessità nuove o alla gestione di emergenze.

A volte succede che non sempre si sappia in maniera precisa dove far arrivare le telefonate in ingresso e non volendo creare serie infinite di codici da digitare per modificare il comportamento di Asterisk (non amando nella maniera più assoluta le varie interfacce grafiche che oltretutto stanno cadendo come birilli sia come numero che in termini di sicurezza) ho implementato per un call center con sedi distaccate un sistema che preleva una variabile (nel caso concreto il nome della città) all’interno del Calendar di Google.

Per prima cosa bisogna sincerarsi di aver compilato Asterisk col supporto iCal e CalDAV; in caso contrario si procede con l’installazione dei seguenti pacchetti:

yum install neon-devel libical

Poi ci si sposta nella directory dei sorgenti di Asterisk e si rilancia il:

./configure

Alla fine si lancia un:

make menuselect

e si controlla che le voci seguenti abbiamo [*] a fianco:

Asterisk Module and Build Option Selection
MenuSelect in Asterisk ci permette di scegliere quali moduli compilare e installare

Dopodiché il solito

make && make install && make config

ed un

service asterisk restart

Il file da configurare per interfacciare Asterisk a Google Calendar è calendar.conf.

calendar.conf è il file di configurazione per interfacciare Asterisk con Google Calendar
calendar.conf è il file di configurazione per interfacciare Asterisk con Google Calendar

Il nome del calendario nel mio caso è molto originale… dalla cli di Asterisk il comando:

calendar show calendars

ci dirà a quali calendari Asterisk può avere accesso, nel caso specifico il calendario iCal di nome Calendario.

Asterisk mostra i calendari di Google Calendar ai quali può accedere
Il calendario “calendario” del quale abbiamo dato l’accesso ad Asterisk

Ho scelto nel caso concreto di passare ad Asterisk il valore del testo contenuto nella voce Descrizione all’interno degli eventi del Calendar di Google. Quindi per interrogare il Calendario di Google dal Dialplan uso:

exten  => s,1,Set(id=${CALENDAR_QUERY(calendario,${EPOCH},${EPOCH})})

Si crea un id di connessione che interroga il calendario per eventi impostati con timeframe identico ${EPOCH} (da adesso ad adesso, cioè ora, per ottenere un solo risultato)

exten  => s,2,Set(desc=${CALENDAR_QUERY_RESULT(${id},description)})

Si assegna alla variabile desc il valore trovato nella Descrizione dell’evento

Poi all’interno del Dialplan potrò usare quella variabile per modificare il comportamento di Asterisk con il comando:

exten => s,1,Gotoif($["${desc}foo"="foo"]?destinazione se descrizione vuota:destinazione se descrizione impostata su Calendar)

E poi dovrà seguire la personalizzazione… nel mio caso ho istruito i clienti a mettere all’interno della Descrizione dell’evento il nome della città del Call Center che andrà a rispondere con conseguente creazione di una coda all’interno di Queues.conf con nome identico.