Asterisk: conoscere il numero dal quale si sta chiamando

Verifica questa notizia !

Essendo il contesto telefonico dell’azienda dove lavoro piuttosto complesso e “misto” VoIP-Legacy, (la nostra rete telefonica è basata principalmente su sistema Ericsson MD110), capita talvolta di avere la necessità di conoscere il numero di telefono attestato su una certa presa telefonica analogica.

Ovviamente questa necessità non si ha nei sistemi full-voip, dove comunque ogni terminale ha la sua numerazione spesso ben visibile sul display, anche se può comunque essere comodo per tutti quei terminali più economici che non sono dotati di LCD.

Configurare una “estensione” di Asterisk che vi risponde con il vostro CID (Caller ID) è piuttosto semplice:

exten => [ext],1,Answer()
exten => [ext],n,Set(CHANNEL(language)=it)
exten => [ext],n,Playback(vm-num-i-have)
exten => [ext],n,SayDigits(${CALLERID(num)});

Aggiungete queste righe nel file ‘/etc/asterisk/extensions.conf‘, in coda al contesto giusto (generalmente ‘from-pstn’ o ‘default’), e chiamando il numero di estensione [ext], una voce vi detterà le cifre del numero dal quale state chiamando. Ovviamente dovete scegliere un numero da dedicare al servizio, es. “100”, e sostituire nel codice sopra la parte [ext] con ‘100’.

Giusto per dare un taglio più didattico all’articolo, approfondiamo i comandi:

exten => [ext],1,Answer()

Il comando Answer() risponde alla chiamata in ingresso,predisponendo il sistema ad interagire con il chiamante.

exten => [ext],n,Set(CHANNEL(language)=it)

Il comando Set() serve per impostare le variabili. In questo caso, la variabile CHANNEL(language) viene impostata ad ‘it’ (italiano), per indicare al sistema quale set di voci/suoni deve utilizzare.

exten => [ext],n,Playback(vm-num-i-have)

Playback() riproduce un certo file audio, in questo caso ‘vm-num-i-have‘ che si trova nella directory dei suoni (generalmente, almeno su Debian, nella directory /usr/share/asterisk/sounds. Potete comunque verificare nel file asterisk.conf, sezione [directories], voce astdatadir). Per la riproduzione, Asterisk si basa sulla lingua prescelta, impostata precedentemente, e cerca il file con estensione  .wav, .gsm, .alaw, scegliendo quello più adatto secondo le caratteristiche del canale (i codec sono indicati nel file di configurazione sip.conf). In questo caso, nella sottodirectory ‘it’, ho i files vm-num-i-have.alaw, vm-num-i-have.gsm, vm-num-i-have.ulaw, vm-num-i-have.wav con registrata la frase “Il numero che ho è”. Se non lo trova, effettua un tentativo con la lingua di default. Nel caso non vi siano files disponibili per la riproduzione, semplicemente non riproduce alcunché.

exten => [ext],n,SayDigits(${CALLERID(num)});

Questo è il comando principale, quello che detta il numero del chiamante. SayDigits() detta le cifre del numero indicato come argomento, una ad una (es. 100, “uno zero zero”). Eventualmente si può sostituire con SayNumber() che, però, tenta di riprodurre il numero nella sua interezza (es 100, “cento”). Personalmente ho ritenuto migliore la dettatura cifra per cifra, che facilita la comprensione del numero.

Per finire, la variabile hash ${CALLERID}, che contiene le seguenti informazioni:

  • all: sia il nome che il numero del chiamante (es “Mario Rossi” <100>)
  • name: il nome del chiamante (ovviamente se impostato dal sistema)
  • num: il numero del chiamante
  • ANI: Announced Number Identification
  • DNID: Dialed Number IDentifier
  • RDNIS: Redirected Dialed Number Identification Service

Nel nostro caso, indichiamo al sistema di dettare le cifre del numero del chiamante.

Per finire, nella speranza di essere stato sufficientemente chiaro, vi invito a farmi avere il vostro feedback :-)