zoukankan      html  css  js  c++  java
  • 『轉』asterisk入门连载二

    轉自: http://hi.baidu.com/%BF%AA%D4%B4%BC%BC%CA%F5/blog/item/fbbe7e3f43a478cc9e3d6254.html 

    IAX

    IAX(Inter Aasterisk eXchange)协议通常用于服务器间通信.IAXSIP协议最大区别在于媒体(语音)在端点之间传输的方式不同.

    Asterisk默认情况是在5060端口接收SIP信令,10000-20000端口接收RTP(媒体).IAX所有的信令和媒体流都通过一个端口4569进行传输.这种方式的好处是IAX协议能更适合在NAT相关拓扑的应用.

    IAX用户习惯对进入PBX系统的呼叫进行鉴权和处理.对从PBX系统呼出的呼叫,Asterisk应用IAXiax.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设置一个incomingcontext:

    [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
    :extensionsasterisk要执行的指令,由来电或通道上所拨数字来触发.可以定义电话分机  

    extension的语法是单词exten后面跟着一个由等号和大于号组成的箭头,:exten => extension的名字


    一个完整的extension由三部分组成:

    extensions的名字或号码

    priority(每个extension可以有多个步骤,步骤的编号称作priority)


    应用(或者命令),针对呼叫完成一些动作


    这三个部分用英文逗号分开,:

    exten => name,priority,application()


    priorities
    :每个extension都可以有几个步骤,称作priorities。如:

    exten=>50001,1,Answer()  #编号为1priority,执行接听电话

    exten=>50001,2,Hangup()  #编号为2priority,然后挂电话


    必须确保priority1开始并且连续的编号


    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/50000Zap/1.可以同时拨打多个通道如:

    exten => 601,1,Dial(Zap/1&SIP/50000&IAX/60000)

        第二个是:超时,单位"".给定超时参量Dial会一直对被叫地进行呼叫,直到超时后才放弃,如果没有给定,将直到接听或主叫挂机,如果呼叫在超时前接听,通道就被桥接,拨号完成

      补充:如果超时后被叫地没有应答,则会继续Dial()extension下一个priority.如果被叫地通道忙,Dial()将转到priority n+101(nDial()被调用的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]
    exten => s,1,Answer()
    exten => s,2,Background(enter-ext-of-person)
    exten => 601,1,Dial(Zap/1,30,Ttrw)
    exten => 601,2,Playback(vm-nobodyavail)
    exten => 601,3,Hangup()
    exten => 601,102,Playback(tt-allbusy)
    exten => 601,103,Hangup()
    exten => 602,1,Dial(SIP/50000,30,Ttrw)
    exten => 602,2,Playback(vm-nobodyavail)
    exten => 602,3,Hangup()
    exten => 602,102,Playback(tt-allbusy)
    exten => 602,103,Hangup( )
    exten => i,1,Playback(pbx-invalid)
    exten => i,2,Goto(test,s,1)
    exten => t,1,Playback(vm-goodbye)
    exten => t,2,Hangup()

    Extension,不能多于80个字符,也不能少于1个字符(601/602)

  • 相关阅读:
    通过WCF引用ListData.svc查询,更新数据
    SharePoint2010 BCS搜索结果的标题
    多个Finder方法的外部内容类型
    SharePoint 2010 中的BCS身份验证模式
    使用Visual Studio工作流发布SharePoint网页
    PerformancePoint Services故障排除
    使用SharePoint 2010模式对话框
    在自定义字段类型的CAML中使用AJAX jQuery
    扩展Visual Studio 2010服务器资源管理器中的SharePoint结点
    BCS配置文件页、爬网与搜索
  • 原文地址:https://www.cnblogs.com/abinxm/p/1658097.html
Copyright © 2011-2022 走看看