set
26

Asterisk: un account SIP per ricevere e uno per chiamare

 

Solito titolo poco chiaro, scusate. Questo è il post che ho promesso l’altro ieri, quando ho annunciato di avere un numero VOIP. Qui scenderò nei dettagli della mia configurazione, cercando di renderla comprensbile anche a chi non ha mai avuto a che fare con il VOIP, come ad esempio me medesimo la settimana scorsa.
VOIP con Asterisk

La mia situazione, ma potenzialmente anche la vostra, visti gli evidenti vantaggi economici rispetto ad un normale telefono fisso Telecom, è la seguente:

  • Un account SIP con un provider che vi fornisce un numero geografico chiamabile da tutti i telefoni, nel mio caso Messagenet, servizio Free Number.
  • Un account SIP con un provider con tariffe particolarmente convenienti verso i telefoni tradizionali, nel mio caso Poivy, di cui sto per illustrare le tariffe
  • Uno (o più) telefoni (Aladino e Nokia N80 nel mio caso) o softphone (come l’ottimo Ekiga) da connettere al centralino

Chiaramente ci serve un computer su cui installare Asterisk, che deve necessariamente essere acceso. Nel mio caso uso un Linksys NSLU2 con Debian Etch, un portento (seguirà post su questo argomento). Segnalo la possibilità di eseguire Asterisk anche sui router con firmware [DD|Open]WRT, come i mitici Linksys WRT54G o la Fonera.

Perché tutto questo casino? Non hai un cellulare?

Sì, chiaramente ho un cellulare (uno stagionato Nokia N70), ma avere un numero fisso ha i suoi vantaggi, ad esempio la possiblità di farsi chiamare dagli amici con telefonate gratis ai fissi senza occupare il telefono di casa. Ho poi una segreteria ultraconfigurabile completamente gratis (gli sviluppatori di Asterisk l’hanno simpaticamente chiamata Comedian Mail). È inoltre gradito poter chiamare economicamente (vedi paragrafo su Poivy), anche dai miei. E, non ultimo, è sempre interessante.

Effettuare chiamate – Poivy.com

Finora Poivy è il provider più economico che ho trovato, e fa parte della famiglia di siti tutti uguali, le cui tariffe differiscono solo per il costo delle chiamate ai cellulari. Offre chiamate gratuite ai fissi per 90 giorni all’anno (gli altri giorni 1,8 centesimi al minuto) e solo 6 centesimi al minuto per le chiamate verso i cellulari, il tutto senza scatto alla risposta. Per acquistare credito è necessaria una ricarica nel taglio unico di 10 euro.

Ricevere chiamate – Messagenet

Ho trovato questo servizio quasi per caso, e offre completamente GRATIS un numero geografico di Milano/Roma/Torino/Londra. Per ragioni di vicinanza ho scelto Milano, infatti il mio numero è uno 02. È anche possibile acquistare credito ed effettuare chiamate con loro, ma è molto meno conveniente di Poivy.

Installare Asterisk

Una volta individuato il PC (connesso alla LAN, ovviamente) su cui installare Asterisk è necessario procedere all’installazione. Sono disponibili pacchetti precompilati per praticamente tutte le distribuzioni. Su Debian e Ubuntu e derivate l’installazione si esegue con il classico APT:

sudo apt-get install asterisk asterisk-config asterisk-prompt-it

Ho inserito nella stringa anche il pacchetto asterisk-config (che contiene la configurazione di esempio, piuttosto interessante) perché non mi ricordo se è installato automaticamente dal pacchetto asterisk… asterisk-voice-prompt-it installa le voci in italiano.

Concetti di base

Prima di addentrarmi nella spiegazione completa, trovo giusto soffermarmi un attimo sulla spiegazione di alcuni concetti di base che è necessario conoscere prima di poter usare con successo Asterisk, e che sono il primo scoglio contro cui si sbatte la testa.

Il primo concetto è quello di “contesto”, traduzione letterale di context. Un contesto è, grossomodo, un ambito in cui avviene la chiata, tanto in uscita quanto in entrata. Immaginiamo ad esempio una piccola microscopica azienda, con una segreteria, magari con più telefoni, e un ufficio del dirigente. Le chiamate in arrivo devono arrivare alla segreteria, che può decidere o meno se trasferirle al capo. I telefoni della segreteria saranno in un loro contesto, quello/i del dirigente saranno altrove, e potranno comunicare tra loro (o anche no, secondo la configurazione) mentre quelli della segreteria saranno nel contesto del numero in ingresso (VOIP o meno).

Il secondo concetto è quello di estensione. Le estensioni altro non sono che i numeri di telefono composti dagli utenti. Ogni contesto ha le sue estensioni separate dagli altri, e possono anche differire. Tornando all’esempio di prima, i telefoni nel contesto della segreteria potrebbero chiamare il numero 200 per interrogare la segreteria telefonica, mentre il dirigente potrebbe chiamare in segreteria (o, perché no, sua moglie/amante/fidanzata) digitando il medesimo numero. Si può anche impedire che un determinato contesto faccia chiamate all’esterno, le possibilità sono limitate solo dalla fantasia.

Il caso

Il mio caso è già stato descritto per quanto riguarda i provider utilizzati e al server, mentre non ho ancora detto niente sulla configurazione dei telefoni e dei relativi interni. Nel seguente elenco il primo dato riportato è, appunto, l’interno.

  • 2000 – Aladino WiFi, il telefono principale, sono infatti dirette a lui le chiamate in arrivo sul numero di Messagenet
  • 2010 – Nokia N80, cellulare di mio fratello, integra un client SIP, e si connette al centralino in WiFi
  • 2100 – Portatile, con client Ekiga
  • 2101 – Fisso, con client Ekiga

Ho anche alcuni altri interni che svolgono altre funzioni, come il 3000, tramite il quale si ascolta la propria segreteria (raggiungibile anche dal 4444 perché è il numero immodificabile che l’Aladino usa il tasto segreteria), il 3001 che permette di ascoltare la segreteria di qualsiasi interno, previo inserimento della relativa password e il 7272 che legge le previsioni del tempo di Meteo Trentino, di cui parlerò in un altro post, se a qualcuno interessa. Se qualcuno volesse provarlo in esclusiva mi chiami pure allo 02/00613655, e me lo chieda, trasferirò la chiamata al meteo :D

Configurazione di Asterisk – sip.conf

I file di configurazione di Asterisk (davvero tanti) si trovano in /etc/asterisk e il primo che andremo a modificare è sip.conf, che gestisce il protocolo SIP, e quindi in questa configurazione i provider per chiamate in entrata e uscita e tutti gli interni. Prima di modificare qualche cosa, consiglio di fare una copia della cartella di configurazione, non si sa mai. Ecco il mio sip.conf

[general]
context=chiamate-in-entrata                     ; Default context for incoming calls
bindport=5060                   ; UDP Port to bind to (SIP standard port is 5060)
bindaddr=0.0.0.0                ; IP address to bind to (0.0.0.0 binds to all)
srvlookup=yes                   ; Enable DNS SRV lookups on outbound calls
language=it                     ; Default language setting for all users/peers
                                ; This may also be set for individual users/peers
canreinvite=no                  ; Workaround per problemi di autenticazione con Messagenet
nat=yes                         ; Global NAT settings  (Affects all peers and users)
                                ; yes = Always ignore info and assume NAT
                                ; no = Use NAT mode only according to RFC3581
                                ; never = Never attempt NAT mode or RFC3581 support
                                ; route = Assume NAT, don't send rport

; In
register => USERNAME_MESSAGENET:PASSWORD@sip.messagenet.it:5061/NUMERO_ASSEGNATO_SENZA_+39

; Out
register => USERNAME_POIVY:PASSWORD@sip.poivy.com/USERNAME_POIVY

; PROVIDER
; Out - Poivy
[out]
type=peer
context=chiamate-in-uscita
username=USERNAME_POIVY
fromuser=USERNAME_POIVY
secret=PASSWORD
host=sip.poivy.com        ; Modificare con il proprio server SIP in uscita
fromdomain=sip.poivy.com  ; Idem
qualify=yes
insecure=very
nat=yes

; Client
; Principale - Aladino
[2000]
type=friend
context=telefoni-locali
secret=PASSWORD
host=dynamic

; Nokia N80
[2010]
type=friend
context=telefoni-locali
secret=PASSWORD
host=dynamic

; Ekiga portatile
[2100]
type=friend
context=telefoni-locali
secret=PASSWORD
host=dynamic

; Ekiga fisso
[2101]
type=friend
context=telefoni-locali
secret=PASSWORD
host=dynamic

Notiamo una sezione [general] in cui imposto alcuni settaggi di base, e mi registro ai provider con il comando register. Si passa poi alla sezione per le chiamate in uscita di Poivy (per Messagenet non serve, dato che sono solo chiamate in ingresso) e poi alla definizione dei vari interni, che sono nel contesto telefoni-locali, mentre le chiamate in arrivo sono in chiamate-in-entrata.

Configurazione di Asterisk – extensions.conf

Extensions.conf, come suggerisce il nome, si occupa delle estensioni, ecco il mio:

[telefoni-locali]
;20xx = Telefoni fisici
;21xx = Softphone
;12xxx = Diretti segreteria

; Principale - Aladino
exten => 2000,1,Dial(SIP/2000||tT,20)
exten => 2000,2,VoiceMail(2000,us)
exten => 12000,1,VoiceMail(2000,us)

; Nokia N80
exten => 2010,1,Dial(SIP/2010||tT,20)
exten => 2010,2,VoiceMail(2010,u)
exten => 12010,1,VoiceMail(2001,u)

; Ekiga portatile
exten => 2100,1,Dial(SIP/2100||tT,20)
exten => 2100,2,VoiceMail(2100,u)
exten => 12100,1,VoiceMail(2100,u)

; Ekiga fisso
exten => 2101,1,Dial(SIP/2101||tT,20)
exten => 2101,2,VoiceMail(2101,u)
exten => 12101,1,VoiceMail(2101,u)

; Segreteria telefonica
exten => 3000,1,VoiceMailMain(${CALLERID(num)},s)
exten => 4444,1,Goto(3000,1)
exten => 3001,1,VoiceMailMain()

; Chiamate in uscita
exten => _0X.,1,Dial(SIP/0039${EXTEN}@out)
exten => _3X.,1,Dial(SIP/0039${EXTEN}@out)
exten => _00X.,1,Dial(SIP/${EXTEN}@out)

; Numero inesisntente
exten => _X.,1,Playback(invalid)
exten => _X.,n,Hangup()

; Chiamate in attesa
include => parkedcalls
exten => _70X,1,GoTo(parkedcalls,${EXTEN},1)

; Meteo Trentino
exten => 7272,1,Answer()
exten => 7272,n,Playback(meteo_tn)
exten => 7272,n,Hangup()

[chiamate-in-entrata]
; Chiamate in entrata
exten => _0200613655,1,NoOp('Chiamata entrante allo 0200613655, redirezionata su Aladino, interno 2000')
exten => _0200613655,n,Dial(SIP/2000,20)
exten => _0200613655,n,NoOp('Aladino occupato/non disponibile, chiamata passata in segreteria')
exten => _0200613655,n,VoiceMail(2000,us)

La spiegazione di queste estensioni prevede un ulteriore concetto: la priorità. Grazie ad essa si possono avere più possibili comportamenti per ogni estensione: consideriamo, ad esempio, l’estensione 2000, per le chiamate interne dirette all’Aladino:

exten => 2000,1,Dial(SIP/2000||tT,20)
exten => 2000,2,VoiceMail(2000,us)

Il numero che si vede dopo il 2000 dell’estensione indica la priorità (cioè l’ordine) con cui verranno aseguite le azioni indicate: prima si proverà a chiamare SIP/2000 (indica una chiamata con protocollo SIP verso l’utente 2000, l’Aladino), con possibilità di trasferimento di chiamata ad un altro numero sia da parte del chiamante che del chiamato (”||tT”, senza virgolette). Se entro 20 secondi questo non risponde (notare il 20 in fondo), oppure non è raggiungibile, si passa alla priorità 2, cioè il passaggio della chiamata alla VoiceMail (segreteria) dell’utente 2000. Le opzioni u e s indicano rispettivamente di riprodurre il messaggio di non disponilbilità (Unavaible, modificabile dall’utente chiamando la segreteria e sfogliando un po’ il menu) e s indica di non dare le istruzioni su come lasciare il messaggio (”Lasciare un messaggio dopo il segnale acusitco, quindi riagganciare oppure premere il tasto cancelletto”, o qualcosa del genere). È anche possibile specificare solo la priorità 1 e assegnare le altre priorità n, di fatto non cambia niente ma è più facile aggiungere o togliere delle priorità senza dover riordinare tutto l’elenco. La seguente configurazione è quindi equivalente:

exten => 2000,1,Dial(SIP/2000||tT,20)
exten => 2000,n,VoiceMail(2000,us) ; notare la n al posto della priorità numerica

Per ogni interno c’è anche la possiblità di lasciare direttamente un messaggio in segreteria, chiamando il numero 1<INTERNO>, ad esempio 12000 per lasciare un messaggio all’interno 2000.

Per la segreteria telefonica (estensione 3000) si usa un semplice VoiceMailMain(ID_UTENTE, OPZIONI), dove ID_UTENTE viene inserito dinamicamente tramite la variabile ${CALLERID(num)}, mentre l’opzione s serve per non richiedere la password per ascoltare i messaggi, dato che in ambiente casalingo come il mio è solo una perdita di tempo. Notare poi che all’estensione 4444 uso la funzione (in gergo Asteriskiano applicazione) Goto, e la rimando all’estensione 3000, realizzando di fatto un collegamento alla segreteria. Nell’estensione 3001 si nota l’assenza del parametro relativo all’ID utente di cui ascoltare la segreteria, permettendo l’accesso (con password) a qualunque mailbox.

Per le chiamate in uscita sfrutto i pattern (per una spiegazione dettagliata rimando al capitolo a rigurardo sull’Asterisk Book). Il primo pattern seleziono tutti i numeri che cominciano con 0, seguiti da altre 1-20 cifre: sono i numeri fissi in Italia, quindi redirigo la chiamata tramite Poivy (contesto out), notare il SIP/0039{NUMERO}@out in Dial() (lo 0039 aggiunto mi permette di non scriverlo a mano in ogni chiamata). Il pattern successivo funziona in maniera analoga ed è relativo ai cellulari. I numeri che cominciano con 2 zeri sono quelli internazionali, quindi non prepongo lo 0039.

Troviamo quindi il pattern “_X.”, che è richiamato se il numero chiamato è inesistente, e riproduce il suono “invalid”.

A seguire il necessario per “parcheggiare” le chiamate, metterle cioè in attesa (ricorda molto il 190/187/119, eh?), con tanto di musichetta. Per fare ciò, durante una chiamata, si digita # per abilitare il trasferimento di chiamata, quindi 700 per parcheggiare la chiamata. Al parcheggiante verrà riprodotto il numero da chiamare per tornare dal parcheggiato (anche da un telefono differente), mentre il parcheggiato sentirà la musichetta. Dopo un tempo specificato dopo il parcheggio (di default 45) il parcheggiante verrà richiamato e rispondendo tornerà dal parcheggiato. L’estensione successiva serve sempre per gestire i numeri dei vari parcheggiati.

Abbiamo infine l’estensione che riproduce il suono meteo_tn, contenente le previsioni Meteo Trentino, aggiornato in automatico ogni giorno alle ore 14 (pagina web parsata da PHP, passata ad espeak che la legge, convertita con sox nel formato corretto).

C’è quindi il contesto [chiamate-in-entrata], che redirige le chiamate in entrata all’Aladino o in segreteria. La funzione NoOp non fa altro che stampare un messaggio nella console di Asterisk, che si lancia con sudo asterisk -vvvvvvvvvvr sulla macchina in cui è in esecuzione Asterisk. Il numero di v passate come parametro definisce il livello di verbosità: più sono meglio è, per scopi di debug.

Configurazione di Asterisk – voicemail.conf

L’ultimo file da configurare è voicemail.conf, che deve contenere le impostazioni per ogni casella vocale:

[default]
2000 => PIN-NUMERICO,NOME,E@MAIL
2010 => PIN-NUMERICO,NOME,E@MAIL
2100 => PIN-NUMERICO,NOME,E@MAIL
2101 => PIN-NUMERICO,NOME,E@MAIL

Ho copiato solo la parte personalizzata, all’inizio del file ci sono molte opzioni che si possono configurare a piacere, sono ben spiegate.

Asterisk su Debian – L’avvio automatico

Bisogna editare /etc/default/asterisk impostando RUNASTERISK a yes, per avviare l’avvio automatico. Io avevo avuto problemi di permessi con la cartella /var/log/asterisk, che impedivano l’avvio del server, basta assegnarla all’utente asterisk:
sudo chown -R asterisk /var/log/asterisk

Conclusione

/etc/init.d/asterisk start

P.S.:Finalmente ho concluso questo post! Penso che sia il nuovo record di lunghezza su LuBlog!

P.P.S.: Consiglio la lettura di The Asterisk Book, ottimo anche come refernce manual.

Popularity: 1% [?]

  • OkNotizie
  • Upnews
  • Wikio



Puoi visualizzare il post originale qui.




Fatal error: Call to undefined function wp23_related_posts() in /home/tuxfeed/public_html/wp-content/themes/df_marine/index.php on line 68