王朝网络
分享
 
 
 

创建统一的呼叫中心配置管理系统

王朝学院·作者佚名  2016-05-20  
宽屏版  字体: |||超大  

使用注册表创建统一的呼叫中心配置管理系统《一步一步开发呼叫中心系列》

从上一篇《呼叫中心系统架构》发布至今,已经近3个月过去了,这3个月经历了很多事情,一直没有闲暇提笔继续我的博客编写,今天终于有了点时间,先来总结下这几个月经历的大事件。

1.可爱的宝宝终于出生了,虽然没有如愿以偿地生个小公主,还是很激动很幸福。突然感觉人生的奋斗目标都变了。再也不一心想着自己要如何如何,做什么事情都首先想着如何能给宝宝提供更快乐的童年。在这里也感谢付出那么多辛劳的老婆大人,感谢在这段时间辛辛苦苦给我带宝宝的老妈,没有你们的支持,我的生活不会这么幸福。

2.呼叫中心系统卖出第一份之后,陆续卖出第二份、第三份……第N份,规模从10个坐席到200个坐席不等,从数字中继线到模拟中继线,期间遇到过各种问题,搞了N个通宵N个36H+的连续奋战。

好了,废话不多说,本篇继续对呼叫中心相关技术进行总结。

在上一篇《呼叫中心系统架构》中,讲到了呼叫中心的各个模块以及相互之间的关联,在本系统中,坐席软件与坐席服务之间采用了纯TCP以及WCF两种通信机制,其他模块之间通信全部基于WCF,所以会存在A模块需要知道B模块、C模块等提供的WCF服务地址,那么诞生了一个问题:如何配置这么多的凌乱的WCF或者TCP关联地址信息?

通常,我们的系统配置都是维护在数据库或者配置文件中,我们来分析一下优劣势(观点仅限本系统架构,各个系统有各个系统的业务背景,不能一概而论)。

1.采用配置文件来维护配置信息。

这种方式是使用最广的,开发成本最低的方式。但是明显缺点比较多:维护以及修改的成本较高,如果其中一个节点提供的地址发生变更,很难将修改覆盖到所有地方,经常会造成遗漏,从而影响系统稳定性。并且效率也比较低下,在紧急情况下,这种方式会带来大量的时间消耗。很明显,我们将这种方式排除在外。

2.采用数据库来维护配置信息。

这种方式是普遍大家比较认可的好办法:既做到了修改一个地方,所有地方都覆盖了,又降低了时间消耗成本提高了效率,并且还可以做数据库缓存服务,统一对外提供服务,提高系统运行效率。但是缺点也比较明显:在系统部署好之前,数据库访问配置本身就是需要配置的,那如果数据库地址或账号信息发生变更,仍然脱离不了第一个方式引起的配置信息散乱分布问题。

考虑到呼叫中心系统中,各个模块消耗的资源并不是特别居高不下,从硬件层面,系统部署结构可能如下图所示:

那么我们可以采用注册表的方式,在同一台服务器中,只维护一次配置信息,所有服务都共享此信息。

在C#中,读写注册表核心代码:

/// <summary> /// 从注册表中读取配置 /// </summary> /// <param name="key"></param> /// <returns></returns> internal static CtiServerConfig Load(Microsoft.Win32.RegistryKey key) { CtiServerConfig config = new CtiServerConfig(); if (key != null) { config.CtiAddress = key.TryGetValue<string>("CtiAddress"); config.CtiPort = key.TryGetValue<int>("CtiPort"); config.IsTape = key.TryGetValue<int>("IsTape") == 1; config.TapePath = key.TryGetValue<string>("TapePath"); config.IsPlayJobNo = key.TryGetValue<int>("IsPlayJobNo") == 1; config.VoicePath = key.TryGetValue<string>("VoicePath"); } return config; } /// <summary> /// 将配置保存到注册表 /// </summary> /// <param name="key"></param> public void Save(Microsoft.Win32.RegistryKey key) { key.SetValue("CtiAddress", this.CtiAddress); key.SetValue("CtiPort", this.CtiPort); key.SetValue("IsTape", System.Convert.ToInt32(this.IsTape)); key.SetValue("TapePath", this.TapePath); key.SetValue("IsPlayJobNo", System.Convert.ToInt32(this.IsPlayJobNo)); key.SetValue("VoicePath", this.VoicePath); }

注意:C#的注册表读写操作,会有32位和64位的区别,由于本系统CTI采用的是64位编码,所以出现了配置好的信息,在32位服务中不可读取的问题。

关于注册表32位与64的访问问题,请参考园友的博客《C# 32位程序访问64位系统注册表》。

这一篇没有什么呼叫中心相关的技术,权当发个博,报个到。

下一篇我们介绍三汇板卡事件模式的选择。

Technorati 标记: C#,呼叫中心,三汇

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有