VTL-TA02X を Asterisk 配下で使う一部で投売り状態の VoIP TA : VTL-TA02X を Asterisk と組み合わせて使う方法についてのメモ。注: 本ページに記載されている方法は、メーカの想定範囲外の使い方になります。自己責任でお願いします。 関連リンク
やりたいこと
ただ、IP 電話からの発信をアナログ回線からできるようにもしたいのですが、これは無理な模様。 まあ、私の場合は 050 で発呼するのでこれは不要なのですが。 構成以下のような構成で組み上げました。
Internet | Line +----------+ (NTT) | Router | | +----------+ | | +---------+ Ether +----------+ |VTL-TA02X|-----------------| Asterisk | ----------+ +----------+ | | FAX IP Phones | TEL 概要は以下の通り。
番号計画以下のようにしています。
VTL-TA02X の設定最初に VTL-TA02X を設定します。設定は、http://192.168.192.200:9999 にアクセスして行います。 (ちなみに、Windows Vista でアクセスすると、なぜか上部のメニューが一部隠れてアクセスできません。 この場合は http://192.168.192.200:9999/top.htm を使うと全てアクセスできたりします)
Asterisk 側の設定 : extensions.confウチで使っている extension.conf から必要部分だけ抜粋しました。
[general] static=yes writeprotect=no clearglobalvars=no Set(LANGUAGE()=jp) [globals] GLEX=2006xxxx ; ここは G-LEX の番号にあわせてください ALL_IP_INT=SIP/3002&SIP/3003&SIP/3004&SIP/3005 ; VTL-TA02X除く全端末に着信 ALL_INT=SIP/3001&${ALL_IP_INT} ; 全端末に着信 IGNORE_VOIPTA=0 ; ループ防止用の変数 ;;;; ;;;; G-LEX 着信 ;;;; [g-lex-in] exten => _X.,1,Goto(all-int,s,1) ;;;; ;;;; アナログ回線着信、またはアナログ電話からの内線 ;;;; VTL-02X からループで戻ってくる場合があることに注意。GoToIf で loop ブロックする ;;;; [analog] ; 転送。ループガードする。 exten => 3099,1,GoToIf($[${IGNORE_VOIPTA} = 1]?ignore:proceed) exten => 3099,n(ignore),Hangup exten => 3099,n(proceed),Dial(${ALL_IP_INT},60) ; 内線など exten => _X.,1,Goto(internal,${EXTEN},1) ;;;; ;;;; 内部用のダイヤルプラン ;;;; [internal] ; 外線発呼(G-LEX経由) exten => _0.,1,Goto(g-lex-out,${EXTEN},1) ; 外部 IP 電話発呼 exten => _2.,1,Goto(g-lex-out,${EXTEN},1) ; 代表番号。全端末鳴動させる。 exten => 3000,1,Goto(all-int,s,1) ; VOIPTA 宛。ループガードが必要。 exten => 3001,1,Set(IGNORE_VOIPTA=1,g) exten => 3001,n,Dial(SIP/${EXTEN},60,g) exten => 3001,n,Set(IGNORE_VOIPTA=0,g) exten => 3001,n,Hangup ; 内線 exten => _[3-8].,1,Dial(SIP/${EXTEN},60,g) exten => _[3-8].,2,Hangup ;;;; ;;;; 全端末鳴動 ;;;; VTL-02X のループガードつき ;;;; [all-int] exten => s,1,Set(IGNORE_VOIPTA=1,g) exten => s,n,Dial(${ALL_INT},60,g) exten => s,n,Set(IGNORE_VOIPTA=0,g) exten => s,n,Hangup ;;;; ;;;; G-LEX 発呼 ;;;; [g-lex-out] exten => _X.,1,Set(CALLERID(name)=${GLEX}) exten => _X.,2,Dial(SIP/${EXTEN}@GLEX,180,g) exten => _X.,3,Hangup sip.conf のほうも一部抜粋します。
[general] context=internal allowoverlap=no bindport=5060 bindaddr=0.0.0.0 srvlookup=yes language=jp maxexpiry=900 defaultexpiry=360 ;----------------------------------------- OUTBOUND SIP REGISTRATIONS ------------------------ ; G-Lex (番号、パスワードは各自設定してください) register => 2006xxxx:password@sip001.g-lex.net/2006xxxx ;----------------------------------------- NAT SUPPORT ------------------------ nat=yes externip=(NAT外側のIPアドレスを記述) localnet=192.168.0.0/255.255.0.0 ;----------------------------------- MEDIA HANDLING -------------------------------- canreinvite=no ;------------------------------------------------------------------------------ ; G-Lex [GLEX] type=friend fromdomain=sip001.g-lex.net host=sip001.g-lex.net username=2006xxxx fromuser=2006xxxx secret=PASSWORD insecure=very context=g-lex-in ;------------------------------------------------------------------------------ ; Definitions of locally connected SIP devices ;;; VTL-02X : ANALOG Line ---> analog context! [3001] context=analog type=friend host=dynamic username=3001 secret=PASSWORD mailbox=3001 ;;; IP Phones [3002] type=friend host=dynamic username=3002 secret=PASSWORD mailbox=3002 .... extension.conf に関しては、3つコンテキストを使います。
アナログ回線から着信した場合はこれでいいのですが、問題は IP 電話で着信した場合です。 上記設定では、IP電話着信した場合はアナログ端末を含む全端末に着信させます。 この場合でも VTL-TA02X は呼を Asterisk 側に転送しようとするので、ループが発生します。 具体的には、各 IP 電話端末に対して INVITE が同時に2本来る事になってしまいます。 これを避けるために、IGNORE_VOIPTA というグローバル変数を導入しました。 Asterisk から VTL-TA02X に対して発呼する前にこの変数を 1 にセットし、通話終了したら 0 に戻すようにしておきます (Dial コマンドには 'g' オプションが必要)。 VTL-TA02X から Asterisk に発信があった場合(具体的には 3099 に発信があった場合)、 IGNORE_VOIPTA の値を調べ、この値が 0 ならそのまま全端末を鳴動させますが、1 の場合はループと見なして Hangup するようにして おきます。これでループを防止できます。 制限事項
|