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 и попытайтесь добиться успеха.