private Int32 StopCallCC(Int16 uChannelID)//停止转移到该CC { if (m_tagGateData[uChannelID].lCCHandle > 0) { BriSDKLib.QNV_CCCtrl_Call(BriSDKLib.QNV_CCCTRL_CALL_STOP, m_tagGateData[uChannelID].lCCHandle, "", 0); m_tagGateData[uChannelID].lCCHandle = 0; AppendStatus("通道线路断开,停止转移到CC"); return(1); } else { return(0); } }
private Int32 StartCallCC(BriSDKLib.TBriEvent_Data EventData) { AppendStatus("启动呼叫转移到CC"); string strDestCC = destcc.Text; if (strDestCC.Length == 0 || strDestCC.Length > 18) { AppendStatus("目标CC号错误:" + strDestCC); return(0); } else {//呼叫CC,使用 pEvent->uChannelID通道做为语音输入输出设备 string strCallParam = strDestCC; string strData = FromASCIIByteArray(EventData.szData); if (strData.Length > 0)//","分隔参数 { strCallParam += ","; strCallParam += "2 1 ";//发送PSTN号码过去,(使用该格式可以兼容CC商务终端,如果转移到的目标CC是使用CC商务终端登陆的话就可以在界面弹出接收到的来电号码) strCallParam += strData; } m_tagGateData[EventData.uChannelID].lCCHandle = BriSDKLib.QNV_CCCtrl_Call(BriSDKLib.QNV_CCCTRL_CALL_START, 0, strCallParam, EventData.uChannelID); if (m_tagGateData[EventData.uChannelID].lCCHandle > 0) { m_tagGateData[EventData.uChannelID].uChannelID = EventData.uChannelID; m_tagGateData[EventData.uChannelID].szCC = strDestCC; AppendStatus("启动呼叫转移成功 CC:" + strDestCC); //---------- //如果直接先接通,因为正在转移CC,无任何声音,就需要考虑给对方播放等候提示音,等CC接通后停止播放提示音 //AnswerChannel(pEvent->uChannelID); // return(1); } else { AppendStatus("呼叫CC失败:" + strDestCC); return(0); } } }
protected override void DefWndProc(ref System.Windows.Forms.Message m) { switch (m.Msg) { case BriSDKLib.BRI_EVENT_MESSAGE: { BriSDKLib.TBriEvent_Data EventData = (BriSDKLib.TBriEvent_Data)Marshal.PtrToStructure(m.LParam, typeof(BriSDKLib.TBriEvent_Data)); string strValue = ""; //AppendStatus("接收到消息:" + " type=" + EventData.lEventType.ToString() + " result=" + EventData.lResult + " data=" + FromASCIIByteArray(EventData.szData)); switch (EventData.lEventType) { case BriSDKLib.BriEvent_PhoneHook: { strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":电话机摘机"; } break; case BriSDKLib.BriEvent_PhoneHang: { strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":电话机挂机"; } break; case BriSDKLib.BriEvent_CallIn: { ////两声响铃结束后开始呼叫转移到CC if (EventData.lResult == 2 && FromASCIIByteArray(EventData.szData) == BriSDKLib.RING_END_SIGN_CH && m_tagGateData[EventData.uChannelID].lCCHandle == 0) { StartCallCC(EventData); return; } else { strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":来电响铃"; } } break; case BriSDKLib.BriEvent_GetCallID: { strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":接收到来电号码 " + FromASCIIByteArray(EventData.szData); //如果接收到来电号码就立即开始呼叫转移到CC StartCallCC(EventData); // } break; case BriSDKLib.BriEvent_StopCallIn: { StopCallCC(EventData.uChannelID); strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":停止呼入,产生一个未接电话 "; } break; case BriSDKLib.BriEvent_GetDTMFChar: strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":接收到按键 " + FromASCIIByteArray(EventData.szData); break; case BriSDKLib.BriEvent_RemoteHang: { StopCallCC(EventData.uChannelID); strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":远程挂机 "; } break; case BriSDKLib.BriEvent_Busy: { StopCallCC(EventData.uChannelID); strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":接收到忙音,线路已经断开 "; } break; case BriSDKLib.BriEvent_DialTone: strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":检测到拨号音 "; break; case BriSDKLib.BriEvent_PhoneDial: strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":电话机拨号 " + FromASCIIByteArray(EventData.szData); break; case BriSDKLib.BriEvent_RingBack: strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":拨号后接收到回铃音 "; break; case BriSDKLib.BriEvent_CC_ConnectFailed: strValue = "通道" + (EventData.uChannelID + 1).ToString() + ":连接CC服务器失败 "; break; case BriSDKLib.BriEvent_CC_LoginFailed: //登陆失败 { strValue = "登陆失败 原因=" + EventData.lResult.ToString(); BriSDKLib.QNV_CCCtrl(BriSDKLib.QNV_CCCTRL_LOGOUT, "", 0); //释放资源 MessageBox.Show("登陆失败"); } break; case BriSDKLib.BriEvent_CC_CallOutSuccess: strValue = "正在呼叫"; break; case BriSDKLib.BriEvent_CC_CallOutFailed: { BriSDKLib.QNV_CCCtrl_Call(BriSDKLib.QNV_CCCTRL_CALL_STOP, EventData.lEventHandle, "", 0); //停止CC呼叫 StopChannel(EventData.lEventHandle); //停止PSTN通道 strValue = "呼叫失败 原因=" + EventData.lResult.ToString(); } break; case BriSDKLib.BriEvent_CC_Connected: { AnswerCCHandle(EventData.lEventHandle); strValue = "CC已经连通"; } break; case BriSDKLib.BriEvent_CC_CallFinished: { StopChannel(EventData.lEventHandle); strValue = "呼叫结束 原因=" + EventData.lResult.ToString(); } break; case BriSDKLib.BriEvent_CC_LoginSuccess: strValue = "CC登陆成功"; break; case BriSDKLib.BriEvent_CC_CallIn: break; case BriSDKLib.BriEvent_CC_ReplyBusy: strValue = "CC对方回复忙"; break; case BriSDKLib.BriEvent_CC_RecvedMsg: strValue = "CC接收到消息"; break; case BriSDKLib.BriEvent_CC_RecvedCmd: strValue = "CC接收到命令"; break; default: break; } if (strValue.Length > 0) { AppendStatus(strValue); } } break; default: base.DefWndProc(ref m); break; } }