Asterisk Java AGI: utils.c write() вернул ошибку: сломанный канал

Я написал привет-сценарий Asterisk AGI с использованием Java. Сценарий выполняется должным образом и воспроизводит звуковой файл hello world, но консоль звездочки выдает ошибку:

ОШИБКА [31058]: utils.c:1164 ast_carefulwrite: write() вернула ошибку: сломанный канал

Есть идеи, что я делаю не так?

Я использую asterisk-java-0.3.1.jar и Asterisk 1.8.10.1~dfsg-1ubuntu1

Класс Java, как показано ниже:

import org.asteriskjava.fastagi.AgiChannel;
import org.asteriskjava.fastagi.AgiException;
import org.asteriskjava.fastagi.AgiRequest;
import org.asteriskjava.fastagi.BaseAgiScript;

public class AgiHelloWorld extends BaseAgiScript 
{
    @Override
    public void service(AgiRequest arg0, AgiChannel arg1) throws AgiException 
    {
        answer();
        streamFile("hello-world");
        hangup();
    }
}

2 ответа

Решение

Эта ошибка возникает, когда Asterisk пытается записать некоторую строку в AGI/FastAGI после завершения выполнения скрипта.

Обычно звездочка отправляет заголовки, а затем ждет команды. После каждой команды звездочка отправляет ответ. Но здесь есть одно исключение, и он пишет больше

HANGUP

Я думаю, что это строка звездочка не может написать в вашем случае. Вы можете проверить это, включив agi debug. Напишите в консоли:

agi set debug on

и затем, запустив скрипт, вы должны увидеть что-то вроде этого:

    -- <SIP/XXXX-0000007c>AGI Script YOUR_AGI_NAME completed, returning 4
<SIP/XXXX-0000007c>AGI Tx >> HANGUP
ERROR[1502]: utils.c:1232 ast_carefulwrite: write() returned error: Broken pipe

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

Эта ошибка обычно возникает, когда у вас нет прав доступа. Пожалуйста, войдите в систему как пользователь root и попытайтесь добиться успеха.

Другие вопросы по тегам