アスタリスクダイヤルプランでは、dtmf入力が2桁以上の場合にそのようになり、プロンプトの再生中に1桁が押されると、1桁のdtmf入力の場合と同様にi拡張子(無効な拡張子)になります。プロンプトが再生されていますが、正しい内線番号に移動しますか?ありがとう
3 に答える
次に、ユーザーがダイヤルプランを続行するために 4 桁の PIN を入力する必要がある別の例を示します。
[Login]
exten = s,1,Playback(/var/lib/asterisk/sounds/custom/login)
exten = s,n,Set(rightPIN=1234)
exten = s,n,Read(inPIN,/var/lib/asterisk/sounds/custom/enterPIN,4)
exten = s,n,GotoIf($["${inPIN}" = "${rightPIN}"]?pin-accepted,1)
; Didn't go to pin-accepted, so play badPIN and hangup
exten = s,n,Playback(/var/lib/asterisk/sounds/custom/badPINgoodbye)
exten = s,n,Hangup()
; correct pin, play something
exten = pin-accepted,1,Playback(/var/lib/asterisk/sounds/custom/something)
...
Read() アプリケーションの 3 番目のパラメーターは、待機する桁数です。読み取りの詳細については、Asterisk Wiki: 読み取りを参照してください。
編集:これを非常にうまく行うAuthenticateというダイヤルプラン アプリもあります。
これを読むことから始めることをお勧めします:
http://astbook.asteriskdocs.org/en/2nd_Edition/asterisk-book-html-chunk/asterisk-CHP-5-SECT-1.html
または ORelly の著書「Asterisk the future of telephony」。
これは、diaplan の設定方法によって異なりますが、background() アプリケーションを使用しているようです。Background() は DTMF をリッスンし、最初の明確な一致で現在のコンテキストの拡張機能にルーティングします。
たとえば、コンテキストに 1、2、および 100 がある場合、2 を押すと (明確であるため) 2 に直接ルーティングされます。background() は 1 または 100 のどちらに移動するかがわからないため、1 を押すとタイムアウトを待ちます。現在のコンテキストには 3 で始まる拡張機能がないため、3 を押すと i の特別な拡張機能に移動します。
IVR コンテキストから内部電話の 1 つにルーティングすることが目的の動作である場合は、電話コンテキストを IVR コンテキスト内に含める必要があります。
[phones]
exten => 100,1,Dial(SIP/phone1)
exten => 101,1,Dial(SIP/phone2)
...
[IVR]
exten => s,1,Background(message)
exten => 1,1,Queue(Sales)
exten => 2,1,Queue(Support)
exten => i,1,Playback(pbx-invalid)
include => phones
公式ドキュメントの詳細: https://wiki.asterisk.org/wiki/display/AST/Application_BackGround