3CXPhoneは、以前のバージョンに基づいています前に、統合されたプラグインが完了しています。プラグインが失敗する前に、顧客の後、V14 3CXシステムにアップグレードされます。ありません前に、レコードタイムリーな具体的な実施手順と、再び動作させるためにCRMのAPIの新バージョンを再検討する必要があるので、V14のAPI側の調査の完了のこの側面は、他の人と自分自身の未来を支援するために、このブログを終了します。
3CXPhoneに関するドキュメントがあまり発達していないで、乾燥品は、オンライン3CX公式ドキュメントを見つけるための唯一の方法は次のとおりです。http://www.3cx.com/blog/docs/3cxphone-for-windows-api/特に重点を置いて3CX開発者は、APIをサポートしていません(WTFを??? !!!)
まず強調するために、すべてのプラグイン開発Windows用3CXPhoneを電話システムPROライセンス3CXが必要です。
WindowsのAPIの3CXPhoneは、次の操作を実行できます。
- アプリケーションからの発信コール
- アプリケーションで、通知電話のステータス変更(延長ログイン、ログアウトグレード、PBXの接続障害など)
- アプリケーション内の呼状態の変化を(など、リンギング、ダイヤル、切断を呼び出して、接続を呼び出して)通知します
準備
APIを使用するには、まず、参照程度MyPhoneCRMIntegration.dllを得るためには、Windows用3CXPhoneをインストールする必要があります。
プラグインをテストするには、Windows用3CXPhoneは、テストマシンにインストールし、それが正常に実行できることを確認しなければなりません。
プラグインを作成します。
公式サイトでは、私はVS 2013を使用して、Visual Studioの2012分の2010の開発を使用することをお勧めします。
ステップ1 - ソリューションを準備します。
1.1新しい空のソリューションを作成し、新しいWindowsクラスライブラリプロジェクトを作成し、私は4.5.2に使用するターゲットフレームの実際のニーズに起因するの.NET Framework 4.0のプロジェクトのターゲットフレームワークのバージョンを決定します。
1.2は、ファイルへの参照は、一般的にCに位置しています追加MyPhoneCRMIntegration.dll:\はProgramData \ 3CXPhoneのWindows \ PhoneAppディレクトリ
1.3自動的に作成Class1.csのVSを削除します
ステップ2 - インストールと設定log4netの:
何のリアルタイムの視覚的フィードバック受信インタフェースの動作ステータスコードが存在しないので、トーン挿入は、比較的複雑で、痛みを伴うプロセスになるだろう、マウントすることによって、このように。健康ウォッチャーで破ることは困難であるNuget log4netのと必要な設定、しばらく健康プログラムの間に観察された試運転の後
2.1見つけるとNugetでのlog4netをインストール
2.2などD3CallTriggerPlugin.log4net.configとしてlog4netの設定ファイルを、確立し、次のコードファイルの内容を参照して、必ずコピーするように設定されています
<?XMLバージョン= "1.0"エンコード= "UTF-8" ?> < 構成> < configSections > < セクション名= "log4netの" タイプ= "log4net.Config.Log4NetConfigurationSectionHandler、log4netの" /> </ configSections > < log4netの> < ルート> < レベル値= "ALL" /> < アペンダ-REF REF = "RollingFileAppender" /> </ ルート> < <レベル値= "DEBUG" /> - > < レベル値= "ALL" /> < アペンダ-REF REF = "RollingFileAppender" /> </ ロガー> < アペンダ名= "RollingFileAppender" タイプ= "log4net.Appender。 RollingFileAppender」> < レイアウトタイプ= "log4net.Layout.PatternLayout" > < conversionPattern 値= "%日付[%スレッド】%-5level%ロガー[%NDC] - %メッセージ%改行" /> </ レイアウト> <ファイルの値= "C:\ D3CallTriggerPlugin \" /> < appendToFileの値= "true"を /> < rollingStyleの値= "日付" /> < datePattern 値= "YYYY-MM-dd'.log"" /> < maxSizeRollBackups 値= "90" /> < staticLogFileNameの値= "偽" /> </ アペンダ> </ log4netの> </ 設定>
2.3 AssemblyInfo.csは、次のコードを追加します。
[アセンブリ:log4net.Config.XmlConfigurator(のConfigFile = " D3CallTriggerPlugin.log4net.config "、時計= 真)]
ステップ3 - プラグインローダー类:
3.1プラグインのプロジェクトという名前PluginLoader.csで新しいクラスを作成します。
3.2 [MyPhonePlugins.CRMPluginLoader]変更されたクラスのプラグインローダー付き
【MyPhonePlugins.CRMPluginLoader] パブリック クラスプラグインローダー { }
3.3クラスの局所変数として定義されます。
プライベート 静的な 読み取り専用 log4net.ILogログ= log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod()DeclaringType。); プライベート 静的 オブジェクト lockObj = 新しい オブジェクト(); プライベート 静的なプラグインpluginInstance = nullを。
プラグインローダーローダクラスに3.4を添加する方法、プラグインおよびロギングをインスタンス化し、ローダ改質方法[MyPhonePlugins.CRMPluginInitializer]
【MyPhonePlugins.CRMPluginInitializer] パブリック 静的 ボイドローダー(MyPhonePlugins.IMyPhoneCallHandler callHandler) { log4net.Config.XmlConfigurator.Configure()。// 呼び出しにlog4netの設定 log.Info(" ロードプラグイン" ); ロック(lockObj) { log.Info(" pluginInstanceを初期化しよう" )。 試す { pluginInstance = 新しいプラグイン(callHandler)。 log.Info(" Initlaized pluginInstance "); } キャッチ(例外例) { log.Error(" pluginInstanceの初期化中にエラーが発生しました" 、EX)。 } } }
ステップ4 - プラグインのカテゴリ:
4.1 Plugin.csという名前のプラグインプロジェクトに新しいクラスを作成します。
4.2それはIDisposableインターフェイスを継承するようにプラグインクラスは、定義されています
パブリック クラスプラグイン:IDisposableを { }
4.3は、クラス内のローカル変数として定義されます。
プライベート 静的な 読み取り専用 log4net.ILogログ= log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod()DeclaringType。); IMyPhoneCallHandler callHandler; IExtensionInfo extensionInfo;
4.4プラグインのコンストラクタは、callHandler結合イベント、追加のログに応答して、内部変数に各機能をパラメータを渡します。
公共のプラグイン(IMyPhoneCallHandler callHandler) { 試みる { この .callHandler = callHandlerと、 callHandler.OnCallStatusChanged + = callHandler_OnCallStatusChanged。 callHandler.OnMyPhoneStatusChanged + = callHandler_OnMyPhoneStatusChanged。 log.Info(「プラグイン初期化」)。 } キャッチ(例外例) { log.Error(" プラグインの初期化に失敗しました" 、EX)。
廃棄(); } }
4.5インシデント対応のすべてのバインディング機能を解除する方法を処分:
公共 ボイド廃棄() { callHandler.OnCallStatusChanged - = callHandler_OnCallStatusChanged。 callHandler.OnMyPhoneStatusChanged - = callHandler_OnMyPhoneStatusChanged。 }
4.6イベント応答機能を実装します。
プライベート ボイド callHandler_OnMyPhoneStatusChanged(オブジェクト送信者、MyPhonePlugins.MyPhoneStatus状態) { 場合(ステータス== MyPhoneStatus.LoggedIn) extensionInfoは =送信元としてIExtensionInfo。 log.Info(String.Formatの(" MyPhoneStatusChanged -ステータス= '{0}' -拡張= '{1}' "、ステータス、extensionInfo == NULL?String.Emptyを:extensionInfo.Number))。 試す { // ここに派手な何か } キャッチ(例外例) { log.Error("OnMyPhoneStatusChangedイベント処理中にエラーが発生しました" ;、EX)を 廃棄(); } } プライベート ボイド callHandler_OnCallStatusChanged(オブジェクト送信者、MyPhonePlugins.CallStatus callInfo) { log.Info(String.Formatの( " - CallID = '{0}' -着信CallStatusChanged = '{1}' - OtherPartyNumber = '{2}' -国家= '{3}' " 、 callInfo.CallID、 callInfo.Incoming、 callInfo.OtherPartyNumber、 callInfo.State)); してみてください { // ここに空想何か } キャッチ(例外の例) { log.Error(「OnCallStatusChangedイベント処理中にエラーが発生しました」、EX)を、 廃棄(); } }
ステップ5 - コンパイルおよびデプロイ
5.1プロジェクト全体をコンパイル
通常の状況下で3CX電話インストールディレクトリにbinディレクトリ内のすべてのファイルのMyPhoneCRMIntegration.dllコピーに加えて、5.2は、C:\はProgramData \ 3CXPhone Windowsの\ PhoneApp
5.3設定ファイルにプラグイン名を追加し、設定ファイルを変更します
5.4速やか電話の状態に変化が通知ログ・ファイルおよびその他のニーズの適切な場所は/状態を呼び出すかどうかを確認するために、いくつかのインバウンド/アウトバウンドコールをしようと、ソフトフォンを再起動します