パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

CentOS5 + USB モデムで 留守電/FAX サーバ

かなりの苦労の末(一週間かかった)、やっと留守電/FAX サーバが構築できた。USB の Class1 FAX モデムというところで困難が色々あった気がする。未だ、動作は完璧かどうかはわからないが、何度かは動作しているということで。
動作としては、vgetty が常に起動していて、電話がかかってきて誰も出なければ、まずは留守電体制に入る。留守電応答メッセージを再生。その間に FAX のピー音が聞こえたら、モデムを efax へ渡して FAX 受信。ピー音が聞こえないと、発信者のメッセージを録音しだす、という流れ。あと、留守電録音、FAX 受信が終わると、wav ファイルか tiff ファイルを添付したメールが送信される仕組み。後は、電話に出てしまっても、FAX 音がすれば FAX を受信してくれれば完璧なのだが。

class2/2.0 モデムなら、vgetty だけで 留守電、FAX ともに受け付けるはずなのだが。いまどきは、Class2/2.0 でしかもボイス対応モデムは入手が難しいらしい。需要はあるかなぁ。

ちなみに、vgetty のソースをいじることで、本来の vgetty 自身の FAX 受信機能の代わりに、efax を起動するようにした。オープンソース万歳。ただし、汎用性はまったく考慮していないので、公開するのは気が引ける。アイデアを伝えて、汎用性のあるコードを書いてくれる人がいれば..

ちなみに、efax はコマンド /usr/bin/fax receive で受話器を上げた状態から FAX を受信できるので、それを使ってみた。ただ、receive では、受信したものをメールしてくれない(fax answer が動いていて初めてメールが送信される仕組み)なので、メールを送信する付近のコードを fax answer の部分からコピー、書き換えした。

vgetty 側は、voice/vgetty/answer.c の fax/data へ voice から切り替える部分に、voice の signal のキャンセル、モデムの状態復帰、モデムの開放と、efax の起動(fax receive) を追加した。

かなり、vgetty のソースと、efax のスクリプトを解析するはめになってしまった。ソースが読めると色々できるなぁ。後、使っているモデムからの rmd ファイルが変な形式だったので、録音したメッセージの変換や、応答メッセージ作成のための変換も、自分でコードを書き足してなんとかした。

もう少し運用して、問題が出てこないか確かめる必要がある。

追記

電話に出てしまっても FAX の場合は FAX の受信が始まるように、vgetty の改造でそれらしいことが実現できてしまった。
モデムの方で、呼び出しの RING が途切れることを検出できるようで、途切れたらモデムが受話器を上げて、留守電/FAX の受付モードへ移行するようにすれば、目標に近い動作をさせることができた。ただし、モデムと電話を音質的に推奨されない分岐コネクタで分岐させることと、途切れの検出には時間がかかるので、結構受話器を上げたまま待たないといけないことが欠点。

追記の追記

普通に電話に出ても、しばらくすると留守録メッセージが流れてしまうことを発見(あたりまえ)。ring 途中で出た場合は、FAX 音を待つだけにしなければ...

今回の 留守電/FAX サーバ関連の日記一覧