di Agostino Zanutto
Linee in ingresso SIP & DID
| VoIP & Telefonia |

Nell'implementazione di un centralino voip basato su Asterisk e in particolare utilizzando la distribuzione linux trixbox ho scoperto che risulta impossibile gestire l'indirzzamento delle chiamate in ingresso attraverso il numero di chiamata sulle linee in ingresso ti tipo SIP.
Il problema deriva da un errata gestione del DID (Destination IDentificator) per i trunk SIP di Asterisk i quali vengono considerati anonimi senza DID perl'appunto, quindi se per esempio avete 10 numeri sip forniti da un carrier nazionale (tipo Eutelia, Voicestunt o qualunque altro operatore) e voleste usarne uno come numero pubblico e gli altri 9 per accedere direttamente ai vostri interni la cosa non potrebbe funzionare (perlomeno a me non funzionava) salvo fare una piccola correzione al sistema.
La strada mi e` stata mostrata in questo articolo (in lingua inglese) che correttamente consiglia di andare a modificare il file delle "estensioni personalizzate" di asterisk e li aggiungere la nuova estensione che raccolga il DID dal header della linea in ingresso (che in modo univoco comunque ci informa del valore del DID) e poi configurare le linee in ingresso in modo che utilizzino l'estensione appena creata come context. Soluzione brillante ed inneccepibile che pero` non funziona su trixbox.
La ragione e` che la distribuzione software (trixbox) e` formata da un insieme di software i quali eseguono molte cose e ... una delle quale e` proprio la funzione di assegnare in automatico il context nelle linee che vengono create da interfaccia web e le linee "sip in ingresso" sono definite con context 'from-sip-external' e tale valore rimane sovrascrive un qualunque valore impostato a mano nel profilo della linea rendendo completamente inutile la procedura descritta nell'articolo succitato.
Pero`... e` sempre possibile aggirare il problema con la tecnica del cuneo, ovvero andando a modificare il file di configurazione di asterisk extensions.conf (residente nella directory /etc/asterisk) del vostro sistema trixbox intercettando l'estensione forzata dallo stesso per le linee sip in ingresso e andandovi a far eseguire lo script definino nella pagina dell'articolo prima del normale svolgimento dello stesso.
quindi il file dovra` essere modificato da:
; ############################################################################
; Inbound Contexts [from]
; ############################################################################
[from-sip-external]
;give external sip users congestion and hangup
; Yes. This is _really_ meant to be _. - I know asterisk whinges about it, but
; I do know what I'm doing. This is correct.
exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
; Inbound Contexts [from]
; ############################################################################
[from-sip-external]
;give external sip users congestion and hangup
; Yes. This is _really_ meant to be _. - I know asterisk whinges about it, but
; I do know what I'm doing. This is correct.
exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
a:
;
; ############################################################################
; Inbound Contexts [from]
; ############################################################################
[from-sip-external]
; Yes. This is _really_ meant to be _. - I know asterisk whinges about it, but
; I do know what I'm doing. This is correct.
exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
; ############################################################################
; Inbound Contexts [from]
; ############################################################################
[from-sip-external]
; ADDED FOR RECOGNIZE DID FROM UNKNOW SIP LINES
exten => s,1,Noop(Fixing DID using information from SIP TO header)
exten => s,n,Set(pseudodid=${SIP_HEADER(To)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,@,1)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,:,2)})
exten => s,n,Goto(from-sip-external-distribution,${pseudodid},1)
[from-sip-external-distribution]
;give external sip users congestion and hangupexten => s,1,Noop(Fixing DID using information from SIP TO header)
exten => s,n,Set(pseudodid=${SIP_HEADER(To)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,@,1)})
exten => s,n,Set(pseudodid=${CUT(pseudodid,:,2)})
exten => s,n,Goto(from-sip-external-distribution,${pseudodid},1)
[from-sip-external-distribution]
; Yes. This is _really_ meant to be _. - I know asterisk whinges about it, but
; I do know what I'm doing. This is correct.
exten => _.,1,NoOp(Received incoming SIP connection from unknown peer to ${EXTEN})
Una volta impostata questa modifica le rotte in ingresso o DID del vostro sistema
NOTA BENE:
La tecnica del cuneo in un file di configurazione ha il difetto principale che se l'interfaccia web o un aggiornamento di sistema di trixbox dovesse andar ad aggiornare il file di configurazione di sistema con una versione diversa vi ritroverete che la vostra modifica semplicemente sparira` nel nulla.
Ultimo aggiornamento (Martedì 19 Aprile 2011 14:43)
