Provisioning Telefoni Grandstream

In Asterisk, nelle versioni recenti (questa procedura è basata su Asterisk versione 16), è possibile fare il provisioning dei telefoni (limitato) direttamente basandosi sulle configurazioni di Asterisk e un template. Questo permette di ridurre il tempo di deployment e di avere di fatto un solo file di configurazione che descrive tutto quello che c'e` da sapere sulla configurazione degli interni e anche dei telefoni. Il setup è un pochino complicato, ma il risultato è valido, e soprattutto se avete molti telefoni è comodo.

Per ottenere il risultato voluto occorre:

Nota: in Asterisk deve essere caricato il modulo res_phoneprov, che in Debian / Devuan c'è di default, quindi non occorre fare nulla.

Altra nota: io uso questa roba in rete locale. Su internet occorre pensare bene ai rischi di sicurezza. Uno che riesca a scaricare una config di un telefono tramite gli URL di provisioning ha accesso alle password...

Configurazione di Asterisk

In Asterisk occorre modificare divesi files:

Configurazione di un template per il telefono

Occorre ora creare una directory "phoneprov" dentro a /usr/share/asterisk (ovviamente Asterisk deve poter leggerne il contenuto) e poi ci metteremo dentro i files di template. Nel nostro esempio, il template è uno solo, e si chiama "gxp213o.xml"/usr/share/asterisk/phoneprov/

Questo è un esempio di template nel file /usr/share/asterisk/phoneprov/gxp2130.xml

<?xml version="1.0" encoding="UTF-8" ?>

        <!--####################-->
        <!-- config per gxp2130 -->
        <!--####################-->

<gs_provision version="1">
<config version="1">

        <!--Config account e user (account 1)-->
        
        <!--# Account Active. 0 - No, 1 - Yes. Default is 1-->
        <P271>1</P271>
        <!--# Account Name-->
        <P270>${USERNAME}</P270>
        <!--# SIP Server-->
        <P47>${SERVER}:${SERVER_PORT}</P47>
        <!--# SIP outbound proxy-->
        <P48>${SERVER}:${SERVER_PORT}</P48>
        <!--# SIP User ID-->
        <P35>${USERNAME}</P35>
        <!--# SIP Authenticate ID-->
        <P36>${USERNAME}</P36>
        <!--# SIP Authenticate Password-->
        <P34>${SECRET}</P34>
        <!--# Name (Display Name, e.g., John Doe)-->
        <P3>${DISPLAY_NAME}</P3>
        <!--# voicemail extension (per il tasto "busta")-->
        <P33>${VOICEMAIL_EXTEN}</P33>

        <!--Firmware server-->
        <P192>${SERVER}:8080/asterisk/static</P192>
        <P6767>1</P6767>

        <!--config server-->
        <P237>${SERVER}:8080/asterisk/phoneprov</P237>
        

        <!-- Features varie -->
        <!-- Dial plan con aggiunta di **x+ -->
        <P290>{x+|*x+|*xx*x+|**x+}</P290>
        <!--Unregister On Reboot. 0 - No, 1 - Yes. Default is 0-->
        <P81>1</P81>
        <!--Enable Call Features.  0 - No, 1 - Yes. Default is 1-->
        <P191>1</P191>
        <!--Call Log. 0 - Log All, 1 - Log Incoming/Outgoing only, 2 - Disable Call Log.-->
        <P182>0</P182>
        <!--Allow Auto Answer by Call-Info. 0 - No, 1 - Yes. Default is 0-->
        <P298>1</P298>
        <!--Use # as Dial Key. 0 - No, 1 - Yes. Default is 1-->
        <P72>0</P72>
        <!--Preferred vocoder (in ordine dal primo in avanti)-->
        <!--metto PCMA prima e PCMU dopo, il default e` il contrario-->
        <P57>8</P57>
        <P58>0</P58>
        <!--Auto-Attended Transfer. 0 - No, 1 -Yes. Default is 0-->
        <P1376>1</P1376>
        

        <!-- Display, lingua, data/ora -->

        <!--# Enable weather update. 0 - No, 1 - Yes. Default is 1-->
        <P1402>0</P1402>
        <!--# Display Language. Default is auto-->
        <P1362>it</P1362>
        <!--# Screensaver. 0 - No, 1 - Yes. Default is 1-->
        <P2918>0</P2918>
        <!--# Backlight Brightness.-->
        <!--# Active. Default is 100.-->
        <P334>100</P334>
        <!--# Idle. Default is 60.-->
        <P335>10</P335>
        <!--# Disable Missed Call Backlight. 0 - No, 1 - Yes. Default is 0-->
        <P351>1</P351>
        <!--# NTP Server-->
        <P30>${SERVER}</P30>
        <!--# Time zone-->
        <!--# P64 = CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00 - GMT+01:00 (Paris, Vienna, Warsaw, Roma, Madrid, Prague, Berlin, Budapest, Amsterdam, Belgium)-->
        <P64>CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00</P64>
        <!--# Time Display Format. 0 - 12 Hour, 1 - 24 Hour-->
        <P122>1</P122>


        <!-- Associazione suonerie per interni e esterni -->

        <!--# Matching Incoming Caller ID. Matching Rule 1-->
        <P1488>uno</P1488>
        <!--# Matching Rule 1 Distinctive Ringtone-->
        <!--# 0 - system ring tone, 1 - custom ring tone 1, 2 - custom ring tone 2, 3 - custom ring tone 3. Default is 0.-->
        <P1489>1</P1489>
        <!--# Matching Incoming Caller ID. Matching Rule 2-->
        <P1490>due</P1490>
        <!--# Matching Rule 2 Distinctive Ringtone-->
        <!--# 0 - system ring tone, 1 - custom ring tone 1, 2 - custom ring tone 2, 3 - custom ring tone 3. Default is 0.-->
        <P1491>2</P1491>
        <!--# Matching Incoming Caller ID. Matching Rule 3-->
        <P1492>tre</P1492>
        <!--# Matching Rule 3 Distinctive Ringtone-->
        <!--# 0 - system ring tone, 1 - custom ring tone 1, 2 - custom ring tone 2, 3 - custom ring tone 3. Default is 0.-->
        <P1493>3</P1493>


        <!-- Configurazione multicast paging -->
                
        <!--# Priority 10-->
        <!--# Listening Address-->
        <P1587>224.1.1.1:6767</P1587>
        <!--# Label-->
        <P1588>Annuncio_generale</P1588>
        <!--## Programmable Keys/Physical Multi-Purpose Keys - GXP2130 only-->
                
        <!--tasto 1 (tipo tasto - account - nome - numero) -->
            <P323>1</P323>
            <P301>0</P301>
            <P302>Pippo</P302>
            <P303>101</P303>
        <!--tasto 2-->
            <P324>1</P324>
            <P304>0</P304>
            <P305>Pluito</P305>
            <P306>142</P306>
        <!--# 3-->
            <P325>1</P325>
            <P307>0</P307>
            <P308>Paperino</P308>
            <P309>143</P309>
        <!--# 4-->
            <P326>1</P326>
            <P310>0</P310>
            <P311>Paperone</P311>
            <P312>144</P312>
        <!--# 5-->
            <P327>1</P327>
            <P313>0</P313>
            <P314>Nonna Papera</P314>
            <P315>145</P315>
        <!--# 6-->
            <P328>1</P328>
            <P316>0</P316>
            <P317>QuiQuoQua</P317>
            <P318>146</P318>
        <!--#7-->
            <P329>1</P329>
            <P319>0</P319>
            <P320>Rockerduck</P320>
            <P321>147</P321>
        <!--#8 -->
            <P353>1</P353>
            <P354>0</P354>
            <P355>Topolino</P355>
            <P356>147</P356>


</config>
</gs_provision>

Collaudo

Ora, se dopo aver dato l'ennesimo reload ad asterisk, andiamo con un browser a http://<nome o ip del server>:8080/phoneprov/cfg112233445566.xml dovremmo vedere il template XML di qui sopra, con dentro però tutti i valori sostituiti nel template, in modo da essere personalizzato per il nostro interno di prova che ha questo mac address.

Una cosa PESSIMA di questo sistema è che non esiste alcun log del server http contenuto in Asterisk (se c'è, io non l'ho trovato) per cui se qualcosa non va, auguri a capire perché.

Configurazione dei telefoni

Ora dovremo solo dire ai telefoni dove si trova il server del provisioning. Per farlo, possiamo andare nella loro interfaccia web e indicare l' URL del "config server" come http://<nome o ip del server>:8080/phoneprov/ oppure possiamo andare sul server DHCP della LAN (quello da cui i telefoni prendono l' indirizzo ip) e definire una opzione speciale, che viene usata solo dai telefoni Grandstream, ove indicargli da dove fare il provisioning.

== Configurazione del DHCP ==

Se non vogliamo configurare tutti i telefoni uno per uno come indicato sopra, dovremo aggiungere al nostro server DHCP l'opzione

Tale opzione è la numero 66, ovvero "tftp-server-name" (anche se usiamo http), oppure in alternativa la 43, che pero` richiede un encoding più complesso. Come farlo, dipende dal server DHCP che usate. Cosa metterci dentro, invece, è la stringa http://<nome o ip del server>:8080/phoneprov.