轉自: http://hi.baidu.com/%BF%AA%D4%B4%BC%BC%CA%F5/blog/item/fbbe7e3f43a478cc9e3d6254.html
IAX
IAX(Inter Aasterisk eXchange)协议通常用于服务器间通信.IAX和SIP协议最大区别在于媒体(语音)在端点之间传输的方式不同.
Asterisk默认情况是在5060端口接收SIP信令,在10000-20000端口接收RTP(媒体)流.而IAX所有的信令和媒体流都通过一个端口4569进行传输.这种方式的好处是IAX协议能更适合在NAT相关拓扑的应用.
IAX用户习惯对进入PBX系统的呼叫进行鉴权和处理.对从PBX系统呼出的呼叫,Asterisk应用IAX的iax.conf文件的端点进入(条目)对远端进行鉴权)
通过iax.conf设置进行呼叫的鉴权和处理:
[general] ;至少需要一个主要段落,主要定义IAX协议的相关设置. jitterbuffer=no register => remote_number:password@domain ;注册到远程服务器上,告诉服务器当前位置(互联网位置)在哪 [REC_SERVER] type=user ;用user来定义呼入呼叫的类型 context=incoming ;进行呼入呼叫鉴定 auth=rsa inkeys= ;公钥,是Asterisk标准 通过extensions.conf设置一个incoming的context: [incoming] exten => remote_number,1,Dial(SIP/number) ;拨打远程号码时(呼入)转移到number(内部)号码上 |
--------以上是IAX入局配置,下面配置出局IAX连接--------
在iax.conf设置呼出条目
[REMOTE_SERVER] type=peer ;用peer定义呼出类型 host=my.receiving.server.ca ;接收服务器域名或IP地址 username=number ;接收服务器认证用户(账户号码) secret=password ;接收服务器认证密码(账户密码) qualify=yes ;不时检查远端的服务器是否响应用 disallow=all ;用于复位原来设置的所有编码信息 allow=gsm ;支持gsm编码 allow=libc ;支持libc编码 allow=g726 ;支持持g726编码 ****使用disallow复位原来设置的所有编码信息.再重新设置支持的编码,优先级从高到低 |
在extensions.conf设置
[to_remove] exten => remove_number,1,Dial(IAX2/REMOVE_SERVER/number) |
拨号方案语法
Asterisk的拨号方案在文件extensions.conf中定义(/etc/asterisk/extensions.con)
extensions.conf(四部分:context,extension,priorities,application)
context:用于对extensions组命名,把拨号方案的不同部分进行分离,免得交织在一起.
表示方法是把名字放在[]的中间,名字只能用a~z,A~Z,0~9,以及连字号和下划线组成(空格不在允许的字符里面,context中不要使用空格).如:[context1],[incoming],[default];所有放在context定义的之后的指令都是这个context一部分,直到下一个context定义的开始.
context的一个重要用途就是加强安全性.如果没有仔细设计拨号方案,可能会造成别人盗用你的系统的不良后果.
extensions:extensions是asterisk要执行的指令,由来电或通道上所拨数字来触发.可以定义电话分机
extension的语法是单词exten后面跟着一个由等号和大于号组成的箭头,如:exten => extension的名字
一个完整的extension由三部分组成:
extensions的名字或号码 priority(每个extension可以有多个步骤,步骤的编号称作priority) |
应用(或者命令),针对呼叫完成一些动作
这三个部分用英文逗号分开,如:
exten => name,priority,application() |
priorities:每个extension都可以有几个步骤,称作priorities。如:
exten=>50001,1,Answer() #编号为1的priority,执行接听电话 exten=>50001,2,Hangup() #编号为2的priority,然后挂电话 |
必须确保priority从1开始并且连续的编号
application:动作,比如:播放声音,接受音频拨号输入或者挂断电话等.
Application
Answer(),Playback()和Hangup()应用
Answer()应用于接听正在响铃通道,它不需要任何参数.
Playback()应用在通道上播放事先录制好的语音文件.指定一个文件名(不带扩展名),可以使用绝对路径与相对路径.
Hangup()应用在于挂断一个正在活动的通道.
Background(),Goto()应用
Background()它也播放事先录制好的语音文件,但它等待按键,然后执行对应extension.
防止Background()后超出按键范围,使用i来解决问题.
防止Background长时间没有选择,使用t来决解问题.
Goto()应用使得在拨号方案的不同部分有序的转移非常容易.
Goto()应用有三个参量分别是context,extension,和priority.即Goto(context,extension,priority)
Dial()应用
Dial()有4个参量,
第一个是:呼叫的被叫地(传输技术/远地资源)如:SIP/50000或Zap/1.可以同时拨打多个通道如:
exten => 601,1,Dial(Zap/1&SIP/50000&IAX/60000) |
第二个是:超时,单位"秒".给定超时参量Dial会一直对被叫地进行呼叫,直到超时后才放弃,如果没有给定,将直到接听或主叫挂机,如果呼叫在超时前接听,通道就被桥接,拨号完成
补充:如果超时后被叫地没有应答,则会继续Dial()的extension下一个priority.如果被叫地通道忙,Dial()将转到priority n+101(n是Dial()被调用的priority),如果存在的话,将能够处理被叫地忙的方式接叫未接电话.
第三个是:可选择参量,它会可以影响到Dial()的行为,如:
exten => 601,1,Dial(SIP/50000,30,Ttwr) |
其中T表示允许主叫用户按"#"转接呼叫;t表示允许被叫用户按"#"转接呼叫;r表示为被叫用户产生振铃声;w用户按"*"键开始录音.
最后一个是:URL参量.如:
exten => 601,1,Dial([email=SIP/60000@asterisk.voip.org]SIP/60000@asterisk.voip.org[/email]) exten => 602,1,Dial(Zap/1/5732381) |
任何参量都可以为空如:
exten => 601,1,Dial(SIP/60000,,T) 或 exten => 601,1,Dial(SIP/60000) |
综合上面举个例子:
[test] |
Extension,不能多于80个字符,也不能少于1个字符(601/602)