學習杜老大的 用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>