‘さまれぼ!’CTIオプションの概要について、‘さまれぼ!’CTIオプションリリースにまとめましたが、今回は技術的な話を少々。
まず、シーモス社のUSBCID4をサポートするかどうかを決定する前に動作確認を行いました。
仕様書に従ってTeraTermで通信しましたが、着信通知が行われません。COMポートやTeraTermの設定を何度か確認し、ハイパーターミナルでも試しましたがダメでした。バージョン取得や電話発信はできました。
発売前でUSBCID4の情報が少なく、発売元に問い合わせた結果、接続する電話機はナンバーディスプレイに対応している必要があることがわかりました。アロハとは違い、NTT交換機とやり取りして発信元電話番号を取得する機能を備えていないためです。電話機とNTT交換機の間で交わされるやり取りを覗き見するイメージでしょうか。
このように、同じナンバーディスプレイ・アダプター装置といってもアロハとは全く異なる仕様となっていますが、プログラミング上でも幾つかの相違点がありました。
アロハでは、アロハからのデータ着信があったかどうかをCTSによりチェックしていました。ところが、USBCID4ではCTSに変化がありません。そのため、RXCHARを使いました。さらに、アロハへのデータ送信処理中はSetCommMaskの引数を0にして着信イベント発生を抑制していましたが、USBCID4では抑制できませんでした。
アロハをサポートとした時点で、プログラムは
メイン - アロハ通信クラス
というシンプルな構造をしていました(他に例外クラスや監視スレッドクラスなど細々したものはありますが)。
USBCID4をサポートするにあたり、単純に
メイン┬アロハ通信クラス
└USBCID通信クラス
とすると、メイン側でクラスを参照する際に一々判別が必要になります。
そこで、アダプター通信を行う汎用的なクラスを用意して、アロハとUSBCIDの各通信クラスはこのクラスを継承することにしました。上記相違点もあり実装には苦労しましたが、最大限の共通化が図れたと思います。
電話発信手順も工夫しました。
仕様書に記載されていた元々の手順は、
- /Sコマンド(発信可能であることをチェック)
- /H11コマンド(オフフック)
- /Dコマンド(ダイヤル)
- 【受話器を上げる】
- (ダイヤル終了までWait)
- /H00コマンド(オンフック)
- 【通話開始】
というものでした。
試行錯誤した結果、受話器を上げるのは/H00コマンド発行前でなければならないことがわかりました(/H00コマンド発行で回線が切れてしまうためです)。「プログラムの発信ボタンを押す」⇒「受話器を上げる」という手順になりますが、音が出ないので回線状態を把握できません。そのため、受話器を上げるタイミングが微妙です。これでは使いにくいので、/H11コマンドの前に受話器を上げてみたところ、問題なく発信できました。これなら、「受話器を上げる」⇒「プログラムの発信ボタンを押す」というシンプルな手順となります。発信可能かどうかは利用者自身が判断できるので、/Sコマンドによる回線チェックは必要なくなり、プログラムもシンプルになります。
念のためこの手順で問題ないか発売元に問い合わせると、大丈夫だろうという回答で、仕様書の発信手順にも加筆されました。ただ、環境によっては動作しないかもしれないという免罪符が付いているので、実際にそのような環境があれば、その時点で対応を考える予定です。
以上はアダプター装置サポートに関する話ですが、ユーザーインターフェースも苦労しました。
CTIプログラムは‘さまれぼ!’本体とは独立して動作し、常駐する必要があります。以前携わっていたSMARTシステムではタスクトレイに格納するようになっていて、Windows起動時に自動実行されるようになっていました。
同等以上のものとするため、まずタスクトレイアイコンを表示するようにして、回線がオープンしているかクローズしているかがアイコンでわかるようにしたり、使い方をバルーンヒント表示したりと、工夫しました。
自動実行については、AutoRunレジストリエントリを操作することにしましたが、環境によってはUACやセキュリティソフトによってアクセスを拒否されることがありました。その場合はスタートアップショートカットを操作する、という二段構えで対応しました。
その他、非通知着信時等を通知するメッセージの実装では、当初考えたフォームを使った方法では最前面表示できませんでした。また、設定ダイアログ表示中の着信時の処理も工夫が必要で、結構時間がかかりました。
CTIプログラムはまだ1stリリースですが、機能を追加する必要のないレベルの完成度だと自負しています。今後は、バグ対応や新たなナンバーディスプレイ・アダプター装置のサポートが中心になると思います。
最近のコメント