Asterisk发起电话预约回拔

时间:2021-08-05 09:16:00

电话预约回拔主要由服务直接拔打客户电话号码,然后播放功能菜单,客户根据功能菜单输入相关的号码提供给服务器操作.不过这么语音服务应用范围还是很广的,如点歌系统,移动的10086语音服务等.
不过要实现这功能之前还是要了解一下Asterisk.
http://www.asterisk.org/
以下是实现简单的预约回拔功能,Asterisk配置简单的功能菜单:

·     编辑extensions.conf
[mainmenu]
exten => s,1,Background(
功能提示语音)
exten => s,2,Background(silence/10) ;
这个主要是播一个静音,等待客户输入
exten => s,3,Noop()
exten => s,4,Background(
结束前语音提示)
exten => s,5,Background(Hangup);
播放结束
exten => _.,1,Goto(BusinessCall,${EXTEN},1);
当用户在服务器等待时输入相关号码后直接转发到BusinessCall规则下处

[BusinessCall]
exten => 10086,1,Goto(mainmenu,s,1);
当接收到10086的请求直接转到语音菜单
exten => _0.,1,Dail(sip/${EXTEN:1});
当用户转0开头的号码,直接把0去了进行SIP拔打

·     通过AMI发起回拔
可以通过AMIOriginate 命令发起一个回拔:
Smark.Asterisk.AMI.Originate Ori = new Originate();
Ori.Account = number;
Ori.Exten = "10086";
Ori.Context = "BusinessCall";
Ori.Channel = "SIP/" + number;
Ori.Priority = "1";
Ori.Variable = "IsCallBack=" + number;
Ori.Async = "yes";
mManager.Send(Ori);
Smark.Asterisk
的组件包可以到:http://smark.codeplex.com/
AMI的详细帮助可以到:http://www.voip-info.org/wiki/view/Asterisk+manager+API
这里也提供一个完善的基于C#AMI组件。