Страница 4 из 5

Re: Проблема с ExternalIVR()

Добавлено: 05 апр 2011, 14:39
Obi Van
В подавляющем большинстве случаев, голосовые системы, которые я встречал, любезно замолкали, с целью выслушать мои DTMF посылки. Не понимаю нужды в музыке во время нажатия клавиш? :geek:

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 писал(а):Топик можно считать наглядным примером неправильного анализа задачи
В чём же он не правильный?