Asterisk サンプル設定ファイル extensions.conf
目次
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()がセットし、ダイヤルした結果をその変数に入れます。
アプリケーション実行
基本的に、Asteriskの機能はアプリケーションコマンドで実装されています。Dialもそのひとつですが、機能を「まとめて」ひとつのアプリケーションとなっている例としてはVoicemailやMeetMeがあります。
exten => 299,1,Answer() exten => 299,n,Wait(1) exten => 299,n,VoicemailMain(${CALLERID(num)},s) exten => 299,n,Hangup
例えばこの部分はボイスメールのメニュー、再生などを行うVoicemailMainというアプリケーションを実行しています。この際の引数として発信者番号(${CALLERID(num)})を使い、パスワード認証を行わない(s)という呼び出し方になっています。アプリケーションの引数とその意味を簡単に確認するには、CLIから core show application voicemailmainなどのようにアプリケーション名を指定します。
*CLI> core show application voicemailmain -= Info about application 'VoiceMailMain' =- [Synopsis] Check Voicemail messages [Description] VoiceMailMain([mailbox][@context][,options]): This application allows the calling party to check voicemail messages. A specific mailbox, and optional corresponding context, may be specified. If a mailbox is not provided, the calling party will be prompted to enter one. If a context is not specified, the 'default' context will be used. Options: p - Consider the mailbox parameter as a prefix to the mailbox that is entered by the caller. g(#) - Use the specified amount of gain when recording a voicemail message. The units are whole-number decibels (dB). s - Skip checking the passcode for the mailbox. a(#) - Skip folder prompt and go directly to folder specified. Defaults to INBOX
VoicemailやMeetMeそれ自体の設定は、それぞれのアプリケーション用の設定ファイルで行います。voicemail.confやmeetme.confがそれです。