2008-01-11

AGI (Asterisk Gateway Interface) 勉強ノート1

1.AGIとは何か

AGIは外部プログラムがAseriskのダイヤルプランをコントロールするための標準のインタフェースを提供している。AsteriskがMySQLや外部リソースなどとやり取りするときにはこれを使うと便利。AGIはPerl,PHP,Pythonなどのプログラミング言語で書くことができる。要はプログラミングのためにAPIを公開する代わりに、AGIを公開している感じ。


APIに似ているので、同じようにSTDIN/STDOUT/STDERRもある。ここでは

・AGIスクリプトは、STDINから読み出して、Asteriskからの情報を得る。
・AGIスクリプトは、データをSTDOUTに書き込んで、Asteriskに情報を送る。
・AGIスクリプトは、データをSTDERRに書き込んで、Asteriskコンソールにデバッグ情報を送ることがある。※

※コンソールにしか書き込まれないが、じきに改訂されるかもしれない。


2.AsteriskとAGIの通信

AGIスクリプトを起動すると、Asteriskは変数などをそのAGIスクリプトに送信する。

(Asteriskの変数例はこんな感じ。
agi_request: test.py
agi_channel: Zap/1-1
agi_language: en
agi_callerid:
agi_context: default
agi_extension: 123
agi_priority: 2
など。これらの詳細はなんとなくでおk。)

変数が送られ、最後に空行が1行送られる。これはAsteriskが変数の送信を終えたことを意味する。そしてAGIスクリプトの出番。ダイヤルプランをコントロールします。
この時点では、AGIスクリプトはSTDOUTに書き込むことでAsteriskにコマンドを送る。コマンドを送った後、AsteriskはAGIスクリプトが読む変数を送るという作業が行われている。

AGIスクリプトから送られるAGIコマンドの一覧は、AsteriskのCLI(コマンドラインインタフェース「# asterisk -rcvvv」などで起動)でshow agiと入力すれば見れる。

3.AGIスクリプトの実行の仕方。

Asteriskのダイヤルプランに、次のようにAGIスクリプト名(ここではagi-test.agi)を引数にして、AGI()アプリケーションを呼び出す。

exten => 123,1,Answer()
exten => 123,2,AGI(agi-test.agi)

(AGIスクリプトは、AGIディレクトリ(通常、/var/lib/asterisk/agi-bin)に置いてある。フルパスでもおk。)



応援クリックお願いします!!人気blogランキングへ

0 件のコメント: