1

以下は、freeswitch用にluaで記述されたIVRです。IVR全体をコピーしたわけではなく、ファイルの先頭から一部だけをコピーしました。

 session:set_tts_parms("flite", "kar");
    session:speak("Welcome to the VoIP World!");
    while(session:ready() == true) do
            session:speak("to go to the next level, press 1");
            session:speak("to hear my voice some more, press 2");
            session:speak("to go to the default IVR demo, press 5");
            session:speak("to exit, press 9");
            digits = session:getDigits(1, "", 3000);
            freeswitch.consoleLog("info", "Got dtmf: ".. digits .."\n");



if (digits == "1") then
                --next level stuff
                session:speak("you selected 1");
                while(session:ready() == true) do
                        session:speak("to hear me speak, press 1");
                        session:speak("to go back to the previous menu, press 2");
                        session:speak("to exit, press 9");
                    digits = session:getDigits(1, "", 3000);
                    freeswitch.consoleLog("info", "Got dtmf, level2: ".. digits .."\n");
                    if (digits == "1") then
                            session:speak("Some people will tell you that life is good");
                    elseif (digits == "2") then
                            break;
                    elseif (digits == "9") then
                            session:hangup();
                    end
            end
    elseif (digits == "2") then
            session:speak("What a Ride!");

また、ダイヤルプランを使用してアスタリスクサーバー用のIVR(必ずしも同じではない例)を作成しました。これを以下に示します。

[incoming]
exten => 123,1,Answer()
 same => n(menuprompt),Background(main-menu)

exten => 1,1,Playback(digits/1)
 same => n,Goto(menuprompt)

exten => 2,1,Playback(digits/2)
 same => n,Goto(menuprompt)

exten => 9,1,Hangup()

[main-menu]
exten => n(menuprompt),Background(main-menu)

exten => 3,1,Playback(digits/3)
 same => n,Goto(menuprompt)

exten => 4,1,Playback(digits/4)
 same => n,Goto(menuprompt)

exten => 9,1,Hangup()

上記のluaコードを機能でエミュレートするための私の質問は、グルーコードが必要ですか、それとも上記のIVRで十分ですか.1つのSIPサーバーでIVRをプログラムし、SIP電話からそのSIPサーバーにダイヤルすると、メニューが再生されます。アーキテクチャを理解しようとしていますが、一部が欠けているようです。助けていただければ幸いです。

4

2 に答える 2

2

あなたは近づいていますが、完全ではありません。

コンテキストを物理的な箱と考えてください。ボックス内の壁を通り抜けることはできません。したがって、「ラベル」(n(menuprompt) など) と拡張機能は、その 1 つの特定のボックス / コンテキストにあるものにのみ適用されます。

[incoming] コンテキストでは、「Goto(menuprompt)」への呼び出しは、[incoming] コンテキストの「(menuprompt)」ラベルを参照します。

[main-menu] コンテキストでは、「Goto(menuprompt)」への呼び出しは、[main-menu] コンテキストの「(menuprompt)」ラベルを参照します。

「n」優先度は、「このコンテキストにおけるこの拡張機能の以前の優先度よりも 1 つ多い」ことを意味する構成要素です。

したがって、ダイヤルプランの最大の問題は、新しいコンテキスト [main-menu] がありますが、最初の内線番号がないことです。だからあなたの

exten => n(menuprompt),Background(main-menu)

...「死んだ」コードです。拡張機能が関連付けられていないため、何もしません。

したがって、コードを修正するには、次のようにする必要があります

exten => 1,1,Playback(digits/1)
 same => n,Goto(main-menu,3,1)

... [着信] から [メインメニュー] にジャンプできるようにします。戻るには、逆の操作を行います。

さらに読む: https://wiki.asterisk.org/wiki/display/AST/Contexts,+Extensions,+and+Priorities

于 2012-10-23T08:33:43.300 に答える
1

同じ機能を持つ2台のIVRサーバーが必要になる理由はわかりません。Asteriskダイヤルプランでは、通話をFreeSWITCHに転送するルールを作成すると、Asteriskユーザーがそこに接続されます。

于 2012-10-19T08:54:07.910 に答える