Lavorando in un’azienda multisede, dopo aver sostituito tutti i vecchi centralini analogici con Asterisk, la prima richiesta fatta è:
si può far sì che le nostre telefonate infra-sede siano gratuite?
La risposta è ovviamente si
(a patto che le sedi da collegare abbiano una connessione adsl, o comunque a banda larga ma questo è un altro discorso)
dopo un minimo di studio della problematica sono arrivato alla scelta di IAX come protocollo di interconnessione asterisk to asterisk.
Oltre ad essere il protocollo nativo di asterisk, iax ha anche altri vantaggi; per esempio:
- può incapsulare tutto il traffico in un unico canale;
- usa una sola porta di comunicazione;
- l’attraversamento delle NAT è nativo, e non da problemi;
- permette di selezionare il punto di arrivo nel dialplan di destinazione sin dall’origine….
…e comunque tante altre piccole funzionalità che nell’insieme lo rendono imbattibile.
INSOMMA COME SI INTERCONNETTONO DUE CENTRALINI IN MANIERA SEMPLICE?
la soluzione è stata più semplice del previsto e l’idea di base è paragonabile a quella su cui si basa una VPN
ma veniamo al sodo:
abbiamo due centralini (Homer e Marge) di cui vado ad illustrare iax.conf:
| HOMER | MARGE |
| iax.conf:
[general] bindport=4569 [marge] |
iax.conf:
[general] bindport=4569 [homer] |
Le righe da inserire in extensions.conf a questo punto sono abbastanza semplici e logiche;
occorre una riga nel contesto di uscita con un prefisso di nostro gradimento (99) per chiamare gli interni dell’altro e una riga per le chiamate entranti:
| HOMER | MARGE |
| extensions.conf
[outgoing] [...] exten => _99XXX,1,Dial(IAX2/marge/${EXTEN:2}) [...] [fromiax] |
extensions.conf
[outgoing] [...] exten => _99XXX,1,Dial(IAX2/homer/${EXTEN:2}) [...] [fromiax] |
Le chiamate “fromiax” le redirigo in outgoing perché nel mio caso questo è anche il contesto in cui si trovano gli interni.
Ora si pone un piccolo problema:
come distinguere chi chiama dall’altra sede?
Se la reception nella sede “Marge” chiama un interno nella sede “Homer” quest’ultimo vedrà arrivare una chiamata da “Reception”, indistinto dalla reception locale;
questo effetto collaterale può generare molta confusione e per ovviare a ciò ho pensato ad una piccola macro, questa imposta il CallerID a seconda della sede di provenienza, extensions.conf quindi andrà così modificato:
| HOMER | MARGE |
| extensions.conf
[outgoing] [...] exten => _99XXX,1,Macro(set-iax-callerid,IAX2/marge/${EXTEN:2}) [...] [fromiax] [macro-set-iax-callerid] ;aggiunge un TAG di riconoscimento al CID dei chiamanti exten => s,1,Set(CALLERID(name)=${CALLERID(name)} – Homer) |
extensions.conf
[outgoing] [...] exten => _99XXX,1,Macro(set-iax-callerid,IAX2/homer/${EXTEN:2}) [...] [fromiax] [macro-set-iax-callerid] ;aggiunge un TAG di riconoscimento al CID dei chiamanti exten => s,1,Set(CALLERID(name)=${CALLERID(name)} – Marge) |
buon asterisk a tutti.
informazioni d base tratte da: astrecipes.net
