Asterisk サンプル設定ファイル extensions.conf

提供: VoIP-Info.jp
2009年2月6日 (金) 13:21時点におけるTakahashi (トーク | 投稿記録)による版 (exten)
移動先: 案内検索

context

extenの設定で一番わかりにくいのがこの、コンテキストだと思います。コンテキストとは' [ ] 'で括られたセクションのことをいい、指定されたブロックをそのコンテキストと呼びます。

[incoming]
・
・
incoming context
・
・
[outgoing]
・
・

この例では[incoming]で指定された部分から、次の[outgoing]の前までの部分が incomingコンテキストとなります。
sip.confやiax.confなどでcontext=incomingが指定されていると、その相手(ITSPや電話機)からの着信や接続要求はこのコンテキスト内で行われます。

exten

extensions.confの基本的な書き方は次の通りです。

exten => 番号,プライオリティ,アプリケーション

番号

これがextenそのもので、いわゆる内線番号に相当します。

プライオリティ

処理の順番を書きます

アプリケーション

Asteriskのアプリケーション・コマンドを書きます
この部分にはアプリケーション・コマンドだけでなくファンクションと呼ばれるもの、あるいはPBX組み込み機能を記述することができます。
アプリケーション・コマンドはモジュールのプレフィクスが app_ のものです。
ファンクションはモジュールプレフィクスが func_ のものです。

generalセクション

その名の通り全般のオプション指定を行います。

[general]
writeprotect=no
priorityjumping=no

writeprotect

CLIによるextenの変更を許可するか禁止するかを指定します。

priorityjumping

Asterisk 1.0系との互換性のためのオプションです。n+101ジャンプを使うか使わないかを指定しますが、今後は使わない方向ですのでnoを指定しておきます。

globalsセクション

グローバル変数を設定します。設定値は見ての通りで、Asteriskでは

変数=値

で、変数が設定できます。

[globals]
USEVOICEMAIL=YES
SPEAKINGCLOCK=317
ECHOTEST=333
;For Hikari Denwa
MYNUMBER=03XXXXXXXX

defaultセクション

この部分がdefaultコンテキストです。context=defaultが指定されたものは、ここで処理が行われます。
全部を転記すると長くなりすぎるので、一部だけ解説します。

時報

; Speaking Clock
exten => ${SPEAKINGCLOCK},1,Answer()
exten => ${SPEAKINGCLOCK},n,Wait(1)
exten => ${SPEAKINGCLOCK},n,Set(FutureTime=$[${EPOCH} + 5])
exten => ${SPEAKINGCLOCK},n,SayUnixTime(${FutureTime},Japan,YbdAPHM)
exten => ${SPEAKINGCLOCK},n,Playback(jp-desu)
exten => ${SPEAKINGCLOCK},n,playback(beep)
exten => ${SPEAKINGCLOCK},n,Hangup

ここで変数の参照を行っています。内線番号は変数、SPEAKINGCLOCKに指定された番号になります。値を参照するには${ }で括ります。
プライオリティは本来、1,2,と順番に書くのですがAsterisk 1.2からオートインクリメントが可能になりnを記述しておくと自動的に+1するようになりました。

一斉呼び出し

; Ring 201-204 phones
exten => 200,1,Dial(SIP/201&SIP/202&SIP/203&SIP/204&IAX2/201&IAX2/202&IAX2/203&IAX2/204)
exten => 200,n,Hangup

この例はSIP/201またはIAX/201~SIP/204またはIAX/204を一斉に呼び出す方法を示しています。Dialコマンドでは&で区切り複数の相手を指定することで、一斉に呼び出すことができます。

個別呼び出し

; Local SIP/IAX phones 201-209
exten => _20Z,1,GotoIf($["${USEVOICEMAIL}"="YES"]?use-vm)
exten => _20Z,n,Dial(SIP/${EXTEN}&IAX2/${EXTEN},,tT)
exten => _20Z,n,Hangup
exten => _20Z,n(use-vm),Dial(SIP/${EXTEN}&IAX2/${EXTEN},60,tTwW)
exten => _20Z,n,NoOp(${DIALSTATUS})
exten => _20Z,n,GotoIf($["${DIALSTATUS}"="BUSY"]?vm-rec)
exten => _20Z,n,GotoIf($["${DIALSTATUS}"="NOANSWER"]?vm-rec)
exten => _20Z,n,GotoIf($["${DIALSTATUS}"="CHANUNAVAIL"]?vm-rec)
exten => _20Z,n,Hangup
exten => _20Z,n(vm-rec),Answer()
exten => _20Z,n,Wait(1)
exten => _20Z,n,Voicemail(${EXTEN})
exten => _20Z,n,Hangup

まずextenの部分では_20Zのように指定してありますが、これはパターンマッチを意味します。Zは1~9までの数字に合致します。これにより個々の電話機を呼び出すextenをひとつづつ記述するのではなく、これだけで一括記述できるわけです。
個別の内線番号を呼び出す設定ですが、ボイスメール使用可否の判断のため少し複雑になっています。
n(use-vm) はラベルです。Goto命令でジャンプさせる場合に、プライオリティの数字を指定するのではなくラベルを師弟することができます。
DIALSTATUSなどの変数は、各アプリケーションコマンドがセットします。例えばDIALSTATUSはDial()がセットし、ダイヤルした結果をその変数に入れます。