学习杜老大的 用FreeSWITCH实现IVR

http://www.freeswitch.org.cn/blog/past/2010/3/21/yong-freeswitchshi-xian-ivr/

在我测试的时候,通过命令FS> originate user/1001 &ivr(welcome)没有问题,但是通过sip客户端拨号,就听不到导航音

后来请教别人,发现在用户信息配置里面的user_context是default(<variable name="user_context" value="default"/>),但是杜老大的文章里面,介绍的配置却在public下面(一般来说,来话会先到达public dialplan,所以,你可以在conf/dialplan/public.xml中加入一个extension)

问题就出在这个地方,我把用户信息配置里面的user_context改成public,成功了!

下一步,就是在xml_curl.conf.xml 里面,读取远程的IVR控制流程

2012/8/2

今天终于把读取远程IVR控制流程,也试通了。之前一下呼不出去,返回“No Route, Aborting”。刚才又把各个XML脚本看了一遍,发现了问题所在。

1、来是把xml_curl.conf.xml中diaplan的bindings写错了,这个diaplan是复制directory的,所以bindings就没有改。

之前不成功的

<binding name="dialplan">
<param name="gateway-url" value="http://localhost:12569/Ivr.ashx" bindings="directory"/>
</binding>

修改后,成功的

<configuration name="xml_curl.conf" description="cURL XML Gateway">
  <bindings>
 <!-- <binding name="directory">
      <param name="gateway-url" value="http://localhost:12569/Fs.ashx" bindings="directory"/>
    </binding> -->
 <binding name="dialplan">
  <param name="gateway-url" value="http://localhost:12569/Ivr.ashx" bindings="dialplan"/>
 </binding>
  </bindings>
</configuration>

2、Ivr.ashx里面的输出xml写的也不对,刚才又参考了杜老大的万能脚本那篇文章,写了一下。成功的脚本如下

using System.Web;

namespace Web
{
    /// <summary>
    /// Ivr 的摘要说明
    /// </summary>
    public class Ivr : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            context.Response.Write(OutPut());
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        public string OutPut()
        {
            var sFs = "<document type=\"freeswitch/xml\">";
            sFs = sFs + "<section name=\"dialplan\">";
            sFs = sFs + "<context name=\"default\">";
            sFs = sFs + "<extension name=\"incoming_call\">";
            sFs = sFs + "<condition field=\"destination_number\" expression=\"1000\">";
            sFs = sFs + "<action application=\"answer\" data=\"\"/>";
            sFs = sFs + "<action application=\"sleep\" data=\"1000\"/>";
            sFs = sFs + "<action application=\"ivr\" data=\"welcome\"/>";
            sFs = sFs + "</condition>";
            sFs = sFs + "</extension>";
            sFs = sFs + "</context>";
            sFs = sFs + "</section>";
            sFs = sFs + "</document>";

            return sFs;
        }
    }
}

总结:看来远程返回的脚本,都是要用下面这种格式的。

<document type="freeswitch/xml">
<section name="dialplan">
</section>
</document>

posted on 2012-07-30 18:17  晓晨  阅读(4582)  评论(0编辑  收藏  举报