`
mmBlue
  • 浏览: 167760 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

世无英雄--评新太、高阳IVR平台

阅读更多

转载此文章怀恋原来在Q公司修改IVR脚本的日子。


    当初老板丢给我一个任务,电信最近改标准要在一个增值业务上加上时长话单,其它2个开发人员都避而远之,我挺身而出,接下任务,谁知道真他妈强,什么文档也没,数据库表结构是啥意思都不知道,而且要改3个脚本,最多一个8000行代码放在一个文件里改,没人告诉你业务,没人体谅你,总之要完成任务,不过好在完成了2个流程,哎,想想当初老板的管理也太垃圾了,原脚本开发人员是移动的人,他原来只帮忙写了这个流程,其它什么都不管,你出了任何问题他都不管,他什么都不给你说,只来句:这个东西很简单,你看看流程就知道是怎么回事了。不过他是看老板面子帮忙而已,没收费,不然我真是要骂死他了。 我终于看出了电信的项目也是可以如此的垃圾,多条SQL事务也不开,数据库中用户核心业务表换了也不通知声,电信的服务器和我们的服务器经常断开。。。。

    当时学IVR的时候感觉有种似曾相识的感觉,汇编。觉得他好难,就一本手册看下,花费了我好几天才看懂她的代码。现在我也只是看的懂她的代码,可以写出对数据库操作的代码但不算熟练。总体来说给我感觉她不难,很死,没JAVA C# JS灵活,面向过程的,下面看看我当初在网络上搜到的一篇文章和我当时的心理一样。

 

新太的IVR语音平台在业内赫赫有名,号称占领SP-IVR的半壁江山,其脚本之难写早有耳闻。而最近竟然发现,高阳的脚本语言和新太脚本语言如出一辙,以高阳在金融和通信领域的实力,我断难相信,他们会失去最基本的判断力,采用这种如此原始,形同汇编的语言。

我一直坚信,写程序是一种愉悦的享受,作为语音IVR应用开发也是如此,开发者应该得到最好的工具,他们在使用高级语言的经验应该得到尊重。是什么力量能够让他们返回到汇编时代?也许是市场的力量。我只能借用三国人物的一声叹息了:

世无英雄,遂使竖子成名。

好了,看看我的具体点评吧。

(由于高阳脚本和新太脚本非常相似,以下统称为新太脚本或新太脚本语言)


一. 最低级的语言,汇编特性

让我们看看这样的代码:

[ASSIGN SR1,"I AM "]
[ASSIGN SR2,"A BOY."]
[STRCAT SR1,SR2]
[PRINTREGISTER 2] //SR1="I AM A BOY.",SR2="A BOY."

这和汇编语言有什么两样?如果采用高级语言,就是这个意思:

s = "I AM " + "A BOY";

汇编语言比较底层,编程效率较低,几乎每个操作都要借用寄存器。

用汇编语言写几十句,敲几百个字符,在高级语言里面只要一两行。

行数多了,还增加出错的概率,也增加了调试的难度。

来看看我曾经多次引用的,Ruby语言的设计者日本人Yukihiro Matsumoto的一段话:

"基于图灵机的完整性理论,每一种具备图灵完整性的语言能做的事情理论上都可以由另一种具备图灵完整性的语言所代替,只是花费的代价不同。您可以用汇编语言实现所有的功能,但是现在已经没有人再想用汇编编程序了。"

("Ruby的设计思想"-《程序员杂志》2003.12)


二. GOTO语句

任何一个学过最基础计算机理论的人都知道,GOTO语句是高级程序设计之大忌,它使程序流程任意转向,缺乏结构化。

新太和高阳的 -> 符号就是goto语句,它指向一个标号。

有 人会说,C语言甚至最新的C#也有goto语句啊,事实是,你在C、C#中不用一句goto语句也能够写出好的应用程序,在新太的脚本里面可以吗?不可 以,其 -> 无所不在。这除了和这种语言的汇编特性有关外,还和它依赖于“状态机”的实现方式有关,在本文的后续部分我还会阐述。

此外,最简单、最直观的循环,如:

for(i=0; i<10; i++) { ... }

在新太脚本语言里,也只能用 -> 来实现。


三. 冷冰冰的寄存器

在新太脚本里面,几乎每个操作都必须使用寄存器,如:SR1, SR2, SR3等等。在高级语言里面已经被变量所取代。

寄存器和变量相比较,最大的问题是寄存器没法命名,如比较:

在高级语言里面: isTimeOut = true; // 不用注释,望文即能生义

在新太脚本里面: [ASSIGN SR1,1] // 看不出含义

高下立现。

即使如此,新太的寄存器变量还是有很多限制,如数量的限制,最多只能多少个寄存器,如果构造大型项目则比较麻烦。此外,如果是字符串类型,还有长度限制,如最多只能256个字节,要拼接一个复杂查询的SQL语句就没办法了。


四. 缺乏表达能力的语法

编程序如同写文章,要是我们还用商周时代的甲骨文,凭那点可怜的词汇和语法,是无法写出结构清晰、段落分明的锦绣文章,甚至无法描述复杂的事物。

新太脚本在语法上没有任何现代高级语言的特性,比如:等号赋值,多个字符串相加,直观的循环语句、条件判断,复杂表达式,数组,形式参数等等。这种编程真是一个痛苦的体验。

新太脚本也提供了最基本的封装,比如函数,问题是其函数和我们任何高级语言的编程经验不相符,那就是没有形式参数,没有局部变量,一切都还要借助那几十个寄存器。

没有现代高级语言的结构,代码平铺直叙,显得没有层次,我看什么代码缩进,变量命名风格,在新太脚本里面完全可以不要。你需要的只是函数命名风格,标号命名风格。

正因为如此,我觉得如果单凭该脚本语言本身,试图构造大型复杂的IVR应用是困难的。如果你发现某项功能没有,往往你只能借助于所谓的外部网关,或者干脆等待新太的升级。这也是新太推出某项新的业务时,往往要扩充一批库函数的原因。


五. 状态机, 我们真的需要吗?

在某些情况下状态机是一个很好的概念,也是很简单的概念。概括地说就是把流程划分为多个状态,每个状态下将会执行某个动作(也可能是一组动作),根据该动作的结果决定流程走向下一个状态。

很显然,新太脚本的标号表示状态, 如 :label ;

而转移语句如 -> label 表示状态的迁移。动作就是其系统函数。

理论和实践都已经证明,当状态较少,或者是基于控制的系统,使用状态机比较有效,如著名的电梯控制。当状态很多,比如复杂的IVR应用,分支较多,看起来就像一团乱麻了,你数数复杂的新太脚本有多少个标号就明白了。

实际上,状态机的实现很容易,我曾经和一个业内朋友开玩笑说,我可以花1到2周写出一个新太的脚本引擎,相信有底层编程经验的朋友会同意我的看法。

这种把“状态机”呈现给用户的模式,必然陷入类似汇编语言的困境,脚本很难编写也很难阅读。如果以用户为中心的话--这里所说的用户当然是指IVR脚本的开发者,应该反过来,把复杂的东西留给平台去做,而给用户一个简单的开发环境。

状态机的实现模式还和语音板卡编程的历史有关,早期的板卡和操作系统都是基于单线程模式的,多条通道同时执行,系统在每个时刻必须记录通道的当前状态,使用状态机是合适的。

看看东进或三汇语音板卡的例子程序就明白了,都是一个个状态机。

多线程操作系统的出现,改变了这种状况,我们完全可以不用状态机的概念来实现一个语音平台,呈现给用户的脚本也可以像高级语言一样简单、明白,而且脚本可以绑定在单一的通道上。


六. 图形化, 最后一根不能救命的稻草

也许新太公司也意识到其脚本语言太低级,学习门槛较高,所以在近年也推出了所谓的图形化拖拉环境。

对于图形化拖拉环境,笔者以前曾经撰文评论,可参见:

http://www.bluespace.com.cn/koodoo/article_ctilan.htm

我现在的观点依然不变,简而言之:

  1. 1. 图形界面试图以不懂电脑的最终用户为对象,是错误的,IVR的开发者往往都是程序员;
  2. 2. 当流程复杂时,往往线如乱麻;
  3. 3. 当超过一幅图时,很难直接从图上看清楚它们之间的关系;
  4. 4. 图没有标准,各个厂家的大不相同,同样很难学习。
  5. 5. 现代的高级语言,其语法结构类似,如学习C语言的经验很容易转换到Pascal上;但图形拖拉界面则没有什么相同的经验可以借鉴。和高级语言不同,图形拖拉界面缺少坚实的理论基础;

而且,新太的图形拖拉界面仅仅是其脚本语言的图形化,基本上一个节点对应一条语句,脚本里面的goto语句就是‘->’符号变成了线条,标号变成了节点的命名,完全继承了脚本语言的弊端,前面指出的脚本语言的问题在图形拖拉界面下依然存在,甚至还多出一些问题。

实际上,我认为图形化不应该只是底层脚本语言的简单映射,只有业务的抽象和图形化才有意义,类似工作流,每个节点应该完成一个封装的业务,很遗憾,现在没有厂家提供这样的产品。(这个想法还不是很成熟,也许我应该实践一下,做出这样的产品,呵呵。:) )

当然,国内企业市场推广的能力是很强大的,强大的营销能力也许能够一时掩盖技术的不足。问题是,重营销而轻研发,怎么能够长久?


bluesen 2005.1.8 于深圳

分享到:
评论
1 楼 zhongaili520 2010-08-21  
有没有ivr的例子

相关推荐

    在用2025年mac M3pro 芯片 安装iNode mac版

    在用2025年mac M3pro 芯片 安装iNode mac版

    纯电动汽车整车Matlab Simulink仿真模型:包含电机、电池等五大模块及整车动力学仿真参数可直接运行分析,纯电动汽车整车Matlab simulink仿真模型(电机模型、电池模型、变速器模型、

    纯电动汽车整车Matlab Simulink仿真模型:包含电机、电池等五大模块及整车动力学仿真参数可直接运行分析,纯电动汽车整车Matlab simulink仿真模型(电机模型、电池模型、变速器模型、驾驶员模型、整车动力学模型) ——整车总成参数都有,可直接运行仿真 ,核心关键词: 纯电动汽车; Matlab simulink仿真模型; 电机模型; 电池模型; 变速器模型; 驾驶员模型; 整车动力学模型; 整车总成参数; 可直接运行仿真。,"纯电动整车Matlab Simulink仿真模型:多模块协同仿真系统"

    利用新算法PD(Possibility-Driven)的近场动力学模型:三维复杂裂纹扩展的精确模拟,用新算法pd 近场动力学模拟三维复杂裂纹扩展 ,核心关键词:新算法; 近场动力学; 三维复杂裂纹扩展

    利用新算法PD(Possibility-Driven)的近场动力学模型:三维复杂裂纹扩展的精确模拟,用新算法pd 近场动力学模拟三维复杂裂纹扩展 ,核心关键词:新算法; 近场动力学; 三维复杂裂纹扩展; 模拟; 扩展分析。,"利用新型PD算法模拟三维复杂裂纹扩展的近场动力学分析"

    拉盖尔高斯光束透射石英基底石墨烯涂层的光强分布特性研究:深入探索与实验分析,文章复现:拉盖尔高斯光束入射石英基底石墨烯涂层的透射光强分布特性研究 ,关键词:拉盖尔高斯光束;石英基底;石墨烯涂层;透射光

    拉盖尔高斯光束透射石英基底石墨烯涂层的光强分布特性研究:深入探索与实验分析,文章复现:拉盖尔高斯光束入射石英基底石墨烯涂层的透射光强分布特性研究 ,关键词:拉盖尔高斯光束;石英基底;石墨烯涂层;透射光强分布特性;研究。,"石英基底石墨烯涂层下,拉盖尔高斯光束透射光强分布特性研究"

    最新版仿天涯论坛系统源码带后台

    亲测正常使用版,代码精简,压缩包也小,程序运行速度更快,效率更高,服务器抗攻击能力更强 功能方面: 仿天涯论坛模板的免费论坛系统在功能方面也很强大!程序本身包含一个PC版网站和一个手机版网站 支持打包APP安装包,开放式PHP原生态模板在线编译,音频视频发布直接生成HTML5代码,能够适应各种界面浏览器

    【预定SCI2区】基于matlab鸽群算法PIO-BiTCN-BiGRU-Attention风电预测【含Malab源码 11049期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:Main .m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开除Main.m的其他m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于遗传算法的多无人机协同任务分配优化:寻找代价函数最小值方案,综合考虑航程与消耗时间,-基于遗传算法的多无人机协同任务分配 - 种群中的每一个个体代表一次完整的任务分配方案,模型目标是找到代价函数的

    基于遗传算法的多无人机协同任务分配优化:寻找代价函数最小值方案,综合考虑航程与消耗时间,-基于遗传算法的多无人机协同任务分配 - 种群中的每一个个体代表一次完整的任务分配方案,模型目标是找到代价函数的最小值,当作任务分配的最终方案 - 任务的代价评估分为两部分:无人机的总航程和消耗的总时间,分别设置了不同权重 ,基于遗传算法;多无人机协同任务分配;个体代表任务分配方案;模型目标为最小代价函数;代价评估包括总航程与总时间;不同权重设置。,基于遗传算法的无人机任务分配优化:寻找最小代价函数的最优解

    C#设计案例,餐饮管理

    ===下载后有不懂的可以私信我。==== 在本"C#设计案例,餐饮管理"项目中,我们探讨的是使用C#编程语言开发一套餐饮管理系统的过程。这个系统旨在帮助餐饮业者更好地管理和优化他们的日常运营,包括但不限于点餐、结账、库存管理和员工排班等核心功能。作为初学者,这是一个很好的实践平台,可以提升对C#语言的理解以及软件工程的实践经验。 让我们从C#语言的基础开始。C#是一种面向对象的编程语言,由微软公司开发,广泛应用于Windows平台和.NET框架。它支持类、接口、继承、多态等面向对象特性,还引入了匿名方法、lambda表达式、LINQ(Language Integrated Query)等高级特性,使得代码更加简洁高效。 在这个餐饮管理系统中,我们需要设计几个关键的类来代表不同的实体,例如“菜品”类、“订单”类、“顾客”类等。这些类将包含各自相关的属性和方法。例如,“菜品”类可能有名称、价格、库存量等属性,而“订单”类则需要处理下单、修改、取消等操作。在实现这些类时,我们可以利用C#的封装、继承和多态性来提高代码的可读性和可维护性。 接着,我们将涉及数据库的交互。餐饮管理系统通常需要存储大量的菜品信息、订单记录、会员数据等,这需要我们使用数据库技术。C#可以借助ADO.NET库与SQL Server或其他关系型数据库进行通信。通过创建数据连接、执行SQL语句和填充数据集,我们可以实现数据的增删改查操作。 此外,界面设计也是系统的重要组成部分。在Windows Forms或WPF框架下,我们可以使用C#构建用户友好的图形界面。这包括菜单、按钮、文本框等控件,以及事件处理机制,如点击按钮触发的函数调用。通过UI设计,用户可以直观地查看菜单、下单和查看订单状态。 在库存管理方面,我们需要实现库存预警功能,当某菜品库存低于预设值时自动提醒。这涉及到定时任务和后台服务的开发,C#提供了Task或者计划任务(Scheduled Tasks)来实现这一需求。 至于员工排班,可以设计一个排班模块,允许管理者根据员工的工作时间、技能和休假情况进行智能排班。这里可能需要用到算法,如贪心算法或优先队列,来优化排班效率。 为了保证系统的稳定性和安全性,我们需要考虑异常处理、日志记录和权限控制。C#的try-catch语句用于捕获并处理运行时错误,而日志记录则可以帮助追踪和诊断问题。权限控制确保只有授权的用户才能访问特定功能。 这个C#餐饮管理系统案例涵盖了面向对象编程、数据库操作、UI设计、算法应用等多个方面,对于初学者来说,这是一个全面了解和掌握C#编程技能的好机会。通过实际项目的学习和实践,不仅可以提升技术能力,还能锻炼解决问题和团队协作的能力。。内容来源于网络分享,如有侵权请联系我删除。

    "MATLAB Simulink仿真实现风力发电直驱永磁同步风机最大功率跟踪与转速电流双闭环控制并入电网技术实践",MATLAB Simulink仿真可运行,风力发电,直驱永磁同步风机,最大功率跟踪

    "MATLAB Simulink仿真实现风力发电直驱永磁同步风机最大功率跟踪与转速电流双闭环控制并入电网技术实践",MATLAB Simulink仿真可运行,风力发电,直驱永磁同步风机,最大功率跟踪,转速电流双闭环,风力发电并网 可保证能运行再电子资料,恕不 ,核心关键词:MATLAB Simulink仿真; 风力发电; 直驱永磁同步风机; 最大功率跟踪; 转速电流双闭环; 风力发电并网; 可运行电子资料。,MATLAB Simulink仿真:直驱永磁风力发电系统MPPT与双闭环控制并网研究

    基于springboot的校园疫情防控系统lw+ppt

    包含项目论文和毕业答辩PPT,详情请看博客:https://blog.csdn.net/2401_87429224/article/details/145230915 论文主要包括以下内容: 1、中英文摘要; 2、目录; 3、绪论,包括背景、意义、开发工具、国内外现状等; 4、系统分析,包括可行性分析、设计原则、需求分析、业务流程分析等; 5、系统设计,包括功能设计、数据库设计等; 6、系统实现,包括各模块实现; 7、软件测试,包括测试环境、测试条件、运行情况等。

    日常答题获得奖励页面HTML源码.zip

    日常答题赢奖励单页HTML源码,可自定义设置奖品等等,若对方答对则弹出奖品(可自行修改) 文章:https://blog.csdn.net/huayula/article/details/145230157

    全新phpenc代码加密系统源码 PHP代码加密程序源码

    全新phpenc代码加密系统源码 PHP代码加密程序源码 这是一款开源免费扩展加密程序,类似于SG11加密,支持单个PHP(免费)文件以及批量PHP文件(ZIP压缩包格式)源码加密的保护平台,加密后的源码文件保持原有代码结构,可以跨平台运行,可以运行于所有PHP环境下,支持PHP5.6-8.0版本。加密后不支持解密服务,建议在加密之前备份原有PHP文件。 安装教程:PHP版本(php5.6-7.3)

    高海拔输油管道气保护药芯焊丝半自动焊工艺研究与应用.pdf

    高海拔输油管道气保护药芯焊丝半自动焊工艺研究与应用.pdf

    Java毕业设计-springboot-vue-墙绘产品展示交易平台(源码+sql脚本+29页零基础部署图文详解+31页论文+环境工具+教程+视频+模板).zip

    资源说明: 1:csdn平台资源详情页的文档预览若发现'异常',属平台多文档切片混合解析和叠加展示风格,请放心使用。 2:29页图文详解文档(从零开始项目全套环境工具安装搭建调试运行部署,保姆级图文详解),旨在为更多的人甚至零基础的人也能运行、使用和学习。 3:配套毕业论文,万字长文,word文档,支持二次编辑。 4:范例参考答辩ppt,pptx格式,支持二次编辑。 5:工具环境、ppt参考模板、相关电子教程、视频教学资源分享。 6:资源项目源码均已通过严格测试验证,保证能够正常运行,本项目仅用作交流学习参考,请切勿用于商业用途。 7:项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通。 内容概要: 本系统基于 B/S 网络结构,在 IDEA 中开发。服务端用 Java 并借 Spring Boot 框架搭建后台。前台采用支持 HTML5 的 VUE 框架。用 MySQL 存储数据,可靠性强。 能学到什么: 使用Spring Boot搭建后台。VUE 框架构建前端交互界面、前后端数据交互、MySQL管理数据、从零开始环境搭建、调试、运行、打包、部署流程。

    滚动轴承与转子8自由度系统动力学模型:求解收敛性分析及其在不同参数变化下的动力学响应差异参考例证 ,滚动轴承–转子8自由度系统动力学模型,求解收敛,可作为相关模型参考的例子,可分析不同参数变化下动力学

    滚动轴承与转子8自由度系统动力学模型:求解收敛性分析及其在不同参数变化下的动力学响应差异参考例证。,滚动轴承–转子8自由度系统动力学模型,求解收敛,可作为相关模型参考的例子,可分析不同参数变化下动力学响应差别 ,核心关键词:滚动轴承; 转子8自由度系统动力学模型; 求解收敛; 参数变化; 动力学响应差别; 参考例子; 分析。,滚动轴承转子系统8自由度动力学模型:求解收敛与参数响应分析参考例子

    2025年辐射安全与防护培训考试题库(附答案).docx

    2025年辐射安全与防护培训考试题库(附答案).docx

    直流电机双闭环调速系统仿真模型:附参数计算与PI参数整定教程,实现无静差跟踪控制,直流电机双闭环调速系统仿真模型 1.附带仿真模型参数计算配套文档 2.附带转速外环、电流内环PI参数整定配套文档 功能

    直流电机双闭环调速系统仿真模型:附参数计算与PI参数整定教程,实现无静差跟踪控制,直流电机双闭环调速系统仿真模型 1.附带仿真模型参数计算配套文档 2.附带转速外环、电流内环PI参数整定配套文档 功能:双闭环采用转速外环、电流内环,其中PI参数在报告里面有详细的整定教程,可以实现无静差跟踪 ,直流电机双闭环调速系统仿真模型; 仿真模型参数计算; 转速外环、电流内环PI参数整定; 无静差跟踪。,"双闭环调速系统仿真模型:参数计算与PI整定教程"

    基于springboot的实验室管理系统lw+ppt

    包含项目论文和毕业答辩PPT,详情请看博客: 论文主要包括以下内容: 1、中英文摘要; 2、目录; 3、绪论,包括背景、意义、开发工具、国内外现状等; 4、系统分析,包括可行性分析、设计原则、需求分析、业务流程分析等; 5、系统设计,包括功能设计、数据库设计等; 6、系统实现,包括各模块实现; 7、软件测试,包括测试环境、测试条件、运行情况等。

    三相PWM整流器闭环仿真:电压电流双闭环控制及Matlab Simulink模型实现,三相PWM整流器 三相PWM整流器闭环仿真,电压电流双闭环控制,输出直流电压做外环 模型中包含主电路,坐标变,电压

    三相PWM整流器闭环仿真:电压电流双闭环控制及Matlab Simulink模型实现,三相PWM整流器 三相PWM整流器闭环仿真,电压电流双闭环控制,输出直流电压做外环 模型中包含主电路,坐标变,电压电流双环PI控制器,PWM发生器 matlab simulink模型 ,三相PWM整流器; 闭环仿真; 电压电流双闭环控制; PI控制器; PWM发生器; MATLAB Simulink模型。,"三相PWM整流器:电压电流双闭环PI控制与Matlab Simulink模型仿真"

    《已调试》springboot SSM 宠物医院管理系统(源码+论文).zip

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。

Global site tag (gtag.js) - Google Analytics