- 85 KB
Transcript
- 85 KB
“ASTERISK FALLBACK SIP PSTN” PROGETTO V.O.C.I. HOWTO “REALIZZAZIONE DI UN SISTEMA DI FALLBACK AUTOMATIZZATO PER LE CHIAMATE VOIP SU RETE PSTN” N O M E D A T A F I L E : A T T I V I T À U R L Asterisk_Fallback_SIP_PSTN.doc 15/09/2009 : S T A T O : : : A U T O R E / I : Gruppo VoIP ABSTRACT: Il presente documento contiene l’howto relativo alla configurazione di un sistema di “fallback” delle chiamate VoIP verso la rete telefonica pubblica. ASTERISK_FALLBACK_SIP_PSTN.DOC 1/6 “ASTERISK FALLBACK SIP PSTN” INDICE INTRODUZIONE ......................................................................................................................3 1. REALIZZAZIONE DI UN SISTEMA DI FALLBACK AUTOMATIZZATO PER LE CHIAMATE VOIP SU RETE PSTN ..........................................................................................4 1.1. Configurazione basata sulla variabile “DialStatus” .............................................4 1.2. Configurazione basata sulla variabile “HangupCause” .......................................5 ASTERISK_FALLBACK_SIP_PSTN.DOC 2/6 “ASTERISK FALLBACK SIP PSTN” INTRODUZIONE Il documento contiene l’howto relativo alla configurazione di un sistema per il “fallback” delle chiamate VoIP verso la rete telefonica pubblica. L’IP-PBX Asterisk mantiene traccia dello stato di una chiamata attraverso le variabili “Dialstatus” ed “Hangupcause” automaticamente scritte al termine di una chiamata. Un’istruzione “Dial” può essere seguita da controlli su queste variabili al fine di generare, eventualmente, chiamate con protocolli di segnalazione diversi. Nell’howto è indicata la procedura per eseguire il fallback su rete telefonica PSTN (Public Switched Telephone Network) ma le indicazioni sono comunque valide per eseguire il “fallback” su server o canali diversi. Le configurazioni allegate sono valide per le release Asterisk “1.2.X, 1.4.X, 1.6.X”. Esiste però una differenza nel numero di argomenti richiesti dalla funzione “ENUMLOOKUP” indicata nell’howto. ASTERISK_FALLBACK_SIP_PSTN.DOC 3/6 “ASTERISK FALLBACK SIP PSTN” 1. REALIZZAZIONE DI UN SISTEMA DI FALLBACK AUTOMATIZZATO PER LE CHIAMATE VOIP SU RETE PSTN Il servizio riguarda la possibilità di prelevare una chiamata entrante su un interno o numero di servizio da una estensione telefonica diversa da quella con la quale il chiamato risulta registrato con il sistema. La configurazione può richiedere la definizione di due identificativi di gruppo da associare all'account VoIP di ciascun utente: “callgroup” e “pickupgroup”. Il “callgroup” indica il gruppo al quale la chiamata appartiene; il “pickupgroup” indica invece di quale gruppo possono essere prelevate le chiamate entranti. Di default sono attivabili 64 “callgroup”. Esiste un vincolo sul funzionamento: la chiamata per poter essere prelevata, non deve essere già stata accettata (risposta). Il codice da selezionare per la attivazione del servizio é “*8”. Esiste però la possibilità di definirne uno nuovo configurando il file “features.conf” al parametro “pickupexten” presente nella sezione “general”. La configurazione del servizio può anche essere condotta ricorrendo alla applicazione “Pickup” che é possibile impiegare nel dialplan. Questo consente di creare “customizzazioni” del servizio basate ad esempio sul contesto o al verificarsi di determinati controlli all'interno del dialplan. A tale proposito saranno presentati degli esempi relativi alle impostazioni per le due forme di configurazione introdotte. 1.1. Configurazione basata sulla variabile “DialStatus” Le istruzioni da inserire rispetto quelle presenti nella sezione WEB1, sono evidenziate in grassetto. L'estratto consente la configurazione dell'IP-PBX Asterisk in modo da rendere automatizzate le chiamate su rete PSTN (Public Switched Telephone Network) in caso di URI SIP non individuata dalla consultazione DNS. Il fallback è eseguito anche in presenza di problemi nella instaurazione della chiamata con il protocollo SIP (es. utente VoIP chiamato occupato e/o non registrato). In questo caso prestare attenzione alla “Hangup” di chiusura del blocco di codice presente in Tabella 1. exten=> _+.,1,Set(Sipuri=${ENUMLOOKUP(${EXTEN},sip, , 1,e164.arpa)}) exten => _+.,n,GotoIf($["${Sipuri}" != ""]?dial) exten => _+.,n,Set(Sipuri=${ENUMLOOKUP(${EXTEN},sip, , 1, secondo_albero_DNS-VoIP)}) exten => _+.,n,GotoIf($["${Sipuri}" = ""]?lookupfailed) exten=> _+.,1,Set(Sipuri=${ENUMLOOKUP(${EXTEN},sip, , 1,terzo_albero_DNS_VoIP)}) exten => _+.,n,GotoIf($["${Sipuri}" != ""]?dial) exten => _+. ,n(dial),Dial(SIP/${Sipuri},60,r) exten => _+.,n, GotoIf($[$[${DIALSTATUS}=NOANSWER|${DIALSTATUS}=CHANUNAVAIL|${DIALSTATU S}=CONGESTION]?fault:bye) exten => _+.,n(fault),Dial(ZAP/g1/${EXTEN},60,r) exten => _+.,n,Hangup() exten => _+.,n(bye), Hangup() Tabella 1 Estratto del file “extensions.conf” relativo alla “Dialstatus” 1 http://www.servizi.garr.it/index.php/it/voip/informazioni-tecniche/utilizzo-di-nrenum ASTERISK_FALLBACK_SIP_PSTN.DOC 4/6 “ASTERISK FALLBACK SIP PSTN” L’estratto di Tabella 1 è relativo alle release Asterisk “1.4.X” e “1.6.X”; per release “1.2.X” è necessario rimuovere una “,” da quelle che seguono il metodo “sip”. 1.2. Configurazione basata sulla variabile “HangupCause” La configurazione che segue fa riferimento alla variabile “HangupCause” è allegata in Tabella 2. exten =>_+.,1,Set(Sipuri=${ENUMLOOKUP(${EXTEN},sip, , 1,e164.arpa)}) exten =>_+.,n,GotoIf($["${Sipuri}" != ""]?dial) exten =>_+.,n,Set(Sipuri=${ENUMLOOKUP(${EXTEN},sip, , 1,secondo_albero_DNS_VoIP)}) exten =>_+.,n,GotoIf($["${Sipuri}" = ""]?lookupfailed) exten=>_+.,1,Set(Sipuri=${ENUMLOOKUP(${EXTEN},sip, , 1,terzo_albero_DNS_VoIP)}) exten => _+.,n,GotoIf($["${Sipuri}" != ""]?dial) exten => _+. ,n(dial),Dial(SIP/${Sipuri},60,r) exten => _+.,n, GotoIf($[$[${HANGUPCAUSE} = 16] | $[${HANGUPCAUSE} = 17] | $[${HANGUPCAUSE} = 18] ]?fault:bye) exten => _+.,n(fault),Dial(ZAP/g1/${EXTEN},60,r) exten => _+.,n,Hangup() exten => _+.,n(bye), Hangup() Tabella 2 Estratto del file “extensions.conf” relativo alla “Hangupcause” L’estratto di Tabella 2 è relativo alle release Asterisk “1.4.X” e “1.6.X”; per release “1.2.X” è necessario rimuovere una “,” da quelle che seguono il metodo “sip”. Le configurazioni sono relative al pattern “_+.” che “cattura” i numeri “E164” ma possono essere modificate per associarle ad altre estensioni (ad esempio di gestione di numeri in formato “NationalDestinationCodeSubscriberNumber”) opportunamente completati della porzione “CountryCode” es. da “064962522” a “+390649622522” nella connettività dell’IP-PBX attivo. Gli estratti di dialplan allegati nelle Tabella 1 e Tabella 2 possono essere utilizzati per definire due macro: una prima dedicata alla interrogazione di alberi DNS dedicati al VoIP, la seconda per la gestione dei valori ottenuti. La Tabella 3 ne contiene una possibile implementazione. [contesto_voip] exten =>_+.,1,Macro(checkenum,${EXTEN}) exten => _+.,n,Macro(mydial,${Sipuri},${EXTEN}) exten => _+.,n,Hangup() [macro-checkenum] exten => s,n,Set(Sipuri=${ENUMLOOKUP(${ARG1},sip, , 1,e164.arpa)}) exten => s,n,GotoIf($[“${Sipuri}”!=””]?toexit) exten => s,n,Set(Sipuri=${ENUMLOOKUP(${ARG1},sip, , 1,secondo_alberoDNS_VoIP)}) exten => s,n,GotoIf($[“${Sipuri}”!=””]?toexit) ASTERISK_FALLBACK_SIP_PSTN.DOC 5/6 “ASTERISK FALLBACK SIP PSTN” exten => s,n,Set(Sipuri=${ENUMLOOKUP(${ARG1},sip, , 1,terzo_alberoDNS_VoIP)}) exten => s,n,GotoIf($[“${Sipuri}”!=””]?toexit) exten => s,n(toexit),MacroExit() ;:::::::::::::::::::::::::::::IMPLEMENTAZIONI POSSIBILI PER LA MACRO MYDIAL [macro-mydial] ;:::::::::::::1) BASATA SULLA VARIABILE DIALSTATUS ;ARG1=${Sipuri}, exten => s,n,Dial(SIP/${ARG1},20) exten=> s,n,GotoIf($[${DIALSTATUS}=NOANSWER|${DIALSTATUS}=CHANUNAVAIL|${DIALSTAT US}=CONGESTION]?fault:bye) exten => s,n(fault),Dial(ZAP/1/${ARG1}) ; questa Dial può essere eseguita su server o canale di fallback anche diverso da card ISDN pilotate dal driver Zaptel exten => s,n(bye),Hangup() [macro-mydial] ;:::::::::::::2) BASATA SULLA VARIABILE HANGUPCAUSE exten => s,n,Dial(SIP/${ARG1},20) exten=> GotoIf($[$[${HANGUPCAUSE} = 16] | $[${HANGUPCAUSE} = 17] | $[${HANGUPCAUSE} = 18] ]?fault:bye) exten => s,n(fault),Dial(ZAP/1/${ARG1}) ; questa Dial può essere eseguita su server o canale di fallback anche diverso da card ISDN pilotate dal driver Zaptel exten => s,n(bye),Hangup() Tabella 3 Estratto del file “extensions.conf” Le chiamate sono gestite eseguendo una prima interrogazione su tre alberi DNS: “e164.arpa (“Golden Tree”) e due alberi privati (secondo_albero_DNS_VoIP e terzo_albero_DNS_VoIP). Una volta eseguita la funzione “Dial” è necessario esaminare lo stato della chiamata. A tal fine sono stati previsti i controlli sui valori: “${DIALSTATUS}” e “${HANGUPCAUSE}” confrontandoli con codici e costanti disponibili in Asterisk. Una possibile implementazione della consultazione degli alberi DNS per il VoIP è allegata in Tabella 4. [macro-checkenum] exten => s,n,Set(Sipuri=${ENUMLOOKUP(${ARG1},sip, , 1,e164.arpa)}) exten => s,n,GotoIf($[“${Sipuri}”!=””]?toexit) exten => s,n,Set(Sipuri=${ENUMLOOKUP(${ARG1},sip, , 1,nrenum.net)}) exten => s,n,GotoIf($[“${Sipuri}”!=””]?toexit) exten => s,n,Set(Sipuri=${ENUMLOOKUP(${ARG1},sip, , 1,freenum.org)}) exten => s,n,GotoIf($[“${Sipuri}”!=””]?toexit) exten => s,n(toexit),MacroExit() Tabella 4 Estratto del file “extensions.conf” ASTERISK_FALLBACK_SIP_PSTN.DOC 6/6
Documenti analoghi
Esercitazione di laboratorio su Asterisk Marco Romagnoli, Davide
priorità che deve essere data in ordine sequenziale a partire da 1.
• applicazione(): rappresenta l’azione che deve compiere Asterisk quando quel passo
della sequenza viene eseguito.
Vediamo un e...