このページは役立ちましたか?

AGI(Asterisk Gateway Interface)

    目次
    ヘッダーがありません

    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をご覧ください。

    このページは役立ちましたか?
    タグ (タグ編集)
    • No tags

    ファイル 0

     
    あなたはコメントを投稿するには ログイン しなければなりません。
    Powered by MindTouch Core