首页>>>技术>>>cti平台
 
Dialogic® NetMerge™ CT应用开发环境的概念和功能
 

介绍
计算机电话系统
Dialogic® NetMerge™ CT应用开发环境
应用环境语言(ADL)
应用开发ActiveX对象(ADX)
新的方向

介绍

  本文可以帮助用户了解Dialogic® NetMerge™ CT应用开发环境(CT ADE)对于项目开发的价值,可以为用户提供以下有价值的帮助如果用户:

  • 通常是在C/C++中使用硬件API编写电话应用
  • 使用过Dialogic早期产品:VOS和CallSuite
  • 曾经使用过其他应用开发工具
  • 刚刚开始进行电话应用开发

计算机电话应用

  开始之前,我们应该考虑一下,我们打算使用这种技术做什么,以何种方式应用这种技术。
  我们的应用需要能够:

  • 检测和应答到达的呼叫
  • 进行呼出呼叫并且检测结果(忙,无应答,语音应答,机器应答等等)
  • 与呼叫方交互(向呼叫方播放语音,来子呼叫者的信号音和语音)
  • 与呼叫方交换数据(从数据库中读写数据)
  • 控制呼叫(会议,拆线,转接,保持,重试)

  这些基本的操作应该能够在下列环境中执行:

  • 多种协议的网络中(环路启动,T-1/E-1 CAS, ISDN, IP),网络协议随国家而改变
  • 多种尺寸的设备中(一个机箱2个模拟端口,一个机箱500个端口,多个协作的机箱)
  • 多种操作系统控制下(Windows, Linux, Unix)
  • 与系统管理监控器和管理器相连接

  最后,所有的这些任务都要和商业逻辑协调工作,输入分析,控制操作,和输出。
  创建这种应用的可选项有:

  • 软件包-如果您的应用执行相当普通的操作,您会发现完软件包可以按照您的意愿完成90%的操作,最后可以通过配置和定制满足最后10%。语音邮件和交互式语音应答(IVR)系统是此类一种普遍的应用。

  • 结构-能够为您的商业逻辑提供电话容器的解决方案较少,呼叫控制,呼叫监控,呼叫管理组件提供了一个灵活的结构,可以将应用工作加入其中。这种应用范围可以从脚本语言到拖拉函数组件。

  • 对象库-电话处理函数能够以类对象的方式发布,可以应用在C++, Delphi, Java等非电话处理语言中,开发者可以使用能够调用库函数的标准语言进行设计商业逻辑和应用,对象和结构有时可以指中间件。

  • 控制API-这是设备制造商提供的接口,用来控制硬件。它依赖于不同的操作系统,这样应用程序员不仅要处理商业逻辑和程序设计,而且还要处理句柄、事件、状态、以及电话硬件设备的封装接口。

  • 话音API-除了硬件接口以外,也有一些控制API用于其他技术,如语音合成,语音识别,而且也可以直接控制,通常是在C/C++中,或者在高层语言、库和程序包中抽象成服务函数。

  那一种最好?答案不仅依赖于应用和可用产品,还依赖于您的公司和部门的开支和任务。区分这些可选方法的问题包括:

  • 软件包-如果软件包涵盖了您所需要的所有功能,可以采用一个基本解决方案快速。如果不是这样,定义和扩展所要开发的系统将非常困难,这取决于系统设计是否容易改变。性能和可扩展性是一个普遍的问题,购买之前必须予以考虑。

  • 结构-这些结构将会有不同的形式,当不是所有的结构都符合您的应用目标时,这些形式具有或多或少的灵活性,然而这些对于大多数的电话应用来说,可以简化应用程序的编程,一些产品不需要提供硬件的不常用操作的功能。像软件包一样,性能很重要,这依赖于解决方案的通用型和设计中的优化程度。

  • 对象库-由于这些对象很少会针对某一应用,这些组件比软件包和结构更加灵活。通过特定接口抽象成通用形式,易于在类似的技术中进行移植(像针对自动语音识别(ASR),ISDN和CAS网络协议,或者DM/IP板卡和IP连接主媒体处理等等的SpeechWorks, Nuance)。

  • 控制API-这些肯定是控制硬件或者语音引擎的最全面的工具,选择是根据必须精确管理的详细程度。需要考虑培训成本和该选择的实现,这不仅是针对应用的初级版本,而且还要针对底层技术的可改变性。

Dialogic® NetMerge™ CT应用开发环境

  Dialogic提供了三种上述可选的清单:

  • 一个控制功能的C/C++ API(R4)
  • 一个电话结构
  • 一个对象库

  后两项打包成Dialogic® NetMerge™ CT应用开发环境(CT ADE),(关于R4的一些更多的信息,请参见http://www.Dialogic.com/)。

  本文后面的部分描述这两个CT ADE编程平台的概念和功能:

  • 应用开发语言(ADL)-一种过程语言,拥有可选的图形接口,集成了多种电话应用构建模块。
  • 应用开发ActiveX对象(ADX)-一个具有COM接口的方法库,可以集成到Windows下的开发语言中,如C++, Visual Basic, Delphi,以及.NET语言C#和VB.NET等。

  这两个平台的核心是资源管理器,是执行所有电话交互基本代码的基本代码。

  资源管理器

  资源管理器的核心组件是介于您的编程命令(如ADX中的Play,ADL中的MediaPlay)和底层设备API之间的中间层代码。例如:如果您需要激活ADL函数TrunkAnswerCall,资源管理器可以决定:

  • 使用哪一个中继接口
  • 进行此呼叫是否合法(有呼叫信号吗?)
  • 使用哪一个API函数:dx_sethook(R4 analog), ccAnswer(R4 PRI),gc_Anser_AnswerCall(R4 Global Call)等等。

  为了能得到设备抽象,我们需要定义设备和所有的设备特征。

  资源

  资源管理器是围绕着资源的概念构建的,技术上,一个资源可以产生或者处理一个语音流,资源可以分成以下几类:

  • 中继接口
  • 媒体(播放器/记录器)
  • 传真(发送机/接收机)
  • 文字到语音转换(TTS)
  • 语音识别
  • 会议
  • 一些可以帮助了解这些信息的示例

  首先考虑一个具有4信道的Dialogic® Dialogic™ D4PCI话音处理板卡,从资源管理器中可以看到一个信道具有两个资源:中继资源和媒体资源。中继资源对应电话线连接器,媒体资源对应可以播放和记录声音文件的VOX设备。

  通道管理两个语音流,呼叫方话音(同样包括拨号音和其他音频)按照下列路径处理:
  呼叫方→模拟电话线→中继资源→媒体设备(VOX/Wave记录器)

  在另一个方向,音频流在VOX/Wave记录器产生,通过中继接口发送给电话线路:
  媒体资源(VOX/Wave记录器)→中继资源→模拟电话线→呼叫方

  正如这个例子所示,语音流从一个资源输出有时可以作为另一资源的输入,对于D4PCI卡,媒体和中继设备是硬件,可以实现从一个输出而输入到另外一个资源,反之一样。对于高端设备,可以控制这种传输的路由(例如,SC和CT总线上的设备)。

  另外一个例子,考虑Dialogic® Dialogic™ D4JCTLS融合通信卡,该卡具有4个中继接口(称为LSI设备)和4个播放器/记录器(VOX设备),资源管理器认为LSI是一个中继资源,一个VOX是一个媒体资源。从资源管理器的角度看,该卡和D4PCI相似,主要不同是可以通过CT总线改变路由资源。

  一个T-1 PRI ISDN接口卡,如Dialogic® Dialogic™ DTI240SC卡,可以被资源管理器作为23个中继资源,每一个都各作为话音(B)信道。换句话说,一个中继资源对应一个T-1时隙。在ISDN电路上的其他信令(数据、D)信道不作为资源管理器的资源(它不处理任何话音)。在大多数情况下,D信道的存在和管理对于资源管理器的用户是隐藏的。例如:如果一个T-1缓存一个LOS状态(信号丢失,D信道故障),则用于B信道传输的23个资源管理器中继资源的每一个都转为网络故障状态(后面会有更多的资源状态介绍)。如果一个B信道需要发起呼叫,此呼叫需要向D信道发送数据包,资源管理器可以像普通模拟中继中发起呼叫类似一样,通过DTMF拨号发起呼叫。

  资源状态将底层的技术事件和命令结果集合到操作资源状态中。大多数情况下,您在编写应用时不用分析这些状态变化,然而,如果需要分析,这些逻辑呼叫处理可以给出一些意想不到的状态。

  资源状态

  对于每一个资源(中继、媒体、传真、TTS、语音识别、会议),资源管理器预定义了一些状态,例如,一个中继资源可以震铃响应或者断开,一个媒体资源可以播放和记录。

  一个资源状态可以在两种方法下改变:主动请求(外部事件的结果),或者资源管理器函数调用的结果。

  一个主动请求状态改变的例子是一个中继资源在有呼叫呼入时从空闲转换到振铃状态。

  一个函数调用的状态改变的例子是通过函数调用,可以使空闲的媒体资源转到播放状态,来响应一个播放命令。

  能够执行改变资源管理器资源状态的函数被称为命令。例如,ADL函数MediaPlay以及ADX方法PlayWave都调用了资源管理器的命令。

  资源管理器严格遵守了如下规则:

  • 每条命令都有一套指定的状态,这些状态可以合法的执行命令。通常情况下,资源都是处于空闲状态,如此命令才能够合法执行。同时对于大多数命令来说,每条命令只能在一种状态下执行(there is only one state in which the command can be issued.)。但对于Abort和Reset命令来说,却是例外的。
  • 如果命令执行失败,资源的状态不会改变。
  • 如果命令执行成功,资源的状态马上就会改变。对每一个命令,该状态都是确定的,因此一旦命令执行成功,应用程序便无需检查资源是否进入给定的那个状态。例如,如果Play函数没有报错,资源肯定已经进入播放状态。

  每个资源都是以初始状态开始的。ADL和ADX的这种状态对于用户来说通常是不可见的,因此用户通常无法在这种环境下找到资源。当设备初始化完毕时,它进入空闲状态然后开始准备接收命令。

  对于所有类型的资源管理器资源来说,这些状态和命令都是通用的:

  • 初始状态
  • 空闲状态
  • 复位命令
  • 复位状态
  • 退出命令
  • 退出状态

  需要注意的是,资源管理器所定义的空闲不同于底层API所定义的"空闲"状态。例如,在R4 API中,当LSI设备不再进行处理工作或者摘机时,就会被认为是空闲状态。如果与之相连的VOX设备正在播放或者录音,那么则会被认为处于"繁忙"状态。R4 API无法跟踪呼叫的逻辑状态(是连接状态还是断开状态),除非通过间接的途径比如检测当前挂钩开关的状态,以及检测线路中是否有环路电流。这种方法并不十分可靠,因为即使呼叫没有断开,也有可能在线路中存在短时间的脉冲电流。相反,在资源管理器中,空闲状态意味着肯定没有呼叫处理。一个呼叫会将继电器资源置于连接状态。

  简表


  资源管理器简表是一个和Windows注册表很类似的数据库。简表中存储了如下的信息:

  • 按照资源扫描器的扫描结果记录了所安装硬件设备的详细信息。(如下有具体描述)
  • 用户自定义的硬件配置信息,该信息是资源扫描器所无法检测出来的
  • 用户自定义的选项,诸如缺省的话音语言(英语、西班牙语等等)

  正在运行的应用程序(ADL和ADX)只能读取简表,而且必须在这些应用程序运行之前初始化完毕。

  简表中不存储动态改变的信息,比如当前设备状态等。

  简表中的表项都有名称和数值。表项的名称类似于文件系统的路径名。所有的名称都是从根开始,用反斜线(\)标明。例如,资源管理器内部所常用的一个简表表项是:
     \TechCount=4

  TechCount的数值就是这台PC上所安装的不同的资源管理技术的数目(一项技术就是一个特定的硬件和API的组合,比如R4 VOX)。

  简表无法存储数值的名称。所有数值名称实际上都是以整数形存储的。用于数值名称的整数数组是预先定义好的。为了方便用户的阅读,系统提供了可显示字符串的窗口,资源管理的功能就是将内部存储的整数数值转换成可以在窗口中显示的字符串,或者反之。这样作可以应用更加高效的查询算法,因此在资源管理器应用程序运行之后就可以更快的访问简表。用来代表数值名称的整数值有时被称为RegIDs(注册标识),这是因为内部的资源管理代码是将简表看作是注册表。

  和Windows注册表不同,用户应用程序代码无法直接访问简表,并且无法建立新的表项名称。简表只是供资源管理器内部使用的。

  资源扫描器

  检测已经安装的硬件以及驱动器的配置信息通常是很重要又很复杂的任务。传统的API具有独特的不等的功能用来查询已经安装的配置信息。通常,重要的信息是无法取得的。

  在资源管理器简表中建立硬件/驱动器配置数据库需要两个步骤:

  • 首先运行资源扫描器,它会从可用的设备API中提取所有可用的配置信息。硬件或者驱动器配置一旦改变,就需要重新运行资源扫描器。

  • 第二步是"人工的"升级简表。这一步是增加无法自动加入的配置信息,因此必须由用户进行处理。例如,对于一个E-1/R2中继器,用户必须指定用于R2协议的参数,这个参数是根据国家不同而不同的。对于模拟中继器,用户必须判断呼叫方ID是否可用。对于T-1 CAS中继器,用户必须指定需要使用哪种全程呼叫协议来为PBX或者CO交换提供接口。

  在运行时建立设备扫描步骤有些困难:

  • 扫描需要花费很多时间,这会减慢应用程序启动的速度。在需要的时候才启动资源扫描器,可以使应用程序启动得更快。

  • 新版本的硬件通常会和老的API不相兼容,或者会引入新的用于配置信息的API。通过将扫描代码和运行代码进行分离,我们便可以更加容易的建立可以适应最新软件版本的扫描器。

  特定技术接入(Technology-Specific Access)

  资源管理器建立了一种较高层次的抽象,这样应用程序的编程就可以做到对API的透明性(比如相同的一套功能可以工作在所有支持电话的API上,也可以工作在支持各种继电器的API之上)。只有应用一些特定的技术才可以使用一些不常用的API。对于这样的情况,可以通过指令或者数据识别符(RegIDs)以及命令来执行指令或者访问数据(比如,GetInt[get integer value]以及SetInt[set integer value]或者布尔形以及字符串形的副本(counterparts for Boolean and string values)的方法来调用层次较低的API。

  对于电话硬件编程来说,这些功能通常是不需要的,但是对于更多高级的操作却是可用的。该功能按照如下的描述直接转换成硬件API功能的执行。

  举例:为传真操作建立重试策略:
  SetInt R4GrtFaxRetryStrategy
  利用这个REGID来建立
  m_gfqRecord.retry_strategy API 单元

  举例:在DCB会议设备上建立数字检测功能:
  SetInt R4DcbConfEnableDigitDetection
  利用这个REGID来直接访问
  dcb_setdigitmsk(handle, Confld, Value, CBA_SETMSK)API函数来实现数字检测功能。

  举例:利用Global Call为数字中继器建立设备模板( device mask):
  SetInt R4GcEnableMask
  利用这个REGID可以直接访问带有GCACT_ADDMSK参数的gc_SetEvtMsk API函数。

  对于电话设备有300多个这样的指定技术接入函数,对于TTS、语音识别以及声音媒体特性则有更多这样的函数。任何没有被抽象倒高层API的电话操作都可以通过直接调用函数得以实现。

  除此以外,硬件参数可以在启动的时候设定。这就可以执行板卡级API呼叫。这些操作所得到的结果都会被记录到实时的记录文件中,来帮助解决配置过程中所遇到的困难。

应用程序开发语言(ADL)

  除了控制电话设备之外,计算机电话(CT)程序面临着更多的挑战。

  • 多路呼叫必须一次完成。需要多任务处理的结构
  • 每个呼叫可能需要不同的对话以及工作结果。需要呼叫时的程序选择功能。
    通常程序都会运行几天或者几个星期。因此设计必须是健壮的(高效的错误恢复,以及高密度资源)
  • 硬件和软件的安装通常都是在远程进行的,因此手持操作并不是永久的解决方案。
  • 电话呼叫过程是一种实时性的活动,因此就需要实时的错误处理工具。
  • Dialogic已经实现了这些需求,在其指定电话语言,ADL,中有更多的描述。接下来的这部分解释了支持复杂编程环境的一些可用的功能。


图1 在配置中为每一个中继(信道)指定相同或者不同的任务

  任务管理器

  ADL支持多任务环境,也就是说两个或者更多的任务可以同时执行。即使多个任务运行同一个应用程序,每个任务也都有其自己的变量和数组的拷贝,同时拥有独立的执行路径。在多任务处理环境中,各个任务的执行是彼此独立的。然而有些时候需要这些任务之间进行合作或者相互交换信息。这可以通过信号标识、消息以及全局变量来实现。

  任务/中继的配置

  中继配置程序允许用户指定程序的哪一个功能来使用系统的中继线路。当一个运行ADL项目时,中继配置决定了应该启动哪一个应用程序。
用户可以为项目中的任何一个应用程序分配一个中继资源或者多个中继资源。也可以根据从那些呼叫线路受到的ANI或者DNIS信息来决定应该为程序分配哪种资源。

  静态数据

  ADL中的数据区在编译的时候是固定的。每个变量的起始位置在程序的数据区中都是固定的。这样可以在执行指令的时候,使ADL更加高效的定位数据。缺省情况下,ADL不会动态分配内存。这就不需要使用垃圾收集程序,同时也避免了资源的泄漏。

  TCP/IP以及DCOM通讯

  利用TCP/IP或者DCOM通讯程序,ADL可以和在本地或者广域网上的其他应用程序交换信息和数据。这些工具实现了对任务、网络状态以及程序进程的远程监控。
同时,ADL包含了Windows 服务的特性,这种特性方便了远程无人监守系统的修复。


图2 Windows服务安装和控制流程

  符号形式的实时调试

  不同的问题需要不同的解决方法。对于定位设计差错的问题,ADL提供了符号形式的调试器。这些差错是指控制流并不是按照我们的设计进行的。一个指令接着一个指令运行、检测变量内容以及设定断点-如今所有通用而又先进的调试技术都集成到了该开发环境中。


图3 在一个任务中利用符号调试器设置断点

  例如需要检测昨天造成呼叫方在3a.m.挂机时所发生的事情,ADL会记录一份实时的日志,该日志包含了在执行操作期间每一个动作详细的步骤,也包含了总结性的信息。ADL、资源管理器以及R4的事件、状态和运行结果都可以在1/100秒内被捕捉下来。


图4 运行时的日志文件显示按照时间的事件

  ◎ 过程编程

  ADL语言也有函数和变量,和C或Basic差不多。

     

  图5: ADL程序等待一个呼叫,应答它,播放提示,从呼叫方得到DTMF切入,最后播放基于数字集合的说明文件。

  ◎ 图形编程

  ADL流程图是ADL Studio的一个组成部分,它是一个绘图工具,可以帮助你创建并编辑电话应用。你无需编写代码,只用在图中插入模块,就可在流程图中画出应用。

  图6: 流程图中的功能块定义了在什么条件下什么序列下应该执行什么样的动作。
  那些模块是预先定义的ADL库函数,使用参数(argument)作为模块的属性。

  图7: 特性对话框,用于为PlayPrimpt功能块设置提示名称和终端数字

  ◎ 性能和密度

  为了要达到API透明性的目标,CT ADE加入了一个资源管理层,这样不可避免的会引入一些开销。但是,通过最优化程序设计,可以使所费开销最小化。但现在,最有意义的是,应该关注的是应用如何管理多条通道--而不是它处理单独一条指令流的速度有多快。

  在任何应用中,根据程序设计,CPU的使用情况有所不同:

  在多个可执行程序(一个应用一个通道)情况下--CPU的开销最大,因为在请求或者为每个电话状态变化服务时,窗口必须从一个进程(程序)切换到另一个去。

  在多线程(一个进程中的每个线程各有一个通道)--这种设计下,CPU的性能会好些,但是仍然需要操作系统切换线程以管理通道,

  单线程状态机(一个线程使用所有通道)--状态的变化会即时通知线程,直接进行处理,无需询问操作系统。当前通道的数据会被保存下来,并获取下一通道的状态数据,继续处理。

  但是,CPU使用效率越高,设计和实现起来就越困难。要想创建一个完整、健壮、灵活的状态机,需要多年的努力。这也就是Dialogic提供ADL的原因,它的状态机执行可以控制单线程的几百条通道。

  ◎ Dialogic标准结果

  表1列出了一些实验室测试和现场测试的实际性能结果。

表1 : Dialogic标准结果

  这个测试中,只使用了可用的CPU时钟周期的15%,就处理了所有的API呼叫、操作事件以及状态转换的管理。CPU的其余空闲可以用来处理其它的应用如业务逻辑或者语音合成或语音识别。

  用户ADL应用

  表2中的现实结果显示了ADL应用的能力,该应用集成了重要的业务功能。还有,如果这些应用比你计划创建的应用简单的话,也并非是由于限制每块主板的密度的电话提取工作的影响。

表2: 没有商业功能集成的ADL应用的性能

  VOS移植

  ADL是VOS(语音操作系统)从Parity软件(Software)派生出来的。ADL将全新的一套资源管理功能引入到了VOS中。旧的功能(sc_ ,DTI_, GC_…),可以当作是VOS遗留的功能,仍继续可以使用,这样就提供了后向兼容性。然而,对于新的工程来说,我们将强力推荐使用资源管理API。

应用开发ActiveX对象(ADX)

  组件对象模型(COM)的控制,也指ActiveX对象的控制,包括了一些很有用的服务,可以将多个组件合成一个大的应用。将复杂系统功能分解到面向业务的应用中去,这种方法现在很常见,尤其是那些喜欢使用VB或Delphi的图形化编程环境的开发者,常用这种方法。

  上文中提到的资源管理器提供的所有电话服务,都是被封装在构建模块中的,这些模块在开发时可以看到它们的功能性(方法、参数、变量),要在操作系统上注册功能性,在执行时还要创建必要的对象。

图8: 使用SDX语音方法PlayDate的VB编程,该方法提示基于COM标准的变量。

  整套控件叫做ADX,包括:

  • 语音--模拟、数字、IP和HMP呼叫控制平台
  • 传真--CP、VFX以及DM3硬件
  • 会议--MSI、DCB以及DM3硬件
  • 文本转语音--可以使用 SpeechWorks* Speechify*, Nuance Vocalizer*, L&H Real Speak*, 和 SAPI-compliant 产品
  • 自动语音识别--支持SpeechWorks, Nuance,Philips, 以及 Microsoft的产品。
  • 网络集线器--使用TCP/IP和DCOM实现线程间或进程间的数据交换。

  编程环境

  所有支持COM控件的环境也都支持ADX对象。Dialogic用的测试语言包括了C++、VB、Delphi、C#以及 VB.NET。现场测试的报告显示,ADE控件也可成功的应用于JavaScript*网页、Visual FoxPro*以及PowerBuilder*。还有第三方产品可以利用其它语音如Java*使用COM控件。

  性能和密度

  早期的COM对象是用微软基类(MFC,Microsoft Foundation Classes)来写的。这些类是为可视化对象设计的,可以广泛支持用户界面对话框和文档处理。用MFC来编写COM程序,会使得代码冗余,COM组件会有不必要的巨大开销。Dialogic的ADE对象使用了活动模板库(Active Template Library)用以取代MFC。ATL是专为COM开发设计的,可以是开发出的COM构件脚本小而效率高。

  采用与使用ADL时一样的基准来设计和配置,一个使用ADX语音控制的C++多线程程序,其CPU的利用率为ADL的2倍,但是仍有70%可以给数据和其它逻辑处理使用。如果使用一个双处理器CPU的话,这些单板的性能还会提高。

表3: Dialogic标准结果

  CallSuile移植

  ADX是从Parity软件的CallSuite控件的派生:VoiceBocx*、FaxBocx*、SwitchBocx*、ChatterBocx*、 MatchBocx*以及 NetHub*。虽然在8.3版当中,字面上名字有了些变化,但是控件的名字以及他们的接口特征都是不变的。

新的方向

  Dialogic还可以为广大的CT开发者作些什么呢?以下是一些Dialogic正在考虑的问题:

  • 语音XML/SALT--自动语音服务使用这些标记语言,可以更好地加强电话和网络服务间的关系。你怎样创建可视的站点,你就可以用同样的技术创建语音服务。从Dialogic的角度来看现在的VoiceXML平台,现在对于Dialogic来说,仍是一片待开发的处女地。可以到http://www.Dialogic.com/查阅Dialogic与Microsoft联手执行SALT的相关情况。或者到http://www.microsoft.com去查阅"Microsoft .NET 语音技术"。

  • 视窗库(非COM)--虽然Dialogic开发出了最具效率的COM对象,但还是可能会有一些程序设计和主机语言用C++电话类库来支持效果更好。

  • Linux*--资源管理器、电话类以及ADL框架的优势。

  请让我们了解您使用这些产品的感受,以及您未来的需求。请与您的Dialogic经销商(http://www.Dialogic.com/)或者Dialogic产品经理CT ADE, Lyle Cowen (Lyle.Cowen@Dialogic.com; (415) 332-5656, x1310)联系。





[ 全文英文版 ]

 




融合通信专栏>>技术开发>>

 
 


相关链接:
卫生防疫系统信息化解决方案 2003-08-20
跨媒体信息交互平台Quick IMR 2003-08-08
AnyTouch超越CTI中间件 2003-05-27
日本NTT DATA公司即将推出UnPBX开发系统 2003-03-27
HiPath ProCenter延伸呼叫服务 2003-03-24

分类信息:     技术_CTI平台_文摘