VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Динамическое голосовое меню

Проблемы Asterisk без вэб-оболочек и их решения

Модераторы: april22, Zavr2008

Ответить
Razor2k
Сообщения: 9
Зарегистрирован: 14 май 2018, 10:47

Динамическое голосовое меню

Сообщение Razor2k »

Добрый день.
Есть задача, посредством asterisk перечислить абоненту его текущие заказы (от 2 до 9) с выбором одного заказа из перечисленного списка (от 1 до Х, где Х - текущее кол-во заказов). Дополнительное условие, если клиент нажал клавишу, которая выходит из диапазона перечисляемого списка, то воспроизведение не должно останавливаться.

Мой решение задачи основывается на выборе опции m и установки четвертого параметра функции Background, в котором подключается нужный контекст, в зависимости от кол-ва заказов абонента:

Код: Выделить всё

[test-ivr]
exten => s,1,AGI(gen-msg,${CHANNEL},${EXTEN}) ; формируем голосовой файл с перечисляемыми заказами и пишем его в /tmp/asterisk/${CHANNEL}
 same => n,Set(ORDERS_COUNT=ODBC_GET_ORDERS_COUNT(${EXTEN})) ; получаем кол-во заказов из БД
 same => n,Answer
 same => n,Set(RETURN_CONTEXT=${CONTEXT}) ; Запоминаем контекст в который необходимо вернуться
 same => n,Background(/tmp/asterisk/${CHANNEL}&silence/5,m,,order-count-${ORDERS_COUNT}) ; Запускаем чтение подготовленного файла, с поиском выбора в нужном контексте 
 same => n(order-select),Verbose(0,"Abonent chose ${EE}")
 same => n,Hangup

[order-count-2]
exten => _[1-2],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
[order-count-3]
exten => _[1-3],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
[order-count-4]
exten => _[1-4],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
[order-count-5]
exten => _[1-5],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
[order-count-6]
exten => _[1-6],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
[order-count-7]
exten => _[1-7],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
[order-count-8]
exten => _[1-8],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
[order-count-9]
exten => _[1-9],1,Set(EE=${EXTEN})
 same => n,Goto(${RETURN_CONTEXT},s,order-select)
Есть ли более оптимальное решение данной задачи?
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Динамическое голосовое меню

Сообщение zzuz »

Вы просите провести аудит вашего диалплана , который используется в коммерческих целях?
Линия24 - Системы Массового Телефонного Обслуживания
Razor2k
Сообщения: 9
Зарегистрирован: 14 май 2018, 10:47

Re: Динамическое голосовое меню

Сообщение Razor2k »

А кто-то использует asterisk не в коммерческих целях, покупают номер у АТС, заводят SIP-транк себе домой и настраивают IVR на маму, папу, брата, сестру и кошку?

У меня просто возник вопрос по отдельному пункту IVR, который я не просто задал, а еще и приложил свое решение, чтобы было понятно, что я имею ввиду. Если вам проще ответить на вопрос без моего решения, то не смотрите его, а просто расскажите, как вы решали подобную задачу.
BorisTheBlade
Сообщения: 167
Зарегистрирован: 14 фев 2011, 14:24

Re: Динамическое голосовое меню

Сообщение BorisTheBlade »

Мне кажется разумнее информировать клиента о том что что-то пошло не так, типа - "вы нажали 3, но у вас только 2 позиции"
А так у вас вполне себе решение получилось учитывая специфические условия.
Razor2k
Сообщения: 9
Зарегистрирован: 14 май 2018, 10:47

Re: Динамическое голосовое меню

Сообщение Razor2k »

BorisTheBlade писал(а):Мне кажется разумнее информировать клиента о том что что-то пошло не так, типа - "вы нажали 3, но у вас только 2 позиции"
Вопрос, в какой момент времени информировать? Если, например, список в 5 позиций и абонент нажал 7 в то время, когда читалась информация о 4 позиции.
Если говорить после оглашения всего списка, то непонятно, как это организовать без прерывания оглашения списка.
Если говорить сразу после того, как нажал, то потом необходимо будет повторять сначала весь список, что долго.
Поэтому был выбран такой план, что на необрабатываемые кнопки не будет никакой реакции.
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Динамическое голосовое меню

Сообщение ded »

Надо подтверждать каждую позицию списка Да?/Нет?, и тогда переходить к следующей позиции списка.
virus_net
Сообщения: 2337
Зарегистрирован: 05 июн 2013, 08:12
Откуда: Москва

Re: Динамическое голосовое меню

Сообщение virus_net »

Razor2k писал(а):Вопрос, в какой момент времени информировать
Так можно же читать списком и запоминать последнюю озвученную позицию и начинать с нее или после нее при не верном ответе.
А вообще пора переходить на распознавание речи и уходить от топорного "нажмите Х для того чтобы..."
Уж "да" или "нет" распознается 100% всегда. Подтверждаю это многочисленными тестами.
мой SIP URI sip:virus_net@asterisk.ru
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)

ENUMER - звони бесплатно и напрямую.
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH