オープンソースのIP-PBXである Asterisk は 機能を追加するために AGI (Asterisk Gateway Interface) というインターフェースがあります。さまざまな言語 (Perl, PHP etc.) でデータベースへアクセスするなど電話とコンピュータシステムの連携することができます。
現在開発中のシステムで AGI スクリプトを PHP で書いていて気づいた点があったので備忘録に。
例えば、以下のdefault コンテキストのエクステンションから起動される hangup.php という AGI スクリプトがあります。処理は電話の切断情報をデータベースに書き込んで終了します。
[default] .. 省略 .. exten => h,1,NoOp(${HANGUPCAUSE}) same => n,NoOp(${CHANNEL}) same => n,NoOp(${AVAILSTATUS}) same => n,AGI(hangup.php)
コマンドラインから hangup.php 単体を実行すると期待どおりの動作で問題なかったのですが、エクステンションから起動されると、正常終了するものの処理が行われません。
正常に動作するスクリプトと見比べること数時間。。
違いといえば、正常動作するスクリプトは改行コードが LF のみで、hangup.php は改行コードが CRLF になっていることくらい。
ものは試しに改行コードを LF に変換して実行すると、期待通りの動作となりました。 🙂
ということで、AGIスクリプトの改行コードは LF のみでないと期待通りの動作にならないことがある。
ちなみに、Asterisk のバージョンは 1.8.25 です。