0

IVR メニューを作成しています。ユーザーが通信中にいつでも 0 を押して終了できるようにする必要があります。以下は私がそれを行う方法です:

exten => 0,1,Playback(good-bye)
exten => 0,2,Playback(beep)
exten => 0,3,Hangup

ただし、そうすると、ユーザーがファイルの再生中またはその他の操作中にゼロを押した場合、ゼロを押さなかったのと同じように終了できなくなります。私は十分に明確であり、これで私を助けてくれることを願っています. 乾杯

4

3 に答える 3

2

IVR の場合、Playback() の代わりに Background() および/または WaitExten() を使用します。サンプル IVR ダイヤルプランは次のとおりです。

[ivr_main]
; answer and play announcement
exten => s,1,Set(TIMEOUT(response)=2)
exten => s,2,Set(TIMEOUT(digit)=2)
exten => s,3,BackGround(/your/audio/file/announcement)
exten => s,4,WaitExten(2)
exten => s,5,GoTo(s|3) ; careful of this loop here! should GoTo() somewhere else!
; handle key presses
exten => 0,1,Playback(good-bye)
exten => 0,2,Playback(beep)
exten => 0,3,Hangup()
exten => 1,1,NoOp(do this if user presses 1)
exten => 2,1,NoOp(do this if user presses 2)
exten => 3,1,NoOp(do this if user presses 3)
exten => 4,1,NoOp(do this if user presses 4)
exten => 5,1,NoOp(do this if user presses 5)
; handle invalid key presses
exten => i,1,Playback(pbx-invalid)
exten => i,2,GoTo(s|3)
; handle time out (user did not make a selection)
exten => t,1,GoTo(0|1)   ; go to Hangup :-)

お役に立てれば。

Asterisk CLI で、これらのアプリケーションのマニュアルについては、'show application Background' および 'show application WaitExten' を実行します。

于 2009-12-10T23:21:11.193 に答える
1

私の知る限り、アスタリスクは、Background または WaitExten を呼び出した場合にのみ、キーの押下を検出できます。したがって、AGI を実行している場合は、これら 2 つのコマンドのいずれかを呼び出す必要があります。

于 2009-05-29T19:55:19.530 に答える
0

アスタリスクは常にユーザー入力を待っているわけではありません。バックグラウンド、WaitExten、読み取りコマンドの間のみ。Playback()を使用している場合、Asteriskはオーディオファイルの再生中にDTMFを無視します。

再生をRead()に置き換えることができますが、読み取りタイムアウトを非常に低い値に設定する必要があります。そうしないと、Read()で再生するすべてのオーディオファイルの後に無音になります。Read()を使用する場合は、ユーザーが入力した値をチェックして、終了をチェックする必要があります。たとえば、次のようになります。

それ以外の

exten => x,n,Playback(yourfile)
exten => x,n,somethingelse...

あなたが必要

exten => x,n,Read(Exit,yourfile,1)
exten => x,n,GotoIf($["${Exit}" = "0"]?0,1)
exten => x,n,somethingelse...
于 2009-06-05T17:41:53.803 に答える