Страница 1 из 2
Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 14:49
alkor
Добрый день !
Есть задача собрать IVR меню, где необходимо при наборе номера детектить решётку # как завершения набирания для дальнейших действий ivr
В моём варианте ivr
exten => ru,1,Answer
exten => ru,n,Set(CHANNEL(language)=ru)
exten => ru,n,Set(TIMEOUT(digit)=15)
exten => ru,n,Set(TIMEOUT(response)=15)
exten => ru,n,Background(prepaid-enter-pin-number)
exten => ru,n,WaitExten()
система просто ждёт 15 сек, а на # никак не реагирует.
Подскажите, пожалуйста, где что нужно добавить, что бу в моём варианте если полюзователь набрал 1234567890+# , система не ждала бы 15 сее.
Спасибо.
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 15:01
ded
Надо использовать не WaitExten (у вас же не экстен набирается?), а Read.
Изучите синтаксис Read
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 15:42
alkor
Набирается как раз экстен , который впоследствии должен передать в сип транк.
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 16:03
ded
Background(prepaid-enter-pin-number) - это экстен?
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 16:04
alkor
да
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 16:32
ded
Нет, это ПИН-код.
Чтобы оно работало и не ждало Вам надо определить твёрдую значность ваших экстенов в том же самом контексте:
exten => ru,1,Answer
exten => ru,n,Set(CHANNEL(language)=ru)
;exten => ru,n,Set(TIMEOUT(digit)=15)
;exten => ru,n,Set(TIMEOUT(response)=15)
exten => ru,n,Background(please-enter-extension-number)
exten => ru,n,WaitExten()
exten => _ZXXXXXXXXXX,1,Dial(SIP/${EXTEN}) -- вот это и есть твёрдая значность.
и задать там же
exten => i,1,????
exten => h,1,Hangup)
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 16:41
alkor
да, но в моём варианте данный зкстен (или пин) может быть разной длины и начало абсолютно разное
по-этому и нужна возможность с решёткой
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 16:46
ded
ded писал(а):Изучите синтаксис Read
Для вашего интерактивного меню # - это не завершение набора, а просто символ, как цифра, или *. И что делать с ним?
Сдаётся мне, что Вы пилите ещё один фантастический фанерный велосипед.
Лучше подобрать из готовых, которые 100% ездят.
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 17:07
alkor
Изучил, нашёл пример, прикрутил - работает.
Но. в cdr в поле destinations я вижу только "s", а нужно то что набрал пользователь.
Подскажите, плз, можно ли "s" для cdr поменять на "get" ?
вот пример
exten => s,1,Set(wait=2)
exten => s,n,Set(CHANNEL(language)=ru)
exten => s,n(begin),Playback(prepaid-enter-dest-ru)
exten => s,n,Set(gottries=0)
exten => s,n,Set(got=)
exten => s,n(getmore),Set(timer=${EPOCH})
exten => s,n,Read(get,"silence/1",,,,${wait})
exten => s,n,Set(timer=$[${EPOCH}-${timer}])
exten => s,n,GotoIf($[${timer}==$[${wait}+1]]?gotnothing:gotsomething)
exten => s,n(gotnothing),Set(gottries=$[${gottries}+1]
exten => s,n,GotoIf($[${LEN(${get})} == 0]?reallynothing:gotdigit)
exten => s,n(reallynothing),GotoIf($[${gottries}>1]?done:getmore)
exten => s,n(gotsomething),Set(gottries=0)
exten => s,n,GotoIf($[${LEN(${get})} == 0]?gotpound:gotdigit)
exten => s,n(gotpound),Set(got=${got}#)
exten => s,n,Goto(getmore)
exten => s,n(gotdigit),Set(got=${got}${get})
exten => s,n,Dial(SIP/sn2400/055000371${get},45,rtT)
Re: Asterisk IVR меню , не детектит # как завершение набора
Добавлено: 20 мар 2013, 17:53
Vlad1983
в CDR пишется EXTEN, который был в строке с Dial
exten => s,n,Dial...
создайте отдельный контекст с exten => _X.,1,Dial... и Goto(dialdialdial,${get},1) туда