ダイヤルプラン構文基礎
ダイヤルプランの概要をつかんできたタイミングで今回はダイヤルプランの構文について詳しく見ていきます。
ダイヤルプラン復習
ダイヤルプランは、まずコンテクストを定義し、その中にエクステンション、プライオリティ、アプリケーションを定義していくことで作成します。
記述例
[default] exten => 201,1,Dial(SIP/201,30,r) exten => 201,2,Hangup()
コンテクスト定義部
[default]
エクステンション定義部
exten => 201,1,Dial(SIP/201,30,r) exten => 201,2,Hangup()
「exten =>」はその行でエクステンションを定義することを意味し、その次に、エクステンション名(内線番号)、プライオリティ、アプリケーションと記述が続きます。
非番号制プライオリティ
プライオリティは各エクステンションごとに1から始めて、連番でつけていく必要があります。
仮に順番を抜かしてしまうとAsteriskはその先を実行しません。
しかしもし、定義済みのエクステンションにもう一文追加したいとなったとき、挿入した行の後の行全てで番号を振りなおさなくてはいけません。
その手間を省くための解決方法として、バージョン1.2以降のAsteriskには”n”というプライオリティを使用することが可能になりました。
Asteriskは”n”と記述されたプライオリティを、その前の番号に1を加えた番号として解釈してくれます。
exten => 201,1,Answer() exten => 201,n,アプリケーション exten => 201,n,アプリケーション exten => 201,n,アプリケーション exten => 201,n,アプリケーション exten => 201,n,Hangup()
パターンマッチング
前回の記事で内線電話環境を構築するための設定例を紹介しました。
その際「extensions.conf」ファイルには下記のように記述しました。
[default] exten => 201,1,Dial(SIP/201,30,r) exten => 201,2,Hangup() exten => 202,1,Dial(SIP/202,30,r) exten => 202,2,Hangup()
「201」と「202」の2つのエクステンションを定義していますが、それぞれエクステンション名が違うだけで他は同じです。
内線電話が2つしかない場合は上記のような書き方でも問題はないかもしれませんが、もし何十台、何百台と内線電話があるような場合、その数だけエクステンションを定義する必要があり、このような書き方ではあまりにも非効率です。
そこでAsteriskにはパターンマッチングという記述方法が用意されています。
パターンマッチングは、文字や記号を使い、複数の数字を表すことを可能にします。
パターンマッチングを使うにはまず、Asteriskにエクステンションの名前でなく、あるパターンにマッチさせようとしていることを明示的に教えてやる必要があります。
まずは例を示します。
exten => _20Z,1,Answer()
エクステンション名の先頭にアンダーバー(_)があります。
このアンダーバー(_)がAsteriskにパターンマッチングを使うことを明示する役目を果たします。
X | 0から9までのいずれかの数字 |
Z | 1から9までのいずれかの数字 |
N | 2から9までのいずれかの数字 |
[12-5] | 範囲指定。左記例では「1、2、3、4、5」がマッチ |
. | ワイルドカード。1つまたは複数の数字 |
次回、もう少し詳しくパターンマッチングについて見ていきます。