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

提供: VoIP-Info.jp
移動先: 案内検索

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がそれです。