CTIから各PCへの通知を試みる覚書

CTIシステムと連携する社内システムを自作する覚書。

やりたいことは、電話がかかってきたらその電話番号で顧客マスタを検索して、

その結果を、受付や電話を受ける人にポップアップで知らせるというシステム。

業者に頼んだら結構な初期費用とランニングコストだったので、

なんとか安くすませないかと試行錯誤した結果、Fullfreeというソフトを使うことにした。

基本無料のシステムだけども、社内のビジネスフォンと接続するのは業者頼み・・。

そのため、数万円で業者に依頼しナンバーディスプレイアダプタを挟む方法で接続。

あと、無料のFullfreeだと着信件数に制限があるので、一つだけ8,640円のPROを購入。

 

クライアント・サーバーの環境はC#で自作する。

サーバーはコンソールアプリでプロジェクトを作成し、

サーバープログラムはこれで。

SynchronizedCollectionは、参照の追加でSystem.ServiceModelを追加。

Ctrl + C でプログラムを終了するように、ハイライトの行を追加。

// Ctrl+Cが押された場合はソケットを閉じる
Console.CancelKeyPress += (sender, args) =>
{
  foreach (var clientSocket in this.ClientSockets) clientSocket?.Close();

  // 終了処理
  Console.WriteLine($"終了します ...");
  Environment.Exit(0);
};

クライントから受信するためのポートはコマンドプロンプトを起動して下記コマンド。

> netstat -nao

現在使ってるポート番号が表示されるので、自由に使える49152 ~ 65535の空きを確認。

今回は49192を使うことにして、メインプログラムを作成。

static void Main(string[] args)
{
var server = new Server(49192);
server.Run();
}

実行してみる。

49192のポートを開いて待ってるかさっきのコマンドで確認。

> netstat -nao

よし、問題なさげなので、Ctrl + C を押してみる。

よし、消えた!

 

次はクライアントプラグラム。

さっきと同様にここに習って、C#のフォームアプリで作成。

サーバーへの接続用、文字送信用、切断用のボタンを設置。

実際クライアントから文字は送信しない予定なので、

文字送信用のボタンを押した時は固定でHOGEHOGEを送信するようにしてみる。

送信後のメッセージ表示はコンソールではなくメッセージボックスに変更。

 

ではまず同じマシンで実験。

サーバー用コンソールを起動して、クライアントのフォームを起動。

STARTボタンを押してみる。

おお、クライアントからの接続が確認された!

SENDボタンを押してみる。

サーバー側で認識!

クライアント側にも無事に返ってきた

 

さて、次にサーバープログラムを実際のサーバーで動かしてみよう。

サーバー側は、デフォルトだとローカルホストのクライアントしか受け付けないので、

コンストラクタを下記ハイライトのように変更。

public Server(int port)
{
//this.IPEndPoint = new IPEndPoint(IPAddress.Loopback, port);
this.IPEndPoint = new IPEndPoint(IPAddress.Any, port);
} 

クライアントは、Clientクラスのコンストラクタ内をハイライトのように修正。

public Client()
{
// this.ServerIPEndPoint = new IPEndPoint(IPAddress.Loopback, 49192);
this.ServerIPEndPoint = new IPEndPoint(IPAddress.Parse("123.123.123.123"), 49192);
}

123.123.123.123には実際のサーバーのIPアドレスを設定。

これでまずサーバー側を起動。

0.0.0.0のIPになっているところがポイント。

これがデフォルトの127.0.0.1だとローカルホストのみになってしまい、

”対象のコンピュータによって拒否されたため・・・”というエラーが出る原因となる。

クライアントを起動してSTARTボタン。

よし!接続確認できた!

続いてSENDボタン。

無事メッセージの送受信も完了!

 

Fullfreeで電話を受信した時は、クライアントを起動してメッセージを送信する仕組みにする。

コンソールアプリで新しいプロジェクトを作成し、クライアントで作成したClientクラスを追加。

ネームスペース等を修正し、Main()の中でConnect()、Send()、Disconnect()するようにしてみる。

FullfreeのCTI設定のカスタム通知にて通知方法を”プログラムを実行”にし、パスにはこのアプリ。

パラメータには電話番号を渡すように”{Tel}”とする。

これで電話がかかってくるとこのアプリに電話番号が渡り、

電話番号で社内システムの顧客マスタを検索し、顧客名や担当が取得できる。

そしてサーバーに結果を渡すことで、他のクライアントすべてにその結果が出ることになる。

実現できそうだ!!!!!

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です