ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
extensions.confのexten行をリアルタイムデータベースから取得する
extensions.confの exten => ...をDBテーブルから取得する方法です。
環境は
・CentOS 7.8.2003
・Asterisk 16.13.0
・MySQL 8.0.22
・unixODBC 2.31
extensions.conf のexten 設定
[default]
exten => _1XX,1,Dial(PJSIP/${EXTEN},60,tT)
extensions.confで記述するとこのextenの行が羅列される事になるわけですが、
これをDBから取得するようにします。
リアルタイムDBは有効になっている前提です。
Alembicで自動的に作られるextensionsテーブルから取得します。
Asteriskの解凍ディレクトリの中にある contrib/realtime/mysql/mysql_config.sqlにテーブル定義があります。 Alembicはこれを実行するようです。
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カラムでのユニーク が元々付いています。
上記の例で言うと
・context は default等が入ります。
・exten は _1XX 等が入ります。
・priority は Dialの前の1です。 integer NOT NULL なので n が使えません。 デフォルトを0にしておきます。
・app は Dial等が入ります。 appdataが()の中です。 デフォルトを空文字''にしておきます。
※context,extenが同じだと、priorityを変えないと 先程のユニーク制限によってエラーとなります。
上記 extensions.conf を以下の通り書き換えます
[default]
switch => Realtime/mycontext@extensions
switch => Realtime/
までは同じ。
@の前の mycontext の部分がextensionsテーブルのcontext カラムにあたります。
@の右側 extensionsがテーブル名
extconfig.conf では リアルタイム定義します。
元々コメントアウトしてある行の';'を外して有効化します。
extensions => odbc,asterisk
exten定義をextensionsテーブルへレコード追加します。
INSERT INTO extensions
(context, exten, priority, app, appdata)
VALUES
('mycontext', '_1XX', 1, 'Dial', 'PJSIP/${EXTEN},60,tT');
再起動して反映します。
# systemctl restart asterisk
参考は以下
Asterisk Realtime Extensions with MySQL
以上になります。
コメントはありません。