Premessa
Messagenet in quanto operatore ha l'obbligo di garantire che dalla propria rete telefonica siano originate chiamate che abbiano come CLI (CallerID, ovvero il numero chiamante):
- un numero geografico del quale sia gestore;
- un numero di altra natura, ma unicamente in scenario di deviazione di chiamata;
È quindi chiaro che Messagenet debba filtrare il numero chiamante impiegato (screening) e pertanto:
- nei casi comuni, gestisce sulla propria piattaforma l'impiego e la validazione di un determinato numero chiamante (e.g.: deviazione di chiamata configurata sul server, oppure CLI Dinamico);
- è necessario dare prova del fatto che un determinato numero chiamante voglia essere impiegato in conseguenza di una chiamata in corso ricevuta, ovvero pilotando la deviazione con il proprio apparato;
- Non sono disponibili altri metodi, come SIP REFER oppure SIP 302: la deviazione fallirà!
In questo articolo mostriamo come quest'ultimo caso viene ad essere realizzato.
Funzionamento
Messagenet inoltra all'apparato cliente diversi headers SIP custom, tra i quali "X-Mnet-InLeg" il quale, se specificato in uscita per altra chiamata, fa sì che la nostra piattaforma utilizzi per la chiamata in uscita il chiamante originale.
ATTENZIONE! il servizio funziona correttamente nel caso in cui il l'Utente VoIP chiamante è il medesimo, o coesiste nel medesimo Account Utente Messagenet, dell'Utente VoIP chiamato in origine.
Non è quindi possibile impiegare il medesimo header ricevuto su di un Utente VoIP per mantenere il CLI chiamante in una chiamata originata con un Utente VoIP scorrelato dall'Utente VoIP chiamato.
Implementazione di esempio per Asterisk PBX
Diamone un'esempio partendo dal presupposto che la mia register arrivi nel contesto in cui scrivo le seguenti regole e che abbia l'estensione "s" di default (tutti questi aspetti dipendono dalla configurazione del sistema gestito da Asterisk nel suo complesso).
Prima di effettuare una Dial(), pertanto, va:
- letto l'header del chiamante;
- scritto l'header in uscita;
Di seguito, come apparirebbero le istruzione indicate in uno snippet di esempio di extensions.conf
N.B.: l'unica regola necessaria allo scopo è sulla seconda riga, in resto è liberamente implementabile a seconda delle necessità
exten => s,n,...
exten => s,n,SipAddHeader(X-Mnet-InLeg: ${SIP_HEADER(X-Mnet-InLeg)})
exten => s,n,Dial(...)
Implementazione di esempio per FreePBX
FreePBX è basato sul core di Asterisk, quindi possiamo applicare senza troppo sforzo le medesime regole anche in questo caso.
L'idea è simile, ma secondo la logica di FreePBX e pertanto:
- la chiamata sarà gestita in ingresso tramite una regola di Inbound Route;
- tale regola manderà la chiamata ad una Custom Destination da noi definita;
la Custom Destination, definita come sopra, fa Return() dove richiesto, con questa informazione in più che sarà impiegata in caso di chiamata in uscita, nel flusso di questa chiamata, verso altra destinazione telefonica raggiunta tramita Messagenet.
Di seguito due immagini di esempio:
Ulteriori info su FreePBX qui