2016-08-26 10 views
0

コール状態とコール情報をデータベーステーブルに記録するアプリケーションがあります。 interop.TAPI3Lib dllとTAPI3ドライバを使用して呼び出し情報に接続します。以下は TAPI 3デバイスがハンズフリーの状態でコール状態イベントが発生しない

は私が考えて関連するコードの一部である私はCallStateイベント

tapi.EventFilter = (int)(TAPI3Lib.TAPI_EVENT.TE_CALLSTATE); 

tapi.ITTAPIEventNotification_Event_Event += new 
    TAPI3Lib.ITTAPIEventNotification_EventEventHandler(tapi_ITTAPIEventNotification_Event_Event); 

そして、私は

RegEventsResult[line] = 
    tapi.RegisterCallNotifications(
    address, 
    true, 
    false, 
    TAPI3Lib.TapiConstants.TAPIMEDIATYPE_AUDIO, 2); 

を監視する各デバイス(アドレス)を登録するために聞く

次に、コール状態の変更の結果を記録します。

private void tapi_ITTAPIEventNotification_Event_Event(TAPI3Lib.TAPI_EVENT TapiEvent, object pEvent) 
{ 
     string callerID, group, extension; 
     long origin; 
     TAPI3Lib.ITAddress address; 

     switch (TapiEvent) 
     { 
      case TAPI3Lib.TAPI_EVENT.TE_CALLSTATE: 

       TAPI3Lib.ITCallStateEvent callStateEvent = (TAPI3Lib.ITCallStateEvent)pEvent; 

       TAPI3Lib.ITCallInfo call = callStateEvent.Call; 

       extension = call.Address.DialableAddress; 

       address = call.Address; 

       switch (call.CallState) 
       { 
        case TAPI3Lib.CALL_STATE.CS_INPROGRESS: 
          callerID = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER); 

          group = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLEDIDNAME); 

          AddLog("InProgress", callerID, group, extension); 
          break; 
        case TAPI3Lib.CALL_STATE.CS_CONNECTED: 
          callerID = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER); 

          group = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLEDIDNAME); 

          AddLog("Connected", callerID, group, extension); 
          break; 
        case TAPI3Lib.CALL_STATE.CS_OFFERING: 
          callerID = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLERIDNUMBER); 

          group = call.get_CallInfoString(TAPI3Lib.CALLINFO_STRING.CIS_CALLEDIDNAME); 

          AddLog("Offering", callerID, group, extension); 
          break; 
        case TAPI3Lib.CALL_STATE.CS_DISCONNECTED: 
          AddLog("Disconnected", "", "", extension); 
          resetNotification(extension, address); 
          break; 
        case TAPI3Lib.CALL_STATE.CS_IDLE: 
          AddLog("Idle", "", "", extension); 
          break; 
      } 
      break; 
     } 
    } 

これは問題なく動作します。特に、切断するたびにデバイスを再登録すると問題はありません。

ただし、ユーザーが端末でハンズフリーに切り替わった場合、自動的に通話が行われるため、通話状態のイベントは発生しません。

このコール中にデバイスを手動で再登録すると、接続されたコール状態イベントが発生します。

デバイスをハンズフリーにすると、コール状態イベントに何らかの影響がありますか?

+1

私はあなたのコードを詳しく見ていませんが、.NETからTAPIに直接話すことに注意してください。ガベージコレクタと自動生成されたCOM interopレイヤはうまく動作せず、動作しているように見えますが、間違った問題が繰り返し発生します。 TAPIを.NETに適切に公開するサードパーティライブラリがあります。また、C++/CLIラッパーを自分で作成する方法もあります。がんばろう! –

答えて

0

私はTraySoft's AddTapi.Netライブラリを使用して終了しました。これは非常にスムーズに動作すると思われ、セットアップと使用が簡単でドキュメントは優れています。

そして、上記と同じようにコードを書く必要があります。

2

この「ハンズフリー」モードは、取得するイベントに影響しないはずです。私はあなたが他のアプリケーションが同じ結果を得るかどうかを確認するために、独立したツールを使用することをお勧めします。ドライバやPBXにバグが見つかった可能性があります。お持ちでない場合は 、あなたはここでTAPIソフトフォンを試すことができます。

http://julmar.com/tapi/

また、すべての呼び出し後に再登録する必要はありませんし、実際にはその後、良い多くの害を行うことができます。

関連する問題