我是FreeSWITCH/skyopen的新手。我需要得到一个哥们的状态使用skypopen模块和PHP。
我使用以下PHP脚本来获取状态。
<?php
$output = array();
$returnVar = "";
$result = exec('fs_cli -x "skypopen interface1 GET USER skypeusername ONLINESTATUS"', $returnVar, $output);
var_dump($result, $returnVar, $output);
?>
执行PHP文件后,我得到以下响应:
string(0) ""
array(2) {
[0]=>
string(68) "Using interface: globals.SKYPOPEN_INTERFACES[18].name=|||interface1|||"
[1]=>
string(0) ""
}
int(0)
只返回Using interface: globals.SKYPOPEN_INTERFACES[18].name=|||interface1|||
,不返回"skypeusername"的在线状态。
但是如果我在FreeSWITCH CLI中执行skypopen interface1 GET USER skypeusername ONLINESTATUS
命令,它返回以下内容:
freeswitch@internal> skypopen interface1 GET USER skypeusername ONLINESTATUS
Using interface: globals.SKYPOPEN_INTERFACES[18].name=|||interface1|||
2013-06-04 04:06:35.778928 [DEBUG] skypopen_protocol.c:1771 [1a3a11f|3d6ed64] [DEBUG_SKYPE 1771 ][interface1 ][IDLE,IDLE] SENDING: |||GET USER skypeusername ONLINESTATUS||||
2013-06-04 04:06:35.778928 [DEBUG] skypopen_protocol.c:209 [1a3a11f|3d6ed64] [DEBUG_SKYPE 209 ][interface1 ][IDLE,IDLE] READING: |||USER skypeusername ONLINESTATUS ONLINE|||
在Google中做了一些搜索后,我发现skypopen模块将结果作为DEBUG日志发送到其日志文件。
是否有一种方法来获得响应的结果PHP脚本?
skyopen模块有问题。因此,它不会向socket或cli返回响应。它只返回到日志。你需要修改代码发送响应到套接字,你会得到它在php端。
我没有加载这个模块,但是根据mod_skypopen_c中的skypopen_function的源代码判断,似乎skypopen API调用从来没有真正返回任何东西,除了您提到的接口行。
另一方面,看起来模块每次从Skype API接收数据时都会触发skypopen::incoming_raw
事件,因此您可以尝试从PHP打开ESL连接并侦听这些。
您应该首先直接在fs_cli:
上尝试freeswitch@internal> /event plain CUSTOM skypopen::incoming_raw
:
freeswitch@internal> skypopen interface1 GET USER skypeusername ONLINESTATUS