2016-10-21 19 views
0

アスタリスクサーバーは(ほとんどが)動作しているダイヤルプランで動作しています。アスタリスク - 複数桁の入力を処理する方法

私はこのシナリオを持っている:1つの時点で

呼び出し側は「任意の番号を入力します」聞きます。 その後、電話で番号を入力します。

彼が0を入力した場合、私はダイヤルプランの「Context0」にジャンプします。 1から10000までの数字を入力すると、「Context1」にジャンプします。 入力された数字が10000より大きい場合、私は 'Context2'にジャンプします。

[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拡張子」に入り、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で試してみると、いつもハングアップします。ログで私はいつもこれを見ています: [10月24日11時34分57秒]警告[1356] [C-00000000] pbx.c:拡張子(Context、s、1)のためのアプリケーション 'Read'がありません 次のような単純なものを試しました:[link](https://wiki.asterisk.org/wiki/display/AST/The+Read+Application)それは私に同じエラーを与えます... 何かを設定する必要はありますか私はアプリケーション '読み取り'を使用することができますか? – simplex

+0

@implexは 'app_read.so'が確実に読み込まれるようにします。アスタリスクが自動的にロードされるように設定されていない場合は、 'module load app_read.so'コマンドで手動でアスタリスクをロードし、テストを再実行することができます。 –

0

終了時に桁間タイムアウトを設定するか、ポンド(#)を押してください。タイムアウトが使用して設定することができます。

Set(TIMEOUT(digit)=5) 

または古いバージョン(< 1.2)上:

DigitTimeout(5) 

これは、ダイヤルプランで背景 cmdを前にで設定する必要があります。

0

123456は、パターンで6桁の数字が許可されていないため無効です。 (あなたのパターンでは、10000以外の5桁の数字は許可されません)

私はあなたが何をしているのか、その理由を再考することをお勧めします。

本当に「任意の数字ですか?」 10万桁を入力しようとするとどうなりますか?

「任意の数字を入力してください」を「x桁まで入力してポンドキーを入力してください」に変更できますか?

次に、 'read()'アプリケーションと 'gotoif()s'を使用して、呼び出し元を別のコンテキストにルーティングできます。

あなたが達成しようとしていることを説明した方が良い方法かもしれません。

関連する問題