AGI (Asterisk Gateway Interface) は各種機能を実行するためにAsteriskへ接続するメソッドです。
AGIは二つの方法で実行できます。: FastAGIとStandard AGIです。
Standard AGIは、libcのfork(2)機能を使用して、Asteriskで直接実行できるプログラムのことです。この機能はマルチスレッド機能が弱いため、メモリを過度に消費する傾向があります。また、起動時間が発生するために実行に遅延が生じます。
Fast AGIはデーモンプログラムとみなせるもので、新規クエリを実行するためにソケットを常時監視しています。このメソッドは、standard AGIに比べて非常に高速で優れたものです。常時稼働しているため、起動時間による遅延を考慮する必要はありません。さらに、Fast AGIはリモートのコンピュータ上にも配置でき、TCP/IPネットワークを通じて通信できます。作成したアプリケーションは、通例どおり/var /lib/asterisk/agi-bin/ に配置してください。しかし、これは要求ではありません。潜在的なポート衝突にご注意ください。高レンジの使われていないポートを使用する方が安全です。
スクリプトのビルドの方法
だ れでもAGIスクリプトを作成することができます。/root/training/example_agi_1.fast にサンプルがあります。このサンプルはPerlを使用して書かれたもので、AGI perl ライブラリを使用しています。このサンプルを利用してスクリプトを作成することができます。以下のステップでコードを書きます:
1. 自分の開発sandboxを作成:
" mkdir /root/training/your_name/
2. サンプルスクリプトを自分のsandboxにコピーする:
" cp /root/training/example_agi_1.fast root/training/your_name/your_name_example_1.fast
3. スクリプトをエディタで編集し(vi, nano, pico) それぞれ異なったポートを使用すると、ポート毎にログファイルが作成されるようにします。エクステンションにポートを割り当てて、ログファイルに名前をつ けてください:(例 /tmp/your_name_ivr.log)
4. スクリプトを編集して、機能を実装します。例えば以下のようなことができます。:
" 電話番号によってデータベースを検索する。
" かけてきた番号によって処理を分岐させる
" Caller ID / Caller ID 名称を発信元に読む
" 上記の組み合わせ。
5. AGIのパーミッションを変更します。
" chmod 755 /root/training/your_name/your_name_example_1.fast
6. スクリプトを実行します。
" perl your_name_example_1.fast
7. スクリプトを変更する。変更を有効にするには、バックグラウンドで実行されているスクリプトを停止させ、再起動させる必要があります。以下のコマンドで、すべてのプロセスを停止させることができま。:
" ps aux | grep “your_name_example_1.fast” | awk {‘ print $2 ‘} | xargs kill
データベースとの連携
デー タベースとの連携はAGIの典型的な応用例です。以下の例では、サンプルスクリプトを変更して、データベースの参照を行います。MySQLコマンドライン シェルを使用して、簡単なクエリを実行します。以下のステップで行います。PBXが稼働しているLinuxサーバのコマンドラインから ‘mysql’ とタイプします。:
1. データベースの作成 MySQLがインストールされていなければ、‘yum install mysql-server’とタイプしてインストールします。
" create database your_name;
2. テーブルの作成 これは何をしたいかによって異なりますが、ここでは以下の手順で行います。「`」はバックティックでシングルクオートではありませんので注意してください。
" use your_name;
" create table `your_name_tbl` (pin int not null, customer_name varchar(255), billing_time int, primary key (`pin`));
3. テーブルにデータを挿入
" insert into your_name_tbl (pin, customer_name, billing_time) values(“1234",“Mike Joyce","10");
" insert into your_name_tbl (pin, customer_name, billing_time) values("4321","Andrew Chi","15");
4. スクリプトのアクセスを許可する� スクリプトに接続する前に、MySQLサーバへのアクセス権を設定しなければなりません。
" grant all privileges on your_name_tbl.* to ‘your_name’@’localhost’ identified by ‘your_password’;
" flush privileges;
5. スクリプトを編集してデータベースへ接続する。以下のコマンドを実行するとデータベースへの接続を確立します。
" my $dbh = DBI->connect('DBI:mysql:your_name:localhost:3306', “your_name", “your_password");
6. スクリプトを編集して、データベースへの参照を行うよう設定します。ここでクエリを記述します。最初にピンに基づいてテーブルの特定の行を選択します。次に、ピンを更新し参照します。
my $select =$dbh->prepare(“select pin, customer_name, billing_time from your_name_tbl where pin=?”);
$select->execute($pin);
my $customer_name = $select->fetchrow_hashref->{‘customer_name’};
my $update = $dbh->prepare(“update your_name_tbl set billing_time=billing_time-1 where pin=?”);
$update->execute($pin);
7. /root/training/example_agi_mysql_1.fastをご覧ください。
画像 0 | ||
---|---|---|
ギャラリーに表示すべき画像はありません。 |