除了上篇《硬件接口开发之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)
        {
            来电显示设置内容#region 来电显示设置内容
            try
            {
                host = config.AppConfigGet("CallHost");
                channel = config.AppConfigGet("CallChannel");
                UseCallDevice = Convert.ToBoolean(config.AppConfigGet("UseCallDevice"));
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
                MessageUtil.ShowError("您没有配置来电显示需要的CallHost和CallChannel参数!");
                return;
            }

            try
            {
                if (UseCallDevice)
                {
                    InitCallControl();
                    this.axTMNC_OCXX1.EC_Connect(host);
                    //this.axTMNC_OCXX1.EC_StartMonitor(prot);

                    string content = "来电显示设备已就绪";
                    Portal.gc.MainDialog.RefreshComingCallStatus(content);
                }
                else
                {
                    string content = "来电设备未启用";
                    Portal.gc.MainDialog.RefreshComingCallStatus(content);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
                string content = "设备未链接(错误)";
                Portal.gc.MainDialog.RefreshComingCallStatus(content);
            } 
            #endregion
        }

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);
        }

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

  1. 硬件接口开发之Modem来电显示

    硬件接口开发之Modem来电显示 本文介绍下如何实现Modem的来电显示的功能.Modem的来电显示是在我最早的送水管理软件中实现的,大概是05年完成的,由于Modem的成本比较低(普通的在100元之 ...

  2. linux支持usb电话机吗,研科USB电话录音盒,创造美好生活

    外置网络版电话录音盒,USB接口,系统符windows音频系统规范,安装使用方便,提供本机实时监听查询功能和网络络实时监听查询功能,采用高性能的AGC处理算法,达到完美的远近端音量平衡,高比例压缩,且 ...

  3. 详解EBS接口开发之WIP模块接口

    详解EBS接口开发之WIP模块接口 2014-07-23 22:53:49 caixingyun 阅读数 11780  收藏 更多 分类专栏: 详解EBS接口开发系列 版权声明:本文为博主原创文章,遵 ...

  4. android显示通知图标大全,Android应用开发之android 桌面APP应用图标显示通知消息的数量显示与去除...

    本文将带你了解Android应用开发之android 桌面APP应用图标显示通知消息的数量显示与去除,希望本文对大家学Android有所帮助. android   桌面APP应用图标显示通知消息的数量 ...

  5. 电话录音系统服务器 显示断线,申瓯电话录音系统常见问题处理

    申瓯SOC1900电话录音系统常见八大问题处理列表,供广大申瓯用户及管理员参考. 一.通话结束挂机后,无录音记录问题 解决步骤:首先,打开WEB"通道监控"界面,查看话机摘.挂机时 ...

  6. android webview 太大,Android应用开发之Android WebView加载图片显示过大的处理教程(代码教程)...

    本文将带你了解Android应用开发Android  WebView加载图片显示过大的处理教程(代码教程),希望本文对大家学Android有所帮助. Webview加载图片时,经常会遇到图片显示不符合 ...

  7. STM32CUBEMX F103 HAL库开发之 USB虚拟串口

    今天心血来潮想写点东西 做比赛这么久了,应该写点东西,一是为了给自己学的知识一个总结,二是可以锻炼自己的写作能力与表达能力,帮助他人避免自己走过的坑 stm32 USB VPC虚拟串口简介 很多stm ...

  8. Linux驱动开发之USB驱动深入学习(三)——USB2.0ECHI驱动注册

    一.前言 本篇博客仅对ECHI主机控制器驱动的注册部分进行简要叙述,后面再对一些重要的接口进行分析讲解. 二.USB 1.概述 USB(Universal Serial Bus)即"通用外部 ...

  9. 智能硬件APP开发之路:基于机智云APP开源框架

    为什么使用开源软件? 开源软件是Open Source音译过来的.我们知道所有的软件都是由代码编写,经编译生成的系统或者应用.而一旦你把它开源,意味着任何人.任何组织都可以使用你的代码或者软件,当然也 ...

最新文章

  1. 张思华:希望通过创新加深NetApp与中国的联系
  2. 让 typora和word一样好用
  3. 为什么编程语言初创公司那么少?
  4. Android 实用开源控件
  5. matlab生成均匀部分散点图,应用halton序列生成均匀散点图
  6. Python set模块使用方法
  7. Springboot+vue项目酒店民宿管理系统
  8. Base16,Base32,Base64编码详细学习
  9. python音乐实例详解_python下载无损音乐示例源码(qq音乐)
  10. 数学分析(1): 实数
  11. blender玻璃材质
  12. c++标准扩展TR1
  13. 从零开始使用ESP8266 + Blinker 实现小爱同学可控可读取状态的多路插座
  14. 单片机长时间程序跑飞_单片机程序跑飞的三种现象、原因及解决方法
  15. 手机影像内卷几时休?
  16. Windows系统 gpedit命令详解,Windows系统使用命令行查看组策略
  17. 【经验科普】实战分析C工程代码可能遇到的编译问题及其解决思路
  18. SpringMVC @RequestBody和@ResponseBody原理解析
  19. 计算机科学前沿期刊,FCS|期刊动态:《计算机科学前沿》2021年第一期精彩文章...
  20. 微信小程序地图组件错误 显示非洲问题

热门文章

  1. 如何黑掉一台根本不联网的电脑?
  2. 测鬼记(中)之奋斗——圈子
  3. 透过Q2财报看美团的变与不变
  4. A GPU Laplace Solver for Diffusion Curves and poissonXXXXXX (SIG ASIA 09)
  5. 用Java开发HTTP代理服务器
  6. verilog 音乐演奏
  7. Unity-动作系统-案例学习(1)人物移动和转向
  8. .NET Core Ocelot Consul
  9. JNDI--Java命名与目录接口
  10. 服务器Raid常见故障解决方案