2013-06-04 23 views
0

我是FreeSWITCH/Skypopen的新手。我需要使用skypopen模块和PHP来获取好友的状态。好友在线状态使用FreeSWITCH的mod_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,它返回如下:

[email protected]> 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||| 

在做谷歌的一些搜索之后,我发现skypopen模块将结果发送到它的日志文件中DEBUG日志。

有没有一种方法可以将结果返回给PHP脚本?

回答

1

我没有加载这个模块,但通过mod_skypopen.c中skypopen_function的源代码判断,似乎skypopen API调用从未真正返回除您提到的接口行之外的任何内容。

另一方面,它看起来每次从Skype API接收数据时,模块都会触发一个skypopen::incoming_raw事件,因此您可以尝试从PHP打开ESL connection并侦听这些事件。

您应该首先直接尝试在fs_cli:

[email protected]> /event plain CUSTOM skypopen::incoming_raw 

然后:

[email protected]> skypopen interface1 GET USER skypeusername ONLINESTATUS 
3

Skypopen模块有问题。所以它不会返回对套接字或cli的响应。它仅返回到日志。您需要修改代码以发送对套接字的响应,并且您将在PHP端获得它。