发布一个C#实现的Asterisk的管理系统

协议:Apache License Version 2.0

svn:https://smark.svn.codeplex.com/svn/Smark/Smark.Asterisk.Services

l        主要功能

       通过AMIAGI来接管Asterisk的拔打控制,实现多台asterisk网内拔打可配置、对接电信移动可配置、回拔和预约回拔、拔打记录和费用结算等功能。
进行程序测试的
asterisk版本是:1.6.2

 

 

       AMI的主要实现是监控用户登陆所在的服务器并登记处理和向asterisk发起回拔功能。

AGI的主要实现是接管用户拔打规则,根据配置来处理用户当拔打的号码是网内拔打还是对接到电信或移动的落地接口服务器、登记用户拔打信息和费用计算等功能。

l        配置AMI服务

AMI服务主要是连接Asterisk后接读取Asterisk的处理信息或执行对Asterisk的管理操作。程序会根据AMINet表的记录来连接相关服务器。

IPAddress

Asterisk IP地址

Port

服务端口

UserName

登陆用户

UserPWD

登陆密码

Asterisk的管理服务配置在:/etc/asterisk/manager.conf

l        配置AGI服务

AGI是程序本地监听的服务,主要是接管Asterisk的拔号处理。程序根据AGINet表的记录来启动AGI服务。

IPAddress

监听的IP地址

Port

监听的端口

 

l        拔号规则流程

AGI直接收用户拔号后先查询号码是否本网号码,根据号码登陆的IP来查找对接的AsteriskIP地址,当找不到的情况下就去查找号码对应描述的电信或移动对接服务器,如果以上都不能找到的情况返回本网内对接。

 

 

       配置/etc/asterisk/extensions.conf把特定的号码规则转发到AGI来处理。

l        配置asterisk网内对接描述

用于存在多台Asterisk的时候描述相关对接的用户,可以在AsteriskTRUNK中添加相关信息。

IPAddress

AsteriskIP地址

TRUNK

转接用户

Format

号码格式化描述;:0-1就是把开头01代替后再对接过去

DialTimeOut

对接等待超时时间

DialMusic

对接等待时所播放的彩铃

注意:asterisk必须存在对应TRUNK用户

l        配置电信或移动对接描述

配置和外网对接的用户信息,可以在PhoneTRUNK中添加相关信息。

Prefix

号码前缀

Enabled

是否有效

Format

号码格式化

TRUNK

转接用户

DialTimeOut

对接等待超时时间

DialMusic

对接等待时所播放的彩铃

注意:asterisk必须存在对应TRUNK用户

l        用户信息

用户费用信息表Accounts,只是实现简单的费用所以表结构非常简单。

AccountID

帐号名

Amount

金额

可以根据自己需要添加一些字段;如果用户无效,当用户使用该帐号拔的时候根据有效性来提示用户。

l        费用

Fee是用来描述拔打费用单价的。

Prefix

计费前缀

Price

单价

Second

单位时间(秒为单位)

 

l        发起回拔

只需要向表CallBack添加相关记录,系统就自动发起回拔。

ID

 

Account

计费帐号

Callerid

 

FromPhone

主叫号

ToPhone

被叫号

Context

拔号规则类别

Priority

拔号规则类别的第X的规则

Codes

编码:ulaw,alaw,g729等,具体情况

State

记录状态

CreateTime

创建时间

 

 

 

l        语音回拔服务的IVR

asterisk发起回拔给主叫用户,主叫用户接听后进行语音提示用户输出需要拔打的号码,输入#后进行转呼。

[smark]

exten => 99999999,1,Goto(CallBack,s,1)

exten => _.,1,AGI(agi://192.168.1.128:9001,${EXTEN},"HENRY")

 

[CallBack]

exten => s,1,Answer()

exten => s,2,Set(TRY=0)

exten => s,3,set(CALLPHONE=)

exten => s,4,Background(InputCalled)

exten => s,5,Set(TRY=$[${TRY}+1])

exten => s,6,GotoIf($[${TRY}<3]?8)

exten => s,7,Goto(smark,cberror,1)

exten => s,8,Noop()

exten => s,9,WaitExten(10)

exten => s,10,Goto(3)

exten => #,1,Goto(smark,${CALLPHONE},1)

exten => *,1,Goto(s,3)

exten => i,1,Set(CALLPHONE=${CALLPHONE}${INVALID_EXTEN})

exten => i,2,NoOp(${CALLPHONE})

exten => i,3,Goto(s,8)

exten => h,1,Goto(smark,cberror,1)

 

 

 

 

posted on 2010-05-18 03:07  henry  阅读(3916)  评论(1编辑  收藏  举报

导航