Как скачать файл MP3 из скрипта AGI, написанного на Perl? - PullRequest
0 голосов
/ 09 июля 2009

Я пытаюсь загрузить файл MP3 из сценария AGI , написанного на Perl, однако файл не загружается. Странно то, что если я пытаюсь загрузить тот же файл из простого сценария 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 голосов
/ 22 октября 2009

Попробуйте запустить часть «getAudioFile» скрипта perl от имени «Asterisk» (независимо от того, работает ли звездочка) Это будет более точно подражать тому, что происходит, когда Asterisk порождает API.

Возможно, это ошибка прав доступа пользователя.

0 голосов
/ 29 сентября 2009

Ошибка этой строки:

$AGI->answer(); 

Проверьте возвращаемое значение в коде.

От Asterisk :: AGI - Простой интерфейс интерфейса Asterisk Gateway :

$ AGI-> ответ ()

Выполняет AGI команду "ОТВЕТ"

Ответы на канал, если еще не в состояние ответа

Пример: $ AGI-> answer ();

Возвращает: -1 при сбое канала или 0 в случае успеха

...