Buddy在线状态使用FreeSWITCH的mod_skypopen和PHP

时间:2013-06-04 09:14:37

标签: php skype freeswitch

我是FreeSWITCH / Skypopen的新手。我需要使用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||| 

在谷歌搜索后,我发现skypopen模块将结果作为DEBUG日志发送到其日志文件。

有没有办法将响应作为结果发送到PHP脚本?

2 个答案:

答案 0 :(得分:3)

Skypopen模块有问题。所以它不会返回对socket或cli的响应。它只返回日志。你需要修改代码来发送对socket的响应,你将在php端获得它。

答案 1 :(得分:1)

我没有加载这个模块,但是根据mod_skypopen.c中skypopen_function的源代码来判断,除了你提到的接口行之外,skypopen API调用似乎永远不会返回任何内容。

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

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

freeswitch@internal> /event plain CUSTOM skypopen::incoming_raw

然后:

freeswitch@internal> skypopen interface1 GET USER skypeusername ONLINESTATUS