Asterisk 20 サンプル設定ファイル 解説
Asterisk 20以降用のサンプル設定ファイルの内容を解説します。Asteriskの勉強用に読んでください。
extensions.conf
globals
; ; グローバル設定(変数類) ; [globals] ;外線発信時の自局番号 MYNUMBER=0312345678 ;外線発信時のトランク名 MYTRUNK=outbound-trunk ;PPIセット時のドメイン PPIDOMAIN=ntt-east.ne.jp ;外線着信させる内線番号(カンマ区切り) RINGPHONES=201,202
最初のセクション "globals" ではグローバル変数を定義します。Asteriskの変数は明示的にグローバルと宣言されない限り、チャネル依存です。チャネルは呼が発生してから破棄されるまでAsteriskの内部に存在するのでチャネル変数はその呼内だけの "ローカル" となります。言い換えると、ある通話内で使っているローカル変数は別な通話から参照することはできません。
これに対してグローバル変数はAsterisk全体で設定/参照することができます。
グローバル変数を予め定義しておくには "globals" というセクション(コンテキスト)に書いておきます。
default
defaultコンテキストはみなさん無意識にdefaultを使っていますが、defaultである必要はなく、エンドポイントcontext=で定義するものです。これはそのエンドポイントが発信等を行う際にどのコンテキストで処理するかを指定します。つまりエンドポイントでcontext=defaultと設定されていると発信処理はこのコンテキストを使用するということになります。
[default] ; ;内線処理(1~9から始まる番号) ; ;内線はDBで抽象化されているので内線番号はDBに設定する ;例: database put MYPBX/EXT 201 phone1 ;この設定では内線201はエンドポイントphone1となる exten => _Z.,1,NoOp(内線) ;SIPメッセージングの場合の処理 exten => _X.,n,Set(MTARGET=${EXTEN}) exten => _X.,n,GotoIf($["${CHANNEL(name)}"="Message/ast_msg_queue"]?sipmsg,s,1) ;自局情報を取得してセット exten => _Z.,n,Gosub(sub-whoami,s,1) ;内線番号が割り当たってなければ発信させない exten => _Z.,n,GotoIf($["${MY_EXTEN}"=""]?nogo) ;内線番号に対応するエンドポイントをDBから取得 exten => _Z.,n,Set(TARGET=${DB(MYPBX/EXT/${EXTEN})}) ;PJSIPのdial contactsに変換 ;注意:ダイヤル先がREGISTERされていない場合でもCONTACTSは空になる ;(pjsip show contactsの結果を参照) exten => _Z.,n,NoOp(${PJSIP_DIAL_CONTACTS(${TARGET})}) exten => _Z.,n,Set(TARGET=${PJSIP_DIAL_CONTACTS(${TARGET})}) ;ターゲットが空(Dial先のエンドポイントがない)なら終了 exten => _Z.,n,GotoIf($["${TARGET}"=""]?nogo) ;Dialを実行 exten => _Z.,n,Dial(${TARGET}) exten => _Z.,n(nogo),Hangup
まず内線間の通話を行うための処理が書かれています。このダイヤルプランでは『内線はゼロ以外の数字から始まる』番号と定義しています。
exten => _Z.
おっといけません。extenの書き方を説明していませんでした。extenはAsteriskにおけるダイヤルプランそのもののことでエンドポイント、つまりは電話機等からダイヤルされた番号をどう処理するかを書きます。書き方にはいくつかあるのですが筆者はこの書き方が好きです。
exten => 123,1,NoOp(123) exten => 123,n,Dial(PJSIP/123)
このような書き方をします。123の部分はexten、sまたはnの部分はpriority、NoOpやDialが書かれている部分にはAsteriskのアプリケーションあるはファンクションと呼ばれる処理を書きます。一般的な書式は以下のようになります。
exten => exten,priority,app
extenは同じ処理は同じextenを書きます。priorityは必ず"1"から始めなくてはいけません。そしてその次のpriorityは2,3,4...とひとつづつ増やしますが、"n"を書くと勝手に前のpriority +1と解釈されます。つまり先ほどの例は
exten => 123,1,NoOp(123) exten => 123,2,Dial(PJSIP/123)
と同じことになっていたわけです。