Я смог повесить вызов звездочки (если его можно назвать «вызов»), нажав любую кнопку клавиатуры. Поток выглядит так:
(Файл вызова копируется в исходящий каталог) ->
Звездочка обнаруживает это и читает файл вызова ->
в файле вызова есть инструкция для запуска контекста «тест» в плане набора ->
в контексте «тест» есть инструкция для запуска скрипта AGI (PHP) ->
в AGI скрипте есть команда «EXEC PLAYBACK test_music»
Диалплан:
exten => s,1, Answer()
exten => s,n, agi(test_agi.agi)
exten => s,n, Hangup
AGI (test_agi.agi):
#!/usr/bin/php -q
<?php
require'phpagi.php';
set_time_limit(60);
ob_implicit_flush(false);
# create file handles if needed
if (!defined('STDIN'))
{
define('STDIN', fopen('php://stdin', 'r'));
}
if (!defined('STDOUT'))
{
define('STDOUT', fopen('php://stdout', 'w'));
}
if (!defined('STDERR'))
{
define('STDERR', fopen('php://stderr', 'w'));
}
fwrite(STDOUT, "EXEC PLAYBACK test_music '79#'\n"); //79# interruption marks
Итак, как видите, диалплан и файл AGI настолько просты, насколько это возможно. Дело в том, что я знаю только способ, позволяющий прерывать воспроизведение цифрой DTMF (как в комментарии AGI-кода выше) нажатием цифр на телефоне. Но это так.
Может быть, кто-то знает, как завершить вызов (и, конечно, остановить воспроизведение) при нажатии любой клавиши клавиатуры?
Это вообще возможно?
Спасибо за помощь!
По нажатию клавиши создайте http GET запрос к какому-либо скрипту.
В сценарии использования
asterisk -rx "channel request hangup CHANNEL_NAME_HERE"
Конечно, вам нужно нанять некоторый персонал для отслеживания канала, используемого вашей станцией, например, через события AMI.
Других решений пока нет …