惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Stack Overflow Blog
Stack Overflow Blog
Hugging Face - Blog
Hugging Face - Blog
博客园_首页
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
N
Netflix TechBlog - Medium
腾讯CDC
C
Check Point Blog
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI
S
SegmentFault 最新的问题
F
Fortinet All Blogs
美团技术团队
U
Unit 42
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 司徒正美
F
Full Disclosure
Recorded Future
Recorded Future
D
DataBreaches.Net
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
J
Java Code Geeks
I
InfoQ
Y
Y Combinator Blog
A
About on SuperTechFans
AI
AI
爱范儿
爱范儿
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Forbes - Security
Forbes - Security
W
WeLiveSecurity
M
MIT News - Artificial intelligence
雷峰网
雷峰网
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
GRAHAM CLULEY
Know Your Adversary
Know Your Adversary
Latest news
Latest news
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
D
Docker
Recent Commits to openclaw:main
Recent Commits to openclaw:main
量子位
V2EX - 技术
V2EX - 技术
Project Zero
Project Zero

博客园 - henry

Smark.Net.Tcp.XmlService性能测试程序 基于Flex的http简易文件管理工具 性能的瓶颈到底在那呢? 运用Smark.SocketAsyncs扩展基于XML的TCP服务 运用Smark.SocketAsyncs方便实现数据交互服务 实现分布式对象锁 asterisk使用SIP相互对接 开源一个基于Flex4+C#的个人信息管理程序 FlashBuilder4试用 这样的重构是否有必要呢? Asterisk2B用户管理逻辑设计 用JQuery UI dialog实现Alert和Confirm功能 - henry Asterisk发起电话预约回拔 WOW工会DKP管理系统 我的分页控件设计 实现一个JavaScript验证的Asp.net Helper - henry - 博客园 Smark.Data 实体属性值描述 Smark.Data实体成员数据验证 Smark.Data Part1
发布一个C#实现的Asterisk的管理系统
henry · 2010-05-18 · via 博客园 - henry

协议: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,只是实现简单的费用所以表结构非常简单。

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

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)