2016-10-21 5 views
0

У меня есть сервер Asterisk, работающий с (главным образом) рабочим диалпланом.Asterisk - Как обрабатывать многозначные входы

У меня есть такой сценарий:

В один момент вызывающий абонент слышит «Введите любое число». Затем он вводит номер на своем телефоне.

Если он входит 0, я хочу перейти к «Context0» в диалплане. Если он вводит число от 1 до 10000, я хочу перейти в «Контекст1». Если введенный номер выше 10000, я хочу перейти в «Контекст2».

контекст, который обрабатывает этот сценарий выглядит следующим образом:

[Context] 
exten => 100,1,Background(/var/lib/asterisk/sounds/sound) 

exten => 0,1,Goto(Context0,100,1) 
exten => _Z,1,Goto(Context1,100,1) 
exten => _ZX,1,Goto(Context1,100,1) 
exten => _ZXX,1,Goto(Context1,100,1) 
exten => _ZXXX,1,Goto(Context1,100,1) 
exten => 10000,1,Goto(Context1,100,1) 

exten => i,1,Goto(Context2,100,1) 

Это работает, если я только ввести 5 цифр. Если я вхожу в f.e. 123456, то после 12345 он входит в 'i extension', переходит в Context2 и применяет последнюю цифру (в данном случае номер 6) в этом контексте.

Итак, мой вопрос: как я могу сделать диалплан, если вход больше 10000, и если он больше переходит на Context2?

Я надеюсь, вы понимаете мою проблему, мой английский не так хорошо .. :)

Большого спасибо и наилучшие пожелания

ответ

0

Вы можете использовать функцию Read и делать все, что проверяет вы хотите:

[Context] 
exten => 100,1,Read(mynumber,/var/lib/asterisk/sounds/sound,10,skip,1,5) 
same => n,GotoIf($[${mynumber} = 0]?Context0,100,1) 
same => n,GotoIf($[${mynumber} <= 10000]?Context1,100,1:Context2,100,1) 

Выше код не проверен и может потребовать каких-либо ухищрений.

+0

Но если я попробую это с помощью Read, он всегда зависает.В журналах я всегда вижу это: [окт. 24 11:34:57] ПРЕДУПРЕЖДЕНИЕ [1356] [C-00000000] pbx.c: Нет приложения 'Read' для расширения (Context, s, 1) Я также попробовал что-то просто: [link] (https://wiki.asterisk.org/wiki/display/AST/The+Read+Application) Но это дает мне ту же ошибку ... Нужно ли мне что-то настраивать что я могу использовать приложение «Чтение»? – simplex

+0

@simplex гарантирует загрузку 'app_read.so'. Если ваша звездочка не настроена на автоматическую загрузку, вы можете загрузить ее вручную с помощью команды «загрузка модуля app_read.so» и повторить тест. –

0

Возможно, вам просто нужно установить интервал между цифрами или нажать фунт (#), когда закончите. Тайм-аут может быть установлен с помощью:

Set(TIMEOUT(digit)=5) 

Или на старых версиях (< 1.2):

DigitTimeout(5) 

Он должен быть установлен в перед Фон ЦМД в диалплане.

0

123456 недействителен, так как ваши шаблоны не позволяют использовать 6-значные цифры. (Ваши шаблоны не допускают пятизначных чисел, кроме 10000.)

Я бы предложил вам подумать, что вы делаете и почему.

Вы действительно имеете в виду «любое число?» Что делать, если я попытаюсь ввести 100 000 цифр?

Можно ли изменить «Ввести любое число» в «Ввести до x цифр, за которыми следует фунт-ключ?»

Затем вы можете использовать приложение read() и пару «gotoif() s» для маршрутизации вызывающего абонента в разные контексты.

Возможно, если вы объясните, что вы пытаетесь выполнить, можно предложить лучший метод.

 Смежные вопросы

  • Нет связанных вопросов^_^