OMAPI技术开发文档20180208
上海迅时通信设备有限公司
OM API技术开发文档(V6.0)
电话:0531-86950915
文档版本:V6.0
更新时间:20180208
版权所有©上海迅时通信设备有限公司2018。保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
本文主要介绍OM API的作用及使用方法,帮助程序开发人员学习并掌握OM API,最终利用OM API开发出更多更好的应用程序。
点击这里下载PDF版。
点击这里下载Word版。
读前须知
阅读本文档之前,您最好对我司的OM系列的IPPBX产品有一定了解。
推荐资料:《OM用户手册》、《OM管理员手册》、《OM 功能学习指导书》。
资料下载:OM相关资料可到迅时官网下载。
说明:所有OM系列产品的OM API都是一样的,只是版本不同而已。
技术支持与服务
为保障开发者能够基于OM API顺利开发应用产品,我们提供了论坛、QQ群、微信公共号等多渠道的技术支持与服务。
OM API技术咨询电话:0531-86950915
微信公众号:
发布时间:2017-02-08
目录
2.1.5 监听和插播(Monitor/Talk/Listen)
本章简单介绍OM API基本概念及应用服务器和OM之间的基本交互原理,手把手教你完成OM API认证配置,并使用测试工具体验应用服务器和OM之间的消息交互,助您快速入门。
关于OM API
迅时OM系列的IPPBX设备提供统一的开放式接口——OM API,开发者可以通过OM API对OM设备进行控制、监控和数据统计等。
OM API本质上是经过封装的简单XML消息,应用服务器和OM设备之间通过HTTP协议进行通信。
1. 应用服务器通过OM API对OM进行操作:参数查询、参数配置、状态查询、呼叫控制、呼叫转接等。
2. OM实时向应用服务器推送报告:分机状态变化、呼叫状态、配置变化、服务启动、DTMF、语音播放完毕和通话记录等。
OM API使OM设备具有更大的灵活性和可操作性,开发者可利用OM API开发或对接呼叫中心、计费系统、酒管系统、CRM、OA办公系统等丰富多彩的应用。
OM API有如下四类本领:
可实现的主要功能有:点击拨号、来/去电弹屏、通话记录、录音、状态监控、分机组和队列、IVR语音导航、满意度调查、酒店叫醒服务、语音信箱、语音验证码、来电黑/白名单等。
成功案例和合作共赢
迅时搭建了一个类似于第三方应用市场的平台—— 企业应用平台,所有利用OM API开发的应用产品都可以申请上架到该平台。
上架该平台至少有两大好处:
1. 扩展渠道:迅时的渠道就等于你的渠道。迅时在全国大约有1200家渠道和合作伙伴,这些渠道会向用户推荐你的应用产品。当用户需要购买时,渠道人员会联系你。另外,我们也会定期推广优质的应用产品。
2. 数据统计和分析:迅时会定期将您的应用产品的访问量、用户喜欢数量、排名等统计结果以邮件或微信形式发送给你,让你轻松掌握市场反馈。
迅时欢迎更多合作伙伴的参与,共同解决中小型企业的办公和通信问题。
简单认识OM API之后,我们来了解下OM API的通信方式。
传输协议
应用服务器和OM之间基于HTTP协议进行通信,API消息封装在HTTP包体中。
消息内容如:
HTTP请求消息:
POST /xml HTTP/1.0
Content-Type:text/xml
Content-Length:101
xml version="1.0" encoding="utf-8"
<Control attribute="Query">
<DeviceInfo/>
</Control>
HTTP响应消息:
HTTP/1.0 200 OK
xml version="1.0" encoding="utf-8"
<DeviceInfo>
<manufacturer>New Rock Technologies, Inc</manufacturer>
<model>Rev 1.0.1 WROC2000-1S/1</model>
<version>Rev 2.2.5.81.1</version>
<mac>00:0E:A9:00:12:BD </mac>
<devices>
<ext lineid="Phone 1" id="200" />
<ext lineid="IPPhone 50" id="208" />
<line lineid="Line 2" id="02161208234" />
<line lineid="IPLine 21" id="02161204000" />
</devices>
</DeviceInfo>
通信方式
应用服务器和OM之间的交互是双向的,双方互为HTTP服务端和客户端。
正向:应用服务器作为HTTP 客户端,OM作为HTTP服务端
应用服务器请求OM执行某个功能(如,发起呼叫)或提供某些信息(如,查询状态)。此时,采用的是HTTP POST方法、TCP短连接方式(注:OM只支持TCP短连接接收)。
流程为:①请求 ②响应 ③断开。
交互图如下:
情况二:OM作为HTTP客户端,应用服务器作为HTTP服务端
OM主动向应用服务器推送某些消息(如,分机振铃事件),应用服务器收到消息后断开TCP连接(注:这里不是标准的HTTP请求响应流程,不需要应用服务器回复响应)。
此时,采用的是HTTP GET或POST方法(默认为GET,若参数API_METHOD = 1,则为POST)。
注:OM默认以短连接方式推送消息,也可通过参数CONTROL_TYPE配置为长连接。建议采用短连接方式。
流程为:①接收消息 ②断开。
我们提供多种语言(如PHP、JAVA、C#、C)编写的发送和接收消息的demo,详情请参考API新编开发指南。
下面,我们用测试工具(相当于一个简单的应用服务器)来演示OM和API应用服务器的配置方法及收发消息过程。
配置
注:这里我们采用IP认证方式。
步骤一:配置OM设备认证地址
登录OM设备页面,点击应用服务器 > API,在应用服务器一栏选择自定义(默认选中为侬好,侬好是内置在设备里的小型呼叫中心),填写应用服务器地址(即测试工具所在的电脑IP:OM发送端口,可自定义)如,192.168.130.27:8989。
步骤二:配置分机和外线的API开关
进入应用服务器 > API,在API功能开关一栏将分机和外线的状态监控、来电应答前/来电应答后控制开关打开,点击保存,并重启设备。
设备配置如下图所示:
步骤三:配置测试工具
1. 点击这里下载测试工具及其源代码,并在电脑桌面打开,填写一个HTTP监听端口(该端口与设备上配置的OM发送端口保持一致,应为8989 ),点击开始监听。(注:测试工具的源码可点击这里下载)。
2. 填写发送地址(即OM的IP地址和HTTP端口),如192.168.130.219:80。
注:OM的HTTP端口默认为80,可在设备高级设置>安全配置>Web管理处修改。
测试工具配置如下图所示:
跑个流程
完成了配置以后,接下来我们演示一个分机呼叫分机的流程,为第二章的接口使用和理解奠定基础。
发送命令
如何通过OM API实现分机呼分机呢?
只需向OM发送一条API消息:
xml version="1.0" encoding="utf-8"
<Transfer attribute="Connect">
<ext id="200"/>
<ext id="201"/>
</Transfer>
说明:
Ÿ 第一行是XML声明,每个API消息都有且相同。它定义了XML的版本(1.0)和所使用的编码方式(utf-8)。
Ÿ 第二行是XML的根。根元素Transfer表明这个是一个呼叫转接类的API。属性值Connect表示本次转接的属性为连接。
Ÿ 第三、第四行中ext是“分机”的英文单词extension的简写,200为主叫分机号码,201为被叫分机号码。
Ÿ 第五行为根节点的闭合标签。
注:更多 XML 的语法参见XML教程,更多OM API语法详解请参见第二章。
观察执行结果
执行完该 API 后,后续流程为:
1. 主叫分机200会先振铃(默认,先呼谁后呼谁由参数API_CALLING控制);
2. 将200摘机后,被叫分机201开始振铃,并且200可以听到“嘟嘟”的回铃音;
3. 将201也摘机后,双方成功建立通话;
4. 任意一方挂机后通话结束。
观察收到的API消息
查看测试工具,可以看到接收到很多条API消息。这些消息中,有两个消息是话单(CDR),其他的为事件(Event)。
Ÿ CDR为通话记录,在通话结束时产生。2个CDR中一个是主叫分机的通话记录,另一个是被叫分机的通话记录;
Ÿ Event表示事件消息,由呼叫过程中OM自动触发。
1)事件
本次呼叫过程中,收到的事件属性有这些:BUSY、IDLE、RING、ALERT、ANSWER、ANSWERED、BYE。
其中:
Ÿ BUSY和IDLE是一对,在分机状态发生变化时产生。BUSY表示分机由空闲变为忙状态, IDLE 表示分机由忙变为空闲状态;
Ÿ RING、ALERT、ANSWER、ANSWERED、BYE属于一个系列,在呼叫过程中产生。其中:
。 RING和ALERT是一对, RING表示分机开始振铃,ALERT表示收到对方的回铃(ringback)信号。
。 ANSWER和ANWERED是一对,ANSWER 表示分机应答,ANSWERED表示收到对方应答的信号。
。 BYE表示通话结束。
通过以上事件,你可以实时监控分机的线路状态和呼叫情况,并可以实现一些应用功能,比如:来/去电弹屏(当分机振铃时将来电号码对应的客户资料弹屏显示在电脑屏幕上)。
注:更多关于事件的介绍,参见2.5章节。
2)通话记录(CDR)
通话结束后,OM会立即将通话记录推送给应用服务器(这里指测试工具)。
消息格式
xml version="1.0" encoding="utf-8"
<Cdr id="13620170308103713-0">
<callid>32820</callid>
<TimeStart>20170308103709</TimeStart>
<Type>IN</Type>
<Route>IC</Route>
<CPN>200</CPN>
<CDPN>201</CDPN>
<TimeEnd>20170308103713</TimeEnd>
<Duration>2</Duration>
<TrunkNumber></TrunkNumber>
<Recording>20170308/200_201_20170308_103711_8034_cd.wav</Recording>
<RecCodec>PCMU</RecCodec>
</Cdr>
参数说明
参数名称 |
解释说明 |
---|---|
Cdr id |
通话记录的编号。格式:系列号+年月日时分秒+固定内容(-0) |
callid |
通话的相对唯一标识符 |
TimeStart |
呼叫起始时间戳,格式:年月日时分秒 |
Type |
话务类型,IN表示呼入,LO表示内部呼叫 |
Route |
路由类型,IC表示内部路由 |
CPN |
主叫号码 |
CDPN |
被叫号码 |
TimeEnd |
呼叫释放时间戳,格式:年月日时分秒 |
Duration |
通话时长,单位:秒。即,从呼叫接通到呼叫释放的时长,不包括振铃时间。 |
Trunk |
中继号码(本次是内部呼叫,没有用到中继,所以值为空) |
Recording |
录音文件的相对保存路径,格式:生成日期/录音文件名称 |
注:更多关于CDR的介绍,参见2.6章节。
API认证方式包括正向认证和反向认证两种。
正向认证:应用服务器向OM发送请求命令时,需通过OM的认证。
反向认证:OM向应用服务器发送消息时,需通过应用服务器的认证。
一、正向认证
正向认证分为IP认证和数字签名认证两种方式,您可以根据自己的实际场景选择一种来完成认证。
IP认证
IP认证,只允许某一固定IP地址向OM发送API请求,其他地址统统认为没有权限。
适用的应用场景:
1. 应用服务器的IP地址/域名固定;
2. 一个应用服务器对接一台OM;
3. 应用服务器和OM之间网络互通。
配置
配置方法,如下图所示:
参数说明:
Ÿ 服务器地址: 应用服务器的IP地址/域名和监听端口,如:192.168.130.27:8989。如果用户未指定端口时默认为80端口。
Ÿ URL: 接收API报告的相对路径(也可不填写)。格式为:{part1}/{part2}/{part3}/{……},如:omapi/report。
服务器地址和URL组合起来即为应用服务器接收API报告的全路径,如:192.168.130.27:8989/omapi/report。
应用服务器地址的作用:
1. 接收API报告:OM会将API消息推送给这个地址;
2. 访问权限控制: OM只受理从该服务器的IP地址(端口不影响)发送的API请求;拒绝受理从其它地址发送的API请求,并对该请求响应Unauthorized。
点击这里查看更多详情。
数字签名认证
数字签名认证本质上是通过验证OM和应用服务器双方持有的秘钥来完成认证。
版本要求
OM软件版本:Rev 2.1.5.99及其以上。
适用的应用场景:
1. 应用服务器采用动态域名,IP地址不固定;
2. 一个OM要对接多个API应用服务器;
3. API应用客户端要直接访问OM;
4. API消息的源地址容易发生变化;
5. 应用服务器通过迅时云平台转发消息给OM。
配置
配置参数:数字签名认证密码(接收)和数字签名有效期。
配置界面,如下图所示:
参数说明:
1. API数字认证密码(接收):OM对应用服务器认证的秘钥,可自定义,需和应用服务器发送请求时携带的秘钥保持一致。
2. API数字认证有效期:可自定义,范围:0~86400,单位:秒,只有在该有效期内认证参数才有效,0表示永久有效。
点击这里查看更多详情。
注:不论是IP认证还是数字签名认证,都需要在OM页面配置应用服务器地址,用来接收API消息。
二、反向认证
反向认证,即应用服务器对OM的认证。OM向应用服务器推送API消息时携带Auth认证信息,应用服务器根据收到的消息是否满足认证条件来选择是否接收该消息。
注:只有应用服务器要求对OM进行认证时才配置,若不要求,可不配置。
版本要求
Rev 2.1.5.116及以上
配置
配置参数:数字签名认证密码(发送)和数字签名有效期。
配置界面,如下图所示:
参数说明:
1. API数字认证密码(发送):应用服务器对OM进行认证的秘钥,可自定义,需和应用服务器接收消息时配置的秘钥保持一致。
2. API数字认证有效期:可自定义,范围:0~86400,单位:秒,只有在该有效期内认证参数才有效,0表示永久有效。
点击这里查看更多详情。
本章为OM API接口部分,包括API请求命令和API报告两部分内容。
Ÿ API请求命令,指应用服务器向OM发送的API消息,包括制命令、转接命令和来电受理命令三种类型。
Ÿ API报告,指OM主动向应用服务器推送的API消息,包括事件报告和通话记录报告两种类型。
控制命令包括查询、配置、呼叫保持与接回、静音与解除静音、监听、强插、强拆。
此类API用于查询OM设备上指定对象的相关信息(如,配置参数和状态)。这些对象包括:设备信息(deviceInfo)、分机(ext)、中继(trunk)、来电(visitor)、去电(outer)、分机组(group)、语音菜单(menu)。
查询请求的规则说明
Ÿ 最小的查询单位是对象,即不支持单独查询该对象的某一个具体参数。
查询结果的规则说明
Ÿ 查询结果中包含该对象的所有可提供的相关参数和状态信息。
Ÿ 如果查询结果中没有携带某个参数信息,则可能原因为:
° 该参数值为默认值;
° 该参数不存在;
° 不支持查询该参数。
该API用于查询OM设备自身的相关信息,如:生产商、硬件版本、软件版本,以及所有的分机、分机组和中继等。
<?xml version="1.0" encoding="utf-8" ?>
<?xml version="1.0" encoding="utf-8" ?>
<manufacturer>New Rock Technologies, Inc</manufacturer>
<model>Rev 6.0.0 OM20-2S/2</model>
<version>Rev 2.1.5.111</version>
<ext lineid="Phone 1" id="200" />
<ext lineid="IPPhone 50" id="208" />
<line lineid="Line 2" id="02161208234" />
<line lineid="IPLine 21" id="02161204000" />
说明:<>表示必选项,[]表示可选项(当参数值为默认值或空时,响应消息可能不携带该参数),| 表示或者关系
如 00:0E:A9:00:12:BD(由系统参数API_MAC决定是否携带MAC地址) |
|||
[ext] |
object |
分机 |
|
<ext lineid> |
string |
分机的线路编号,是分机的唯一固定标识 |
<Phone | IPPhone> {NO.},如:Phone 1 |
<ext id> |
string |
分机号 |
|
[line] |
object |
中继(外线) |
line和trunk是指同一个对象,即中继(外线) |
<line lineid> |
string |
中继的线路编号,是中继的唯一固定标识 |
<Line | IPLine> { NO.},如:Line 13 |
[line id] |
string |
中继号 |
|
[group id] |
int |
分机组的序号 |
1~50 |
注:
Ÿ 响应结果中包含所有的分机线路和中继线路信息,如果设备线路量很大,注意查询接收的缓存空间;
Ÿ 设备线路量大时,建议使用web的分页查询接口分别获取分机或中继线路。
该API用于查询指定分机的相关信息,如:配置参数、分机状态、通话方等。
xml version="1.0" encoding="utf-8"
xml version="1.0" encoding="utf-8"
<Call_Pickup>yes</Call_Pickup>
<Fwd_Number>18603752801</Fwd_Number>
<Call_Restriction>3</Call_Restriction>
<Off_Line_Num>200</Off_Line_Num>
<email>admin@hotmail.com</email>
<voicefile>welcome</voicefile>
<outer id="8" from="208" to="13012345678" trunk="02161208234" callid="28680">
说明:<>表示必选项,[]表示可选项(当参数值为默认值或空时,响应消息可能不携带该参数),| 表示或者关系
|
|||
[state] |
string |
线路状态 |
Ready: 空闲可用 |
[outer] |
object |
去电,这里作为该查询分机的通话方 |
|
[id] |
int |
去电的编号,可依据该参数进行呼叫转接 |
|
[from] |
string |
原始主叫号码 |
|
<to> |
string |
原始被叫号码(对于visitor而言,原始被叫为来电呼入中继号码) |
|
[trunk] |
string |
中继号,即该去电从该中继呼出 |
|
[callid] |
int |
通话的相对唯一标识符 |
|
[state] |
string |
通话状态 |
Talk: 通话进行中 |
[visitor] |
object |
来电,这里作为该查询分机的通话方 |
|
<id> |
int |
来电的编号,可依据该参数进行呼叫转接等操作 |
|
<from> |
string |
原始主叫号码 |
|
<to> |
string |
原始被叫号码(对于visitor而言,原始被叫为来电呼入的中继号码) |
|
<callid> |
int |
通话的相对唯一标识符 |
|
[state] |
string |
通话状态 |
Talk: 通话进行中 |
[ext] |
object |
分机,这里作为该查询分机的通话方 |
|
<id> |
string |
分机号 |
|
[state] |
string |
通话状态 |
Talk: 通话进行中 |
查询中继
该API用于查询指定中继(又称为外线)的相关信息,如:配置参数、线路状态、呼叫状态等。
请求示例
xml version="1.0" encoding="utf-8"
<Control attribute="Query">
<trunk id="2174"/>
</Control>
参数说明
参数名称 |
类型 |
参数说明 |
参数值说明 |
---|---|---|---|
<trunk id> |
string |
中继号码(外线号码) |
必须为OM上的有效中继,值不能为空 |
响应示例
xml version="1.0" encoding="utf-8"
<Status>
<trunk id="2174">
<lineid>Line 75</lineid>
<state>active</state>
<visitor id="2" from="202" to="2174" callid="36866">
<state>talk</state>
</visitor>
</trunk>
</Status>
参数说明
说明:<>表示必选项,[]表示可选项(当参数值为默认值或空时,响应消息可能不携带该参数),| 表示或者关系
参数名称 |
类型 |
参数说明 |
参数值说明 |
---|---|---|---|
<trunk id> |
string |
中继(外线)号 |
数字字符串 |
<lineid> |
string |
中继的线路编号,是中继的唯一固定标识 |
IPLine | Line XXX |
<state> |
string |
中继的线路状态 |
ready: 可用 |
[outer] |
object |
去电 |
|
<id> |
int |
去电的编号,可通过该参数对去电进行转接、查询、挂断等操作 |
|
<from> |
string |
原始主叫号码 |
|
<to> |
string |
原始被叫号码(对于visitor而言,原始被叫为来电呼入中继号码) |
|
<trunk> |
string |
中继号, 该去电通过该中继呼出 |
|
<callid> |
int |
通话的相对唯一符 |
|
<state> |
string |
通话状态 |
Talk: 通话进行中 |
[visitor] |
object |
来电 |
|
<id> |
int |
来电的编号,可通过该参数对来电进行转接、查询、挂断等操作 |
|
<from> |
string |
原始主叫号码 |
|
<to> |
string |
原始被叫号码(对于visitor而言,原始被叫为来电呼入的中继号码) |
|
<callid> |
int |
该路通话的相对唯一的编号 |
|
<state> |
string |
通话状态 |
Talk: 通话进行中 |
该API用于查询指定来电的相关信息,如:来电的属性参数(编号、原始主叫、原始被叫、通话状态、相对唯一标识符)、来电的通话方、呼叫状态。
xml version="1.0" encoding="utf-8"
xml version="1.0" encoding="utf-8"
<visitor id="1" from="02167103750" to="02161208234" callid="49189">
解释: 来电1是由外部电话02167103750通过中继线02161208234呼入到OM设备,并且当前正在和分机200通话中。
说明:<>表示必选项,[]表示可选项(当参数值为默认值或空时,响应消息可能不携带该参数),| 表示或者关系
该API用于查询指定去电的相关信息,如:去电的编号、主叫方、被叫方、通过的中继号码、通话状态以及通话的相对唯一标识符。
xml version="1.0" encoding="utf-8"
xml version="1.0" encoding="utf-8"
<outer id="5" from="200" to="13012345678" trunk="02161208234" callid="32773">
<outer id="5" from="200" to="13012345678" trunk="02161208234" callid="32773"/>
解释: 去电5是由分机200对外部电话13012345678发起的呼叫,该路通话所经过的中继线为02161208234。
说明:<>表示必选项,[]表示可选项(当参数值为默认值或空时,响应消息可能不携带该参数)
该API用于查询分机组的相关信息,如:配置参数(分机成员、呼叫排队时播放的背景音乐、呼叫分配规则)、正在该分机组队列中等待的来电。
xml version="1.0" encoding="utf-8"
xml version="1.0" encoding="UTF-8"
<voicefile>NowMorning</voicefile>
<distribution>sequential</distribution>
<visitor id="27" from="02167103750" to="02161208234" callid="49162"/>
<visitor id="28" from="13012345678" to="02161204000" callid="49164"/>
说明:<>表示必选项,[]表示可选项(当参数值为默认值或空时,响应消息可能不携带该参数)
该API用于查询语音菜单的相关信息,如:配置参数(语音文件、拨号检测长度、按键检查结束符)、转接到该菜单的呼叫信息等。
xml version="1.0" encoding="utf-8"
xml version="1.0" encoding="utf-8"