Accade che sia necessario consentire ad Asterisk accesso ai dati remoti con HTTP / HTTPS per chiamare dei servizi o leggere dei valori dal DialPlan di Asterisk. Esiste un modo semplice ed immediato per farlo, utilizzando la funzione CURL() che Asterisk mette a disposizione nel DialPlan.
Per avere una panoramica di CURL(), dalla cli di Asterisk, digitando il comando core show function CURL otteniamo:
CURL() permette, quindi, ad Asterisk, l’accesso ai dati remoti con HTTP / HTTPS. Ad esempio, per leggere un dato attraverso una API http dal sito http://pfox.it/dati.txt, possiamo utilizzare la seguente porzione di dialplan:
…
exten => _X.,1,Set(DATI=${CURL(http://pfox.it/dati.txt)})
…
In DATI troveremo, pertanto, quanto restituito dalla chiamata http. La variabile DATI può essere utilizzata, di conseguenza, nel Dialplan per effettuare operazioni condizionali in base al valore letto, o per tutte le altre necessità del caso. A titolo esemplificativo, supponiamo che il valore restituito sia un numero e che asterisk lo debba recitare al chiamante; il dialplan si presenterà come segue:
exten => _X.,1,Set(DATI=${CURL(http://pfox.it/dati.txt)})
same => n,SayAlpha(${DATI})
same => Hangup()
In caso di API su HTTPS e la richiesta non va a buon fine a causa del certificato autogenerato, possiamo disabilitare la verifica ssl del peer attraverso la funzione CURLOPT() in questo modo:
…..
same => n,Set(CURLOPT(ssl_verifypeer)=0)
…..
Spesso accade che il risultato della chiamata venga fornito come stringa in formato JSON; anche in questo caso asterisk mette a disposizione la funzione JSONELEMENT. Quest’ultima necessita l’attivazione del flag res_json in fase di compilazione di asterisk, ed in particolare attraverso il comando make menuselect.
Esempio
exten => _X.,1,Set(DATI=${CURL(http://miositohttps://www.pfox.it/dialplan-accesso-a-dati-remoti-con-http/.it/dati.json)})
same => n,Set(IMPORTO=${JSONELEMENT(DATI,venduto/totale})
same => n,SayAlpha(${IMPORTO})
same => Hangup()
con un contenuto di dati.json come segue:
{
“venduto”: {
“totale”: 1
}
}
In conclusione, abbiamo visto, alcuni semplici esempi di come utilizzare i potenti strumenti che Asterisk mette a disposizione, direttamente dal Dialplan.