Asterisk AGI PHPスクリプトの改行コード

オープンソースの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 です。