星号与freeswitch配置

时间:2012-10-19 08:08:22

标签: sip voip asterisk freeswitch sip-server

下面是一个用lua为freeswitch编写的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。如果我在一个SIP服务器中编程IVR并从sip手机拨打到那个sip服务器它将播放菜单。我正在尝试理解架构,似乎缺少一些部分。感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

你很亲密,但并不完全。

将上下文视为物理盒。你无法穿过盒子里的墙壁。因此,“标签”(就像你(menuprompt))和扩展只适用于那个特定的盒子/背景中的内容。

在[传入]上下文中,您对“转到(menuprompt)”的调用将引用[传入]上下文中的“(menuprompt)”标签。

在[主菜单]上下文中,您对“转到(menuprompt)”的调用将引用[主菜单]上下文中的“(menuprompt)”标签。

“n”优先级是一个构造,意味着“在此上下文中,此扩展的优先级高于此优先级”。

因此,您的拨号方案的最大问题是您有一个新的上下文[主菜单]但没有初始分机号码。所以你的

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

答案 1 :(得分:1)

我没有看到您需要两台具有相同功能的IVR服​​务器的原因。在您的Asterisk拨号方案中,您可以制定规则将呼叫转发到FreeSWITCH,然后您的Asterisk用户将连接到那里。