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。)

0 件のコメント:
コメントを投稿