ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
Asterisk 「extensions.conf」の設定をリアルタイムデータベースで設定
Asterisk 「extensions.conf」の設定をリアルタイムデータベースで設定していきます。
環境設定
-
CentOS 7.8.2003
-
Asterisk 16.13.0
-
MySQL 8.0.22
-
unixODBC 2.31
「extensions.conf」で設定する場合
extensions.conf
[default]
exten => _1XX,1,Dial(PJSIP/${EXTEN},60,tT)
コンフィグで設定する場合は上記のように記述します。 今回はこれをデータベースで設定します。
リアルタイムDBは有効になっている前提です。
Alembicで自動的に作られるextensionsテーブルを確認
Asteriskの解凍ディレクトリの中にある
contrib/realtime/mysql/mysql_config.sql
にテーブル定義があります。
Alembicはこれでテーブルを作成します。
mysql_config.sql
CREATE TABLE extensions (
id bigint NOT NULL auto_increment,
context varchar(40) NOT NULL,
exten varchar(40) NOT NULL,
priority integer NOT NULL default "0",
app varchar(40) NOT NULL,
appdata varchar(256) NOT NULL default "",
PRIMARY KEY (id),
UNIQUE (context,exten,priority),
UNIQUE (id)
);
context, exten, priority の3カラムでのユニーク が元々付いています。
データベースの「extensions」テーブルに登録
以下のように定義してあるものをテーブルの絡むごとに見ていきます。
[default] #コンテクスト定義部
exten => _1XX,1,Dial(PJSIP/${EXTEN},60,tT) #エクステンション定義部
-
「context」カラムにはコンテクスト定義部に設定した文字列が入ります。 今回の例では
default
になります。 -
「exten」カラムにはエクステンション定義部のエクステンション名(内線番号)が入ります。 今回の例では
_1XX
が入ります。 -
「priority」カラムにはエクステンション定義部のプライオリティが入ります。 integer NOT NULL なので n が使えません。 今回の例では
1
にしておきます。 -
「app 」カラムにはエクステンション定義部のアプリケーション関数が入ります。 今回の例では頭の部分
Dial
が入ります。 -
「appdata」カラムにはエクステンション定義部のアプリケーション引数が入ります。 今回の例ではカッコ内の
PJSIP/${EXTEN},60,tT
が入ります。 ※context,extenが同じだと、priorityを変えないとユニーク制限によってエラーとなります。
インサート文を使う場合
INSERT INTO extensions
(context, exten, priority, app, appdata)
VALUES
('mycontext', '_1XX', 1,'Dial', 'PJSIP/${EXTEN},60,tT');
「extensions.conf」の編集
設定をデータベースから取得するため以下のように編集します。
extensions.conf
[default]
switch => Realtime/[mycontext]@[myextensions]
「mycontext」の部分はextensionsテーブルのcontext カラムに設定した文字列になります。 「myextensions」の部分はテーブル名になります。
今回の例では以下のようになります。
extensions.conf
[default]
switch => Realtime/default@extensions
「extconfig.conf」を編集
コメントアウトしてある行の;
を外してリアルタイムデータベースを有効化します。
extensions => odbc,asterisk
再起動して反映
service asterisk restart
参考は以下
Asterisk Realtime Extensions with MySQL
以上になります。
コメントはありません。