发布一个C#实现的Asterisk的管理系统
協(xié)議:Apache License Version 2.0
svn:https://smark.svn.codeplex.com/svn/Smark/Smark.Asterisk.Services
l??????? 主要功能
?????? 通過(guò)AMI和AGI來(lái)接管Asterisk的拔打控制,實(shí)現(xiàn)多臺(tái)asterisk網(wǎng)內(nèi)拔打可配置、對(duì)接電信移動(dòng)可配置、回拔和預(yù)約回拔、拔打記錄和費(fèi)用結(jié)算等功能。
進(jìn)行程序測(cè)試的asterisk版本是:1.6.2
?
?
???????AMI的主要實(shí)現(xiàn)是監(jiān)控用戶(hù)登陸所在的服務(wù)器并登記處理和向asterisk發(fā)起回拔功能。
AGI的主要實(shí)現(xiàn)是接管用戶(hù)拔打規(guī)則,根據(jù)配置來(lái)處理用戶(hù)當(dāng)拔打的號(hào)碼是網(wǎng)內(nèi)拔打還是對(duì)接到電信或移動(dòng)的落地接口服務(wù)器、登記用戶(hù)拔打信息和費(fèi)用計(jì)算等功能。
l??????? 配置AMI服務(wù)
AMI服務(wù)主要是連接Asterisk后接讀取Asterisk的處理信息或執(zhí)行對(duì)Asterisk的管理操作。程序會(huì)根據(jù)AMINet表的記錄來(lái)連接相關(guān)服務(wù)器。
| IPAddress | Asterisk IP地址 |
| Port | 服務(wù)端口 |
| UserName | 登陸用戶(hù) |
| UserPWD | 登陸密碼 |
Asterisk的管理服務(wù)配置在:/etc/asterisk/manager.conf
l??????? 配置AGI服務(wù)
AGI是程序本地監(jiān)聽(tīng)的服務(wù),主要是接管Asterisk的拔號(hào)處理。程序根據(jù)AGINet表的記錄來(lái)啟動(dòng)AGI服務(wù)。
| IPAddress | 監(jiān)聽(tīng)的IP地址 |
| Port | 監(jiān)聽(tīng)的端口 |
?
l??????? 拔號(hào)規(guī)則流程
當(dāng)AGI直接收用戶(hù)拔號(hào)后先查詢(xún)號(hào)碼是否本網(wǎng)號(hào)碼,根據(jù)號(hào)碼登陸的IP來(lái)查找對(duì)接的AsteriskIP地址,當(dāng)找不到的情況下就去查找號(hào)碼對(duì)應(yīng)描述的電信或移動(dòng)對(duì)接服務(wù)器,如果以上都不能找到的情況返回本網(wǎng)內(nèi)對(duì)接。
?
?
?????? 配置/etc/asterisk/extensions.conf把特定的號(hào)碼規(guī)則轉(zhuǎn)發(fā)到AGI來(lái)處理。
l??????? 配置asterisk網(wǎng)內(nèi)對(duì)接描述
用于存在多臺(tái)Asterisk的時(shí)候描述相關(guān)對(duì)接的用戶(hù),可以在AsteriskTRUNK中添加相關(guān)信息。
| IPAddress | AsteriskIP地址 |
| TRUNK | 轉(zhuǎn)接用戶(hù) |
| Format | 號(hào)碼格式化描述;如:0-1就是把開(kāi)頭0用1代替后再對(duì)接過(guò)去 |
| DialTimeOut | 對(duì)接等待超時(shí)時(shí)間 |
| DialMusic | 對(duì)接等待時(shí)所播放的彩鈴 |
注意:asterisk必須存在對(duì)應(yīng)TRUNK用戶(hù)
l??????? 配置電信或移動(dòng)對(duì)接描述
配置和外網(wǎng)對(duì)接的用戶(hù)信息,可以在PhoneTRUNK中添加相關(guān)信息。
| Prefix | 號(hào)碼前綴 |
| Enabled | 是否有效 |
| Format | 號(hào)碼格式化 |
| TRUNK | 轉(zhuǎn)接用戶(hù) |
| DialTimeOut | 對(duì)接等待超時(shí)時(shí)間 |
| DialMusic | 對(duì)接等待時(shí)所播放的彩鈴 |
注意:asterisk必須存在對(duì)應(yīng)TRUNK用戶(hù)
l??????? 用戶(hù)信息
用戶(hù)費(fèi)用信息表Accounts,只是實(shí)現(xiàn)簡(jiǎn)單的費(fèi)用所以表結(jié)構(gòu)非常簡(jiǎn)單。
| AccountID | 帳號(hào)名 |
| Amount | 金額 |
可以根據(jù)自己需要添加一些字段;如果用戶(hù)無(wú)效,當(dāng)用戶(hù)使用該帳號(hào)拔的時(shí)候根據(jù)有效性來(lái)提示用戶(hù)。
l??????? 費(fèi)用
Fee是用來(lái)描述拔打費(fèi)用單價(jià)的。
| Prefix | 計(jì)費(fèi)前綴 |
| Price | 單價(jià) |
| Second | 單位時(shí)間(秒為單位) |
?
l??????? 發(fā)起回拔
只需要向表CallBack添加相關(guān)記錄,系統(tǒng)就自動(dòng)發(fā)起回拔。
| ID | ? |
| Account | 計(jì)費(fèi)帳號(hào) |
| Callerid | ? |
| FromPhone | 主叫號(hào) |
| ToPhone | 被叫號(hào) |
| Context | 拔號(hào)規(guī)則類(lèi)別 |
| Priority | 拔號(hào)規(guī)則類(lèi)別的第X的規(guī)則 |
| Codes | 編碼:ulaw,alaw,g729等,具體情況 |
| State | 記錄狀態(tài) |
| CreateTime | 創(chuàng)建時(shí)間 |
| ? | ? |
?
l??????? 語(yǔ)音回拔服務(wù)的IVR
由asterisk發(fā)起回拔給主叫用戶(hù),主叫用戶(hù)接聽(tīng)后進(jìn)行語(yǔ)音提示用戶(hù)輸出需要拔打的號(hào)碼,輸入#后進(jìn)行轉(zhuǎn)呼。
[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)
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的发布一个C#实现的Asterisk的管理系统的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 二叉树表达规定形式的代数表达式并计算表达
- 下一篇: C#面试知识点