发布一个C#实现的Asterisk的管理系统
協議:Apache License Version 2.0
svn:https://smark.svn.codeplex.com/svn/Smark/Smark.Asterisk.Services
l??????? 主要功能
?????? 通過AMI和AGI來接管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就是把開頭0用1代替后再對接過去 |
| 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)
?
?
?
?
總結
以上是生活随笔為你收集整理的发布一个C#实现的Asterisk的管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二叉树表达规定形式的代数表达式并计算表达
- 下一篇: sqlserver 还原到时间点