如何从用Perl编写的AGI脚本下载MP3文件?

时间:2009-07-09 07:34:26

标签: perl asterisk telephony agi

我正在尝试从用Perl编写的AGI脚本下载MP3文件,但是文件没有下载。奇怪的是,如果我尝试从普通的Perl脚本下载相同的文件,它就会被下载。

这是我的AGI代码:

use Asterisk::AGI;

$AGI = new Asterisk::AGI;

my %input = $AGI->ReadParse();

$AGI->answer();

sub getAudioFile
{
    $filename = shift;

    open(FH, ">./audio.mp3") || die "error";

    binmode(FH);

    $AGI->verbose("Downloading audio file");

    $http_query = "curl http://www.something.com/cgi-bin/downloadfile.cgi? -d \"type=mp3&filename=$filename\" -s |";

    open (PIPER, $http_query) or die "sorry";

    $rets = "";

    while (<PIPER>)
    {
        $rets .= $_;
    }

    close(PIPER);
    chomp $rets;

    print FH $rets;
    close(FH);

    $AGI->verbose("Download complete");


}

getAudioFile('somefile.mp3');

$AGI->hangup();

这里可能出现什么问题?

2 个答案:

答案 0 :(得分:0)

此行失败:

$AGI->answer(); 

检查代码中的返回值。

来自Asterisk::AGI - Simple Asterisk Gateway Interface Class

  

$ AGI-&GT;答案()

     

执行AGI命令“ANSWER”

     

如果尚未进入,则回答频道   回答状态

     

示例:$ AGI-&gt; answer();

     

返回:通道故障时返回-1,或0   如果成功

答案 1 :(得分:0)

尝试运行perl脚本的“getAudioFile”部分作为“Asterisk”用户(无论运行星号)。这将更接近地模仿Asterisk生成API时发生的事情。

可能是用户权限错误。