在入门篇第三章《HelloWorld编程实现》最后说到,其实OMAPI还提供了一个用于监控的端口上报事件,可以方便应用程序通过监控事件和状态以及汇报的话单开发出其他的应用,接下来给大家介绍。
前面说到环境配置的时候,进入OM设备的web界面-高级选项-API-应用服务器,填写认证地址,如下图所示:
其中,认证地址为应用程序或测试终端PC的IP地址,端口可以不填写,如果应用程序或测试终端PC要监听指定端口信息,需要填写,上例中是。URL可不填写,点击提交,重启生效。
这样就完成配置了,应用程序端需要监听该端口,如上例中,可以接收所有上报事件或话单信息等。
5.2监听内容目前,监听上报内容,主要包括事件、状态以及话单等内容。
1、OM系统启动事件。
?xmlversion="1.0"encoding="utf-8"?
Eventattribute="BOOTUP"
/Event
2、分机状态变化事件,空闲(IDLE)、忙线(BUSY)、上线(ONLINE)、离线(OFFLINE)。
?xmlversion="1.0"encoding="utf-8"?
Eventattribute="BUSY"
extid=""/
/Event
3、呼叫信息变化事件,振铃(RING)、回铃(ALERT)、应答(ANSWER)、被应答(ANSWERED)、结束通话(BYE)、呼叫转移(DEVERT)和呼叫控制命令返回成功(TRANSIENT)、失败(FAILED)。
?xmlversion="1.0"encoding="utf-8"?
Eventattribute="RING"
extid=""/
visitorid="22"from=""to="02161234"callid=""/
/Event
4、按键信息事件(DTMF)。
?xmlversion="1.0"encoding="utf-8"?
Eventattribute="DTMF"
visitorid="4"from=""to="02161234"callid=""
info/info
menuid="1"/
/visitor
/Event
5、话单信息(CDR)。
?xmlversion="1.0"encoding="utf-8"?
Cdrid="552101816-0"
callid85/callid
visitorid="83"/
TimeStart21018163549/TimeStart
TypeIN/Type
RouteIP/Route
CPN/CPN
CDPN/CDPN
TimeEnd2101816/TimeEnd
Duration6/Duration
TrunkNumber02161234/TrunkNumber
Recording21018/__21018-_85/Recording
/Cdr
其他信息及内容详细介绍,请参考《OMAPI接口大全》文档。
5.3编程实现其通信原理与HelloWorld发送过程类似,只不过监听时,服务端换成了应用程序端。默认事件上报都是TCP短连接,当服务端接收完信息后,需要主动断开TCP连接。
如果你已了解原理,你可以开始监听服务的编程实现了。
主要分为三个部分:
(1)建立TCP通信服务端,监听客户端连接。
(2)接收客户端发送消息。
(3)解析HTTP的Body内容,进行相应处理。
下面分别以PHP/JAVA/C#/C代码为例来说明具体实现过程。
5.3.1PHP代码实现创建一个文本文件,命名为listenserver.PHP,编辑代码如下:
?PHP
//确保在连接客户端时不会超时
set_time_limit(0);
$host="...90";
$port=;
//创建一个socket
$sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)ordie("socket_create()fail:".socket_strerror(socket_last_error())."\n");
//阻塞模式
socket_set_block($sock)ordie("socket_set_block()fail:".socket_strerror(socket_last_error())."\n");
//绑定要监听的ip和端口,这里绑定的ip一定要写局域网ip,写成.0.0.1客户端将无法与服务端建议连接
$result=socket_bind($sock,$host,$port)ordie("socket_bind()fail:".socket_strerror(socket_last_error())."\n");
//开始监听
$result=socket_listen($sock,10)ordie("socket_listen()fail:".socket_strerror(socket_last_error())."\n");
echo"OK\nBindingthesocketon$host:$port...";
echo"OK\nNowreadytoacceptconnections.\nListeningonthesocket...\n";
do{
$msgsock=socket_accept($sock)ordie("socket_accept()failed:reason:".socket_strerror(socket_last_error())."\n");
$sRead=socket_read($msgsock,);
echo"recvdatawas:";
echo$sRead;
//开启新线程处理事件、话单或其他信息
socket_close($msgsock);
}while(true);
socket_close($sock);
?
安装php环境如XAMPPControlPanel,启动apache和mysql,将listenserver.php保存到htdocs下,打开shell,进入htdocs目录,运行:phplistenserver.PHP即可,测试可用。
5.3.2JAVA代码实现创建一个文本文件,命名为listenserver.java,编辑代码如下:
//package白癜风又快又好的偏方白癜风医院银川哪家好