お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

extensions.confのexten行をリアルタイムデータベースから取得する

YH YH 4 years
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

以上になります。

extensions.confのexten行をリアルタイムデータベースから取得する 2021-08-18 11:33:05

コメントはありません。

4933

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp