Asterisk-1.2の変更点

2017年11月18日 (土) 17:50時点におけるSysop (トーク)による版 (「Asterisk-1.2の変更点」の保護を解除しました)

目次

インストール要件

基本的なインストール要件はAsterisk 1.0とかわりはありません。ただし、AsteriskとZaptelおよびAddonなどの関連プログラムのバージョンに注意してください。Asterisk 1.2をインストールするためにはZaptel、libpriも1.2系にアップグレードする必要があります。PRIを使用しない場合にはlibpriは不要です。

設定ファイル類の変更箇所

1.2でのextensions.confのコマンド類の変更点を別ページに整備中です。
1.2における主な変更点は以下の通りです。

extensions.conf

便利な記述方法

Asterisk 1.2からはextensions.confのプライオリティにnが使えるようになりました。

exten => 1234,1,Answer
exten => 1234,n,MeetMe...

このように記述すると n は自動的にインクリメントされた値(ここならば2)が使用されます。このため、従来までのようにNoPを書いておいたり、プライオリティを全て書き直すことなくプライオリティの挿入などが簡単にできるようになりました。
さらにこの記述方法ではラベルも使用できます。
("n"はNextの意味らしいです)

exten => 201,1,Dial(SIP/201)
exten => 201,n,Goto(test)                <--飛び先のラベルを書きます
exten => 201,n,NoOp
exten => 201,n,NoOp
exten => 201,n(test),NoOp                <--これがラベルです
exten => 201,n,NoOp

この例は次のように展開されます。

*CLI> show dialplan
[ Context 'default' created by 'pbx_config' ]
  '201' =>          1. Dial(SIP/201)                              [pbx_config]
                    2. Goto(test)                                 [pbx_config]
                    3. NoOp()                                     [pbx_config]
                    4. NoOp()                                     [pbx_config]
     [test]         5. NoOp()                                     [pbx_config]
                    6. NoOp()                                     [pbx_config]

ただし+101ジャンプの処理等には注意。+101ジャンプ等を行いたい場合には次のように書きます。

exten => 201,1(startdial),Dial(SIP/201)        <--ここにラベルをつけておきます
exten => 201,n,Goto(test)
exten => 201,n,NoOp
exten => 201,n,NoOp
exten => 201,startdial+101,NoOp                <--ラベル+101をPriorityとします

こう書くと次のように展開 されます。

*CLI> show dialplan
[ Context 'default' created by 'pbx_config' ]
  '201' =>          1. Dial(SIP/201)                              [pbx_config]
                    2. Goto(test)                                 [pbx_config]
                    3. NoOp()                                     [pbx_config]
                    4. NoOp()                                     [pbx_config]
                    102. NoOp()                                   [pbx_config]
     [test]         103. NoOp()                                   [pbx_config]

Set系アプリケーションが関数に変更

全般的にSet系のアプリケーションのが変わっています。
従来は

exten => 1000,1,SetLanguage(jp)

1.2からは

exten => 1000,1,Set(LANGUAGE()=jp)

となり、Set系はSet()で処理するように変更されました。これはアプリケーション・コマンドとして実装されていたものが、関数(function)としての実装に変更されたものが多いためです。
ただしAsterisk 1.2では互換性の維持のためSetLanguage()など、従来のアプリケーション・コマンドとして実装されていたSet系もそのまま使えますが、1.4への移行を考えた場合には書き直しておくのが良いでしょう。

主な変更箇所
  • SetVar
Set(Variable=Value)
  • SetGlobalVar
Set(Variable=Value,g)
Setのオプションで"g"をつけます。
  • SetCIDNum,SetCIDName
Set(CALLERID(num)=value)
Set(CALLERID(name)=value)
  • SetLanguage
Set(LANGUAGE()=lang)
  • DigitTimeout
Set(TIMEOUT(digit)=timeout)

変数の部分取り出し

1.x系では次の書き方が使えたのですが・・・

${EXTEN::3}  頭3桁取り出し

1.2系ではちゃんと次のように記述しないと有効な値が得られなくなったようです。

${EXTEN:0:3}

IVRメニューを使用する場合の注意

1.0と1.2ではautofallthroughの挙動が変わっています。1.0で使用していたIVRメニューをそのまま使用する場合にはautofallthrough=noを指定してください。 注:1.2の後期バージョンではautofallthroughでは対応できないようです。WaitExtenを使う方式に書き直してください。

musiconhold.conf

Asterisk 1.2では書式が大きく変わっています。従来通りのクラス設定を行い、mpg123で再生を行う場合には以下のように記述します。

[default]
mode=quietmp3
directory=/var/lib/asterisk/mohmp3

この場合にも互換性維持のため1.0系の書式のままでも動作するようですが、以下のような警告が出力されます。

Oct  3 18:02:55 WARNING[10679] res_musiconhold.c: The old musiconhold.conf
syntax has been deprecated!  Please refer to the sample configuration for
information on the new syntax.

新しい機能としてはファイルからの直接再生モード(mpg123等の外部プレイヤーを使わない)が追加されており、この場合には以下のように記述します。

[default]
mode=files
directory=/var/lib/asterisk/mohmp3

ただし、この場合には各CODECに対応したファイルを用意しておかなくてはならないようです。Voicemailアプリケーション同様に、.gsm、.wav、.WAVなどを一式用意すれば良いものと考えられます。

アプリケーション、ファンクション

Math()

Set系の変更にともないMath()も関数として実装され書式が変更になっています。
新しい書式では

Set(var=${Math(....)})

で記述するようです。(余計わかりにくくなってないか・・?)

SetCIDNum,SetCIDName

SetCIDNum、SetCIDNameは廃止予定とされます。かわりに以下のふたつを用います。SetCIDNumに相当するのは上で、SetCIDNameが下です。

Set(CALLERID(number)=value)
Set(CALLERID(name)=value)

Set系の例外

ただし何でもかんでも、こう変更になったわけではなく例外もあります。

SetMusicOnHold(class)

これはこのままです

プライオリティ・ジャンプ

n+101ジャンプは『好まれない』使用方法になったようです。処理を分岐させる際にはn+101ジャンプを使うのではなく、アプリケーション・コマンドの実行後の変数を見るようにします。n+101ジャンプを使用したい場合にはextensions.confに

priorityjumping=yes

を付けるか、あるいは各アプリケーションのjオプションを使います。
ただし、Asterisk 1.2のデフォルトではpriorityjumping=yesです。このため、1.0系の書き方はそのまま1.2で使用することができますが、1.4への移行の際にインパクトが大きくなりますので注意してください。