Страница 2 из 2

Re: IVR не правильно воспринимает входные данные

Добавлено: 11 авг 2014, 21:53
awsswa
идей море - но проще посмотреть одним глазком чем гадать неделю

Re: IVR не правильно воспринимает входные данные

Добавлено: 12 авг 2014, 09:16
baf

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

[ Context 'ivr-1' created by 'pbx_config' ]
  '0' =>            1. Goto(ivr-1,s,1)                            [pbx_config]
  '1' =>            1. Goto(ext-queues,301,1)                     [pbx_config]
  '2' =>            1. Goto(ext-queues,302,1)                     [pbx_config]
  '4' =>            1. Goto(ext-queues,303,1)                     [pbx_config]
  '5' =>            1. Goto(ext-queues,304,1)                     [pbx_config]
  'h' =>            1. Hangup()                                   [pbx_config]
  'hang' =>         1. Playback(vm-goodbye)                       [pbx_config]
                    2. Hangup()                                   [pbx_config]
  'i' =>            1. Set(INVALID_LOOPCOUNT=$[${INVALID_LOOPCOUNT}+1]) [pbx_config]
                    2. GotoIf($[${INVALID_LOOPCOUNT} > 3]?final)  [pbx_config]
                    3. Set(IVR_MSG=custom/invalidnumber_002)      [pbx_config]
                    4. Goto(s,start)                              [pbx_config]
     [final]        5. Playback(custom/invalidnumber_002)         [pbx_config]
                    6. Goto(app-blackhole,hangup,1)               [pbx_config]
  'return' =>       1. Set(_IVR_CONTEXT=${CONTEXT})               [pbx_config]
                    2. Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT_${CONTEXT}}) [pbx_config]
                    3. Set(IVR_MSG=custom/Privetstvie_002)        [pbx_config]
                    4. Goto(s,start)                              [pbx_config]
  's' =>            1. Set(TIMEOUT_LOOPCOUNT=0)                   [pbx_config]
                    2. Set(INVALID_LOOPCOUNT=0)                   [pbx_config]
                    3. Set(_IVR_CONTEXT_${CONTEXT}=${IVR_CONTEXT}) [pbx_config]
                    4. Set(_IVR_CONTEXT=${CONTEXT})               [pbx_config]
                    5. Set(__IVR_RETVM=)                          [pbx_config]
                    6. GotoIf($["${CDR(disposition)}" = "ANSWERED"]?skip) [pbx_config]
                    7. Answer()                                   [pbx_config]
                    8. Wait(1)                                    [pbx_config]
     [skip]         9. Set(IVR_MSG=custom/Privetstvie_002)        [pbx_config]
     [start]        10. Set(TIMEOUT(digit)=3)                     [pbx_config]
                    11. ExecIf($["${IVR_MSG}" != ""]?Background(${IVR_MSG})) [pbx_config]
                    12. WaitExten(10,)                            [pbx_config]
  't' =>            1. Set(TIMEOUT_LOOPCOUNT=$[${TIMEOUT_LOOPCOUNT}+1]) [pbx_config]
                    2. GotoIf($[${TIMEOUT_LOOPCOUNT} > 2]?final)  [pbx_config]
                    3. Set(IVR_MSG=custom/invalidnumber_002&custom/Privetstvie_002) [pbx_config]
                    4. Goto(s,start)                              [pbx_config]
     [final]        5. Playback(custom/timeout_002)               [pbx_config]
                    6. Goto(app-blackhole,hangup,1)               [pbx_config]
  Include =>        'ivr-1-custom'                                [pbx_config]
  Include =>        'from-did-direct-ivr'                         [pbx_config]
Вот диалплан голосового меню, туда попадает входящий звонок. При наборе 611 переходит на ext i, где задаются переменные на количество не верных вводов и что говорить при этом, затем переходит на ext start. Вот от сюда и начинается косяк: наконецто только сейчас устанавливается задержка в 3 секунды ....
http://asterisk.ru/knowledgebase/Asterisk+cmd+DigitTimeout
Команда DigitTimeout() - вместо нее, используйте: 'Set(TIMEOUT(digit)=timeout)' -
Обратите внимание, что если пользователь ввел последовательность цифр, которые представляют собой правильный номер екстеншена, то ввод будет сразу же завершен, без ожидания, заданного этой командой, времени. Следовательно, факт возникновения этого таймаута означает, что, возможно, набран неполный или неправильный номер и этот факт следует учесть при дальнейшей обработки ввода пользователя.
Затем, почемуто в фоновом режиме играется сообщение, о том что пользователь ввел неверную комбинацию, но т.к. сообщение в фоне то пока оно играется поступает 11(оставшееся от 611) и звонок без проблем улетает на внутренний номер 11. Вот в этом и косяк. Если бы в самом начале была команда Set(TIMEOUT(digit)=3) или сообщение воспроизодилось не в фоне а Playback то косяка бы не было.
Поэтому я прошу помощи сообщества как можно по вашему мнению это исправить? Ведь у меня freepbx

Вообще я думаю это баг freepbx и если вы мне поможете я бы хотел им сообщить об этом, но с начала нужно обсудить этот вопрос.

Re: IVR не правильно воспринимает входные данные

Добавлено: 14 авг 2014, 06:53
baf
Нет идей? или совета