Asterisk* 发起回放 php 脚本,但 fwrite() 损坏管道
Asterisk* Originating a playback php script , but getting fwrite() broken pipe
你好,我正在研究 Asterisk 框架,我正在编写一个 php 脚本,我可以在 meetme 会议中为其播放语音消息。
不知为何我的 php 脚本 returns 这个错误:
ERROR[27555]: utils.c:1390 ast_careful_fwrite: fwrite() returned error: Broken pipe
这是我的 php 脚本:
<?PHP
set_time_limit(0);
$filename = $_GET['click'];
$socket = fsockopen("127.0.0.1","5038", $errno, $errstr, 10);
if (!$socket) { echo "$errstr ($errno)\n";
echo fgets($socket).'<br>';}
else {
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: myasterisk\r\n");
fputs($socket, "Secret: *****\r\n\r\n");
fputs($socket, "Action: Command\r\n");
// fputs($socket, "Command: sip show peers\r\n\r\n");
fputs($socket, "Command: meetme(2500,p)\r\n\r\n");
fputs($socket, "Command: Playback($filename)\r\n\r\n");
fputs($socket, "Command: Hangup()\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");
echo fgets($socket).'<br>';
fclose($socket);
}
error_reporting(E_ALL);
?>
请看我错在哪里。
我如何运行将此脚本添加到我的第一优先级拨号计划中以进入meetme会议,然后通过执行此脚本播放音频?
请帮助我,将不胜感激。
请确保注销正常工作,您似乎在注销前关闭了连接。
更多详情:
http://forums.asterisk.org/viewtopic.php?f=1&t=75713
更新:
可能的问题是您没有从 AMI 套接字读取所有内容。例如尝试以下代码:
<?php
set_time_limit(0);
$filename = $_GET['click'];
$socket = fsockopen("127.0.0.1","5038", $errno, $errstr, $timeout);
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: myasterisk\r\n");
fputs($socket, "Secret: *****\r\n\r\n");
fputs($socket, "Command: meetme(2500,p)\r\n\r\n");
fputs($socket, "Command: Playback($filename)\r\n\r\n");
fputs($socket, "Command: Hangup()\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");
while (!feof($socket)) {
$wrets .= fread($socket, 8192);
}
fclose($socket);
echo <<<ASTERISKMANAGEREND
ASTERISK MANAGER OUTPUT:
$wrets
ASTERISKMANAGEREND;
?>
你好,我正在研究 Asterisk 框架,我正在编写一个 php 脚本,我可以在 meetme 会议中为其播放语音消息。
不知为何我的 php 脚本 returns 这个错误:
ERROR[27555]: utils.c:1390 ast_careful_fwrite: fwrite() returned error: Broken pipe
这是我的 php 脚本:
<?PHP
set_time_limit(0);
$filename = $_GET['click'];
$socket = fsockopen("127.0.0.1","5038", $errno, $errstr, 10);
if (!$socket) { echo "$errstr ($errno)\n";
echo fgets($socket).'<br>';}
else {
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: myasterisk\r\n");
fputs($socket, "Secret: *****\r\n\r\n");
fputs($socket, "Action: Command\r\n");
// fputs($socket, "Command: sip show peers\r\n\r\n");
fputs($socket, "Command: meetme(2500,p)\r\n\r\n");
fputs($socket, "Command: Playback($filename)\r\n\r\n");
fputs($socket, "Command: Hangup()\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");
echo fgets($socket).'<br>';
fclose($socket);
}
error_reporting(E_ALL);
?>
请看我错在哪里。
我如何运行将此脚本添加到我的第一优先级拨号计划中以进入meetme会议,然后通过执行此脚本播放音频?
请帮助我,将不胜感激。
请确保注销正常工作,您似乎在注销前关闭了连接。
更多详情:
http://forums.asterisk.org/viewtopic.php?f=1&t=75713
更新:
可能的问题是您没有从 AMI 套接字读取所有内容。例如尝试以下代码:
<?php
set_time_limit(0);
$filename = $_GET['click'];
$socket = fsockopen("127.0.0.1","5038", $errno, $errstr, $timeout);
fputs($socket, "Action: Login\r\n");
fputs($socket, "UserName: myasterisk\r\n");
fputs($socket, "Secret: *****\r\n\r\n");
fputs($socket, "Command: meetme(2500,p)\r\n\r\n");
fputs($socket, "Command: Playback($filename)\r\n\r\n");
fputs($socket, "Command: Hangup()\r\n\r\n");
fputs($socket, "Action: Logoff\r\n\r\n");
while (!feof($socket)) {
$wrets .= fread($socket, 8192);
}
fclose($socket);
echo <<<ASTERISKMANAGEREND
ASTERISK MANAGER OUTPUT:
$wrets
ASTERISKMANAGEREND;
?>