zoukankan      html  css  js  c++  java
  • asterisk的ael

    vim ~/.bashrc  
     
    运行调试asterisk
    1. 运行调试常用命令
    ./asterisk & 在后台启动asterisk
    ./asterisk –vvvc 启动asterisk并尽量多的在控制台显示调试信息
    ./asterisk –r 连接asterisk控制台
    set verbose 9999 设置打印详细信息
     
    2.asterisk控制台下常用命令CLI
     
    sip reload 重新加载sip配置信息
    sip set debug  设置显示更多的sip信息
    sip set debug off关闭显示更多的sip信息
    sip show channels 显示所有活动的SIP通道
    sip show peers 显示所有已定义的SIP peer
     
     
    dialplan show 显示拨号方案
    dialplan reload重新加载拨打方案
     
    stop gracefully 优雅地停止asterisk
    stop now 立即停止运行asterisk
     
    module show 显示所有已加载模块
    module loadcdr_radius.so    加载模块cdr_radius.so
    module reload cdr_radius.so 重新加载模块cdr_radius.so
    module unload cdr_radius.so 卸载模块cdr_radius.so
     
    core show applications 显示所有的应用,比如Dial, Radius, Hangup,Answer等
    core show channels 显示所有的通话频道
    core show codecs 显示所有支持的编解码器
    core show functions 显示所有的功能函数 
     在asterisk源码目录下运行makemenuselect可以进入模块选择页面,在里面可以选择和去除一些模块。
     看完这些目录之后,对其大体的功能也可能会有点认识,还是从启动服务器还是聊起。启动服务器方法很多,我们按照手册中的描述选取一种
    Asterisk –cvvvv   具体参数含义请参考手册
     
    也可以通过运行 /usr/sbin/safe_asterisk 来运行。
    我们下文的描述就会基于这个简单的拓扑展开讨论,这儿的tel都是sip电话,我们假定tel1号码为808,tel2号码为830,现在的简单需求就是我808能够打通830,实现双向通话。开始配置前,先了解主要配置文件的作用。
    /etc/asterisk/asterisk.conf  主要配置文件,
    /etc/zaptel.conf  硬件接口的基本层.    修改这个配置文件要用modprobe装载LinuxKernel使用模块.
    /etc/asterisk/zapata.conf  为硬件配置Asterisk的接口.
    /etc/asterisk/extensions.conf  拨号方案.
    /etc/asterisk/sip.conf  SIP协议配置文件
    /etc/asterisk/iax.conf  呼入和呼出IAX通道
    /etc/asterisk/extensions.conf  拨号方案配置文件
    /etc/asterisk/moduprobe.conf  加载模块配置文件
     
     
    拨号方案语法
       
        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()
    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) 
    ------2007-01-05-修改
    变量 
    在拨号方案中使用变量可以减少打字、增加清晰度,也有助于在拨号方案中加入逻辑.
    这里的变量有全局变量,通道变量和环境变量.
    全局变量:
      全局变量应该在extensions.conf文件的开始利用[globals]这个context定义或利用 SetGlobalVar()应用.如:
     
    [globals]
    80000=Zap/1
    [internal]
    exten => 123,1,SetGlobalVar(80000=Zap/1)
     
    通道变量
      通道变量与特定的呼叫相关的变量,通道变量只能在当前呼叫存在其间定义,并只能用于参与该呼叫的通道.通道变量使用 Set()应用来设置.如:
     
    exten => 601,1,Set(80000=Zap/1)
     
    环境变量
      环境变量是一种在 Asterisk 中访问操作系统环境变量的方法.这些变量以${ENV(var)}形式引用,其中的 var 是所要引用的操作系统环境变量.
      综合上面举例:
     
    [globals]
    PSTN=Zap/1
    TEST=SIP/80000
    [test]
    exten => s,1,Answer()
    exten => s,2,Background(enter-ext-of-person)
    exten => 101,1,Dial(${PSTN},10)
    exten => 101,2,Playback(vm-nobodyavail)
    exten => 101,3,Hangup()
    exten => 101,102,Playback(tt-allbusy)
    exten => 101,103,Hangup()
    exten => 102,1,Dial(${TEST},10)
    exten => 102,2,Playback(vm-nobodyavail)
    exten => 102,3,Hangup()
    exten => 102,102,Playback(tt-allbusy)
    exten => 102,103,Hangup()
    exten => i,1,Playback(pbx-invalid)
    exten => i,2,Goto(incoming,s,1)
    exten => t,1,Playback(vm-goodbye)
    exten => t,2,Hangup()
    [default]
    exten => 101,1,Dial(${PSTN},,r)
    exten => 102,1,Dial(${TEST},,r)
     
    模式匹配
    模式匹配
      使用模式及匹配是用不同的字母和符号来代表可能要匹配的数字.模式总是用一个下划线 (_) 开始,它告诉Asterisk 要做模式匹配,这不是一个 extension 名字.(这意味着不能使用下划线作为 extension 名字的开始字符.)
    模式匹配语法
      在下划线之后,可以使用一个或者多个下面列出来的字符:
     
    X:匹配 0-9 的任何数字;
    Z:匹配 1-9 的任何数字;
    N:匹配 2-9 的任何数字;
    .(句号)通配符,匹配一个或多个字符;
    [15-7]:匹配1,5,6,7; 
     
      使用${EXTEN}通道变量:Asterisk会把通道变量${EXTEN}设置为所拨的数字.通过sayDigits()检测拨到号码内容如:
     
    exten => _9XXXXXXX,1,SayDigits(${EXTEN})
    ;SayDigits()应用会把所拨的8位extension读出来
    exten => _9XXXXXXX,1,SayDigits(${EXTEN:1})
    ;只读出来后7位数,其中"1"表示不拨前面1位数
    exten => _9XXXXXXX,1,SayDigits(${EXTEN:-1})
    ;只读出来最后1位,其中"1"表示只拨出最后1位数
     
    去话拨号(PSTN)
    举例:按"9"后拨打外线,去电时,去除"9";加放"ignorepat => 9"是为了使按完"9"后还可以听到拨号音;加入"Congestion()"应用是挂机或忙的时候播放快忙音(拥挤声音).
     
    ---本地去话拨号---
    [outbound-local]
    ignorepat => 9
    exten => _9NXXXXXX,1,Dial(Zap/1/${EXTEN:1})
    exten => _9NXXXXXX,2,Congestion()
    exten => _9NXXXXXX,102,Congestion()
    ---再加入紧急电话拨号---
    exten => 9119,1,Dial(Zap/1/119)
    exten => 119,1,Dial(Zap/1/119)
    exten => 9110,1,Dial(Zap/1/110)
    exten => 110,1,Dial(Zap/1/110)
    ---长途电话拨号---
    [outbound-long]
    exten => _90NXXNXXXXXX,1,Dial(Zap/1/${EXTEN:1})
    exten => _90NXXNXXXXXX,2,Congestion()
    exten => _90NXXNXXXXXX,102,Congestion()
     
    Includes
    Asterisk通过Includes实现在一个context中使用另一个context.格式:includes => context
     
    [internal]
    include => outbound-local
    include => outbound-long
    exten => _80XXX,1,Dial(SIP/${EXTEN},30,r)
    exten => _80XXX,2,Playback(vm-nobodyavail)
    exten => _80XXX,3,Hangup()
    exten => _80XXX,102,Playback(tt-allbusy)
    exten => _80XXX,103,Hangup()
     
    表达式和可变操作
    表达式
      表达式是变量,运算符和数值的联合,当你把它们组合到一起就会得到一个表达式结果.在Asterisk 中,表达式总是以$符合作为开始,以方括号“[]”来扩住表达式.如:
     
    $[expression]
    $[${COUNT} + 1]
    $[${COUNT} / 2]
    ;引用变量,必须把这个变量名用花括号"{}"括起来,而且在前面加上美元符号"$" 标示出来
     
    运算符
      布尔型运算符
      expr1 | expr2("|"或运算):如果expr1的值是真值,那么运算符将赋expr1的值,否则将赋expr2的值.
      expr1 & expr2("&"与运算):如果两个表达式的值都为true,运算符将赋值为expr1,否则赋值为0.
      expr1{=,>,>=,<,<=,|=}expr2:如果自变量都是整数,这些运算符将得到一个整数的比较结果;否则,它们将得到字符串的结果.如果给定的关系是正确地,这个结果是1,否则就是0.
      数学运算符
      expr1{+, -}expr2:运算符能得到整数自变量的加法或者减法地结果.
      expr1{*,/,%}expr2:运算符能分别得到整数自变量的乘法,除法或是余数的结果.
      正则表达式运算符
      expr1:expr2:运算符匹配 expr2到expr1,这里的expr2必须是一个正则表达式.
      ***Asterisk 的分析程序非常简单,因此在你输入时,在运算符和其他数值之间至少需要一个空格.
    拨号方案函数
       拨号方案函数可以使你增加更多的功能到你的表达式中.
    语法
       基本语法:FUNCTION_NAME(argument).如果要引用函数的值,和引用变量的值一样,用美元符号“ $” 加上花括号“{}” 括起函数表达式.如:
     
    ${FUNCTION_NAME(argument)}
     
    函数也可以嵌套封装其他的函数,如:
     
    ${FUNCTION_NAME(${FUNCTION_NAME(argument)})}
     
    拨号方案函数 
      函数常常用来连接set()应用,来取得或者赋值一个变量的值.举个例子,计算一下一个字符串的长度,并读出这个长度;
     
    exten=>123,1,set(TEST=example)      ;赋值example变量给TEST
    exten=>123,2,saynumber(${LEN(${TEST})})  ;计算出变量TEST长度,并读出长度数
    结果是:7
     
      如果我们要设置一个动态通道的超时,应该用TIMEOUT()函数.这个函数可以接受以下三个中的一个做为自变量,分别是absolute,digit和response.他们对应的应用是AbsoluteTimeout(),DigitTimeout()和ResponseTimeout().用 timeout()函数,设置数字的超时,我们可以set()函数, 如:
     
    exten=>s,1,set(TIMEOUT(digit)=30) 
     
      ***这个函数中没有${}.它和给一个自变量赋值一样,我们就赋值给一个函数,是不使用${}封装的.
     
     
     
     
     
     
    很多东西都是初学时遇到的问题,当时记录在印象笔记。 现在粘贴复制过来,如有侵权,私信我,尽快删除
  • 相关阅读:
    FTP服务总结
    编译安装hpptd2.4
    搭建DNS服务
    定制简单的Linux系统
    建立私有CA
    关于/boot文件的修复实验
    shell脚本进阶(二)
    datetime模块日期转换和列表sorted排序
    linux操作命令
    Python 中的特殊双下划线方法
  • 原文地址:https://www.cnblogs.com/timor19/p/11957576.html
Copyright © 2011-2022 走看看