Страница 4 из 5
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 14:39
Obi Van
В подавляющем большинстве случаев, голосовые системы, которые я встречал, любезно замолкали, с целью выслушать мои DTMF посылки. Не понимаю нужды в музыке во время нажатия клавиш?
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 15:09
bartram
Не музыка это, а голос. "Для этого нажмите 1, для этого нажмите 2." и так далее...
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 15:24
ded
.. и если человек услышал что нужно нажать 2 и нажал 2 то зачем ему слушать другие опции?
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 15:27
bartram
А если у человека должен быть множественный выбор? Задача конечно специфическая и мало где используемая, но нужно реализовать.
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 15:30
ded
У человек есть множественный выбор apriory.
Можно его пустить на первый круг прослушивания без варанта вообще что-либо нажать - что бы ни нажимал - ничего не произойдёт.
Использовать Playback в ограниченом контексте. А на исходе вытолкнуть его в другой, где будет уже Background.
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 15:38
bartram
Зачем? Когда можно все считать во время проигрывания, зачем на первый круг время тратить? Можно конечно реализовать, но это лишняя трата времени пользователя.
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 15:50
ded
Используйте тогда канал Local для того, чтобы не прерывать после Read()
Воспроизводим всё в одном канале, а считываем что он нажал - в другом.
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 16:02
bartram
Кстати, это идея. Попробую.
Re: Проблема с ExternalIVR()
Добавлено: 05 апр 2011, 23:40
gosha
bartram писал(а):
Но главная проблема все таки, это прекращение воспроизведения звука при нажатии первой клавиши. Ни одна из agi функций которые я пробовал не может и считывать клавиши, и играть файл одновременно.
сделать промпты в виде MOH, включить этот MOH и собрать символы пока оно играет ?
Код: Выделить всё
#!/usr/bin/perl
use Asterisk::AGI;
use strict;
my $AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
$AGI->answer();
$AGI->set_music('on');
my $result = '';
my $timeout = 600;
my $start_time = time;
while ( 1 ) {
my $ch = $AGI->wait_for_digit( $timeout * 1000 );
if ( $ch <= 0 ) {
last;
} else {
$ch = chr($ch);
if ( $ch eq '#' ) {
last;
} else {
$result .= $ch;
}
}
$AGI->verbose( "Result: $result" );
last if time - $start_time > $timeout;
}
$AGI->set_music('off');
$AGI->say_digits($result);
засада только с повторным использованием
Re: Проблема с ExternalIVR()
Добавлено: 06 апр 2011, 09:42
bartram
switch писал(а):Топик можно считать наглядным примером неправильного анализа задачи
В чём же он не правильный?