Страница 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) туда