硬件接口开发之USB电话录音盒来电显示

除了上篇《硬件接口开发之Modem来电显》介绍的Modem来电显示,还可以采用USB电话录音盒来进行来电显示和电话录音功能,本文介绍如何在C#中实现该功能。首先我们看看我是如何在我的软件中集成USB电话录音盒的功能,先对USB电话录音盒的功能和应用场景有一个总体的认识先。
我的送水软件可以支持两路及以上多路的来电显示电话录音功能,当用户有新的来电,系统会检测数据库是否存在该电话的用户,如果有那么调出该用户的资料(包括上次订购产品信息),否则提示操作员建立新客户的资料,并记录该次的电话号码。这些来电显示功能非常方便操作人员进行业务操作,点击下鼠标就可以完成客户的订单。


图1 来电自动记录并在状态栏显示相关来电信息


图2 来电显示功能调出已有客户资料,并默认调出上次订购信息

 

实现来电显示的系统最小需求
       1. 你的固定电话已经向电信局申请开通了来电显示功能,若没有申请,即使有软件支持也是不行的。
       2. 安装了指定厂商的录音与来电弹屏设备(包括硬件和软件)。
       3. 正确安装深田之星送水管理系统网络版软件。

但前提是需要一些前提条件,下面是实现来电显示的最小要求和一些相关问题。


图3 安装所需的来电显示设备驱动


图4 电话录音文件,用户可以选择指定的文件进行回播

使用来电显示和电话录音设备的好处

一、总体优势
       1、先进的语音设备
           录音设备采用USB或者PCI接口,最多可支持达256路电话同时录音、同时弹出客户资料;
       2、强大的电话录音功能
           拥有自主知识产权的专用压缩算法,录音数据量小、通话清晰,每线通话数据量只有5.5兆/小时,
           即一个120G的硬盘可以单线连续录音21000小时。采用专用的压缩算法,可以有效的防止他人恶意窃听、篡改录音数据,确保资料安全。可随时将重要的录音资料进行备份。
       3、录音回听
           用户可根据自己的权限回听授权的录音资料,以便对重要通话进行分析、做笔记等。可在本地回听,也可通过局域网或者Internet等广域网进行远程回听,极大地方便了经常出差在外或者公司部门分布较广的公司管理层人员使用。
       4、远程同步监听
           特定用户可以在本地或者通过局域网或者Internet等广域网进行远程实时电话通话情况查看、实时通话监听等。及时掌握员工对外联系状况,及时跟进重要客户等。
       5、来电弹出
           客户来电,系统自动根据来电号码调出客户资料,在摘机接听电话前就可以及时掌握来电客户的基本信息,沟通历史等,给员工一种亲切感,同时客户可以得到最及时、最准确、最周到的服务。
       6、记录未接来电不放过一个来电信息,保障与客户的即时沟通。
       7、电话集中录音,有效防止录音资料丢失;


以上的电话录音盒功能介绍是厂商提供的内容,不过我们一般就是使用来做来电弹出业务窗口、电话录音这两个功能了,其他的都可以不管。那么我们如何在我们开发的程序中集成,也就是使用代码如何完成和硬件的接口开发呢。
由于这个来电显示的录音设备开发包也是一个ActiveX的控件来的,因此和操作其他ActiveX控件一样,我们在工具栏中加入控件,然后拖动到界面上就可以了,注意为了避免给客户产生不好的影响,把控件设置为隐藏即可。

1)首先在Form_OnLoad函数中初始化硬件信息和事件,如下所示
        private void InitCallControl()
        
{
            
this.axTMNC_OCXX1.OnConnect += new AxTMNC_OCX.ITMNC_OCXXEvents_OnConnectEventHandler(axTMNC_OCXX1_OnConnect);
            
this.axTMNC_OCXX1.OnDisConnect += new AxTMNC_OCX.ITMNC_OCXXEvents_OnDisConnectEventHandler(axTMNC_OCXX1_OnDisConnect);

            
this.axTMNC_OCXX1.OnCallIn += new AxTMNC_OCX.ITMNC_OCXXEvents_OnCallInEventHandler(axTMNC_OCXX1_OnCallIn);
            
this.axTMNC_OCXX1.OnCallOut += new AxTMNC_OCX.ITMNC_OCXXEvents_OnCallOutEventHandler(axTMNC_OCXX1_OnCallOut);
            
this.axTMNC_OCXX1.OnNoAnswer += new AxTMNC_OCX.ITMNC_OCXXEvents_OnNoAnswerEventHandler(axTMNC_OCXX1_OnNoAnswer);
        }

        private void MainToolWindow_Load(object sender, EventArgs e)
        
{
            
来电显示设置内容
        }

2)然后就是实现上面的几个委托事件了,代码如下所示。
        private void axTMNC_OCXX1_OnNoAnswer(object sender, AxTMNC_OCX.ITMNC_OCXXEvents_OnNoAnswerEvent e)
        {
            
/**//*
             说明:当有电话打入,且无人接听的情况,即未接来电信息。
            LocalNum:本地号码。CallID:未接来电号码。
            注:此来电号码在OnCallIn事件中也会发送过来,但是不同的是,只有当来电无人接听时
            才会产生OnNoAnswer事件。
             
*/
            
string content = string.Format("未接来电:{0} 本地号码:{1}", e.callID, e.localNum);
            Portal.gc.MainDialog.RefreshComingCallStatus(content);
        }

        
private void axTMNC_OCXX1_OnCallOut(object sender, AxTMNC_OCX.ITMNC_OCXXEvents_OnCallOutEvent e)
        {
            
string content = string.Format("拨出号码:{0} 本地号码:{1}", e.callOutNum, e.localNum);
            Portal.gc.MainDialog.RefreshComingCallStatus(content);
        }

        
private void axTMNC_OCXX1_OnCallIn(object sender, AxTMNC_OCX.ITMNC_OCXXEvents_OnCallInEvent e)
        {
            
string content = string.Format("来电号码:{0} 本地号码:{1}", e.callInNum, e.localNum);
            Portal.gc.MainDialog.RefreshComingCallStatus(content);

            Portal.gc.DealWithComingCall(e.callInNum);
        }

        
private void axTMNC_OCXX1_OnDisConnect(object sender, AxTMNC_OCX.ITMNC_OCXXEvents_OnDisConnectEvent e)
        {
            
string content = "设备未连接";
            Portal.gc.MainDialog.RefreshComingCallStatus(content);
        }

        
private void axTMNC_OCXX1_OnConnect(object sender, AxTMNC_OCX.ITMNC_OCXXEvents_OnConnectEvent e)
        {
            
string content = "设备已就绪";
            Portal.gc.MainDialog.RefreshComingCallStatus(content);
        } 

posted on 2009-09-08 22:04  伍华聪  阅读(7617)  评论(6编辑  收藏  举报

导航