文档库 最新最全的文档下载
当前位置:文档库 › Asterisk教程

Asterisk教程

安装注意事项:

主要包:Asterisk主程序,libpri库,zaptel;(libpri->zaptel->Asterisk)

安装Asterisk须要的包:gcc3.x(编译);bison:代替yacc解析器(extensions.conf表达式需要bison解析)与cli;OpenSSl:Cryptographic;使用zttool工具须要libnewt;实时做用ztdummy或使用zaptel提供的硬件驱动,都要安装zaptel包;使用ztdummy驱动做时钟接口就须要libpri库

检查依赖包是否安装及安装方法:

rpm -q kernel-devel

rpm -q bison

rpm -q bison-devel

rpm -q ncurses

rpm -q ncurses-devel

rpm -q zlib

rpm -q zlib-devel

rpm -q openssl

rpm -q openssl-devel

rpm -q gnutls-devel

rpm -q gcc

rpm -q gcc-c++

yum install kernel-devel yum install bison

yum install bison-devel yum install ncurses

yum install ncurses-devel yum install zlib

yum install zlib-devel yum install openssl

yum install openssl-devel yum install gnutls-devel yum install gcc

yum install gcc-c++

安装asterisk:

1、安装Libpri:

进入安装目录

cd /path/to/source/libpri make

make install

2、安装Zaptel:

进入安装目录

cd /usr/src/asterisk/zaptel make

make install

3、安装Asterisk:

进入安装目录

cd /usr/src/asterisk/asterisk ./configure

make

make install

make samples

asterisk的目录:

/etc/asterisk/Asterisk主目录,包含其它关于Asterisk的配置文件; *zaptel.conf这个配置文件放在/etc,因为其它软件也可以使用Zaptel 这个硬件及其驱动,所以不是放在/etc/asterisk里.

/usr/lib/asterisk/modules/这个目录包含所有可以加载Asterisk模块(应用程序\编辑器\格式和有用通道),在Asterisk启运时会加载这些模块(可以编辑modules.conf).

/var/lib/asterisk/比较重要的是astdb文件与agi-bin目录;

astdb包含Asterisk当地数据库信息.

sounds/所有声音提示的文件在里面,包括Asterisk原代码中的sounds.txt文件

mohmp3/如果配置了音乐保持,应用程序会在这个目录下查找mp3(用CBR从文件中去除身份标签).

/var/lib/asterisk/agi-bin agi-bin包含所有脚本,可以通过许多已经建立的AGI应用程序与Asterisk连接.

/var/spool/asterisk/outgoing/ 外呼文件

配置文件:

/etc/zaptel.conf硬件接口的基本层.

/etc/asterisk/zapata.conf为硬件配置Asterisk的接口.

/etc/asterisk/sip.conf SIP协议配置文件

/etc/asterisk/iax.conf呼入和呼出IAX通道

/etc/asterisk/extensions.conf拨号方案配置文件/etc/asterisk/logger.conf 调试信息的配置文件

/etc/asterisk/manager.conf 登录的账号配置文件

/etc/asterisk/meetme.conf 会议配置文件

/etc/asterisk/modules.conf 模块加载配置文件

/etc/asterisk/feature.conf 电话按键配置文件

Zapata配置

[trunkgroups]

[channels]

language=cn

context=from-pstn

;signalling=fxs_ks

;signalling=pri_net signalling=pri_cpe

;switchtype=national switchtype=euroisdn pridialplan=national

callerid=asreceived usecallerid=yes hidecallerid=no callwaiting=yes usecallingpres=yes callwaitingcallerid=yes threewaycalling=yes transfer=yes cancallforward=yes

callreturn=yes

internationalprefix = 00 nationalprefix=0 localprefix=0574

echocancel=yes echocancelwhenbridged=yes echotraining=yes

rxgain=0.0

txgain=0.0

group=0

callgroup=1

pickupgroup=1 immediate=no

channel => 1-15,17-31

;channel => 32-46,48-62

;channel => 63-77,79-93

;channel => 94-108,110-124

Zaptel配置

span=1,1,0,ccs,hdb3

span=2,1,0,ccs,hdb3

span=3,1,0,ccs,hdb3

span=4,1,0,ccs,hdb3

#span1

bchan=1-15

dchan=16

#span2 bchan=32-46 dchan=47 bchan=48-62

#span3 bchan=63-77 dchan=78 bchan=79-93

#span4 bchan=94-108 dchan=109

loadzone=cn

defaultzone=cn

SIP和RTP

SIP是一个应用层的信令协议.他使用的端口是5060(通常)进行通信.SIP可以通过UDP和TCP传输层协议进行传输.Asterisk目前没有TCP 用于传输SIP信息.

RTP用于端点间传输媒体(语音),Asterisk中RTP使用大数字的无特权端口(默认10,000到20,000)

SIP优点:普通的被接受和结构灵活.其它的VOIP协议还有

H.323,IAX,MGCP.

SIP配置

/etc/asterisk/sip.conf文件中:

[general]

context=default

[10000]

username=10000;用户名

type=friend ;可以定义用户(user)\端(peer)\朋友(friend)

secret=123456 ;认证密码

record_out=Always;去电录音Adhoc须要时,Never从不,Always总是record_in=Never;来电录音

callgroup=1;呼叫组,默认为"1"

disallow=all;不允许编码

allow=ulaw;允许编码

port=5060;端口号

qualify=yes ;监视Asterisk服务器与电话之间是否延时(默认

2,000可达;yes可替换毫秒)

context=default ;指令的地点

host=dynamic ;要求号码要注册,以便Asterisk如何找到电话.(static 则不需要注册)

dtmfmode=rfc2833 ;

nat = yes

callerid=device <10000>

canreinvite=no;

注意:用户户类型是用于认证呼入呼叫;端类型用于呼出呼叫;朋友类型两种都用.(这个常用在sip.conf与iax.conf中用到)

完整的extension由三部分组成:

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

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

exten => name,priority,application()

变量

在拨号方案中使用变量可以减少打字、增加清晰度,也有助于在拨号方案中加入逻辑. 这里的变量有全局变量,通道变量和环境变量.

全局变量:

全局变量应该在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位数

常规指令:

Answer:如果呼叫回复一个信道

Busy:显示忙的情形等待挂断

Congestion:显示拥塞等待挂断

Dial:设置一个指令连接当前的信道

注意:参数r、M(x): Executes the macro (x) upon connect of the call (i.e. when the called party answers). S(n): Hangup the call n seconds AFTER called party picks up. L(x[:y][:z]): Limit the call to 'x' ms, warning when 'y' ms are left, repeated every 'z' ms)

Hangup: 无条件挂断

Ringing显示呼叫

SetCallerID: 建立CallerID,发生矛盾服从CallerID

CallerID

SoftHangup: 请求挂断转到另一个信道

Application integration

AGI: 执行一套AGI 适应程序

DeadAGI: 在中断的信道上执行AGI

EAGI: 执行一套AGI 适应程序

Macro: 执行较大的程序

NoOp: 不进行操作,可将数值打印到控制太进行调试

Goto:转到优先码,扩展名和过渡段

GotoIf: 条件展转接

SetGlobalVar:赋数值变量

Set: 设信道变量和功能值

SetVar: 赋数值变量(如果不允许,使用Set)

Background: 当执行其它命令的时候播放声音文件

MP3Player: 播放MP3声音文件

MusicOnHold: 无限度地播放音乐

Playback: 播放一个声音文件

Playtones: 当执行其它命令的时候播放声音列表StopPlaytones: 停止播放音调列表

SayDigits: 显示阿拉伯数字

SayNumber: 显示数字

SayPhonetic:显示语音

Monitor: 录音电话会话到声音文件

StopMonitor: 停止监测路线

通道变量:

${ANSWEREDTIME}: 通话时长(秒) ${BLINDTRANSFER}: 通道是否为转接类型

${CALLERID(all)}: 主叫用户名(主叫ID) 格式name(123454) ${CALLERID(name)}: 主叫用户名sip.conf 里的username=XXXX ${CALLERID(num)}: 主叫号码sip.conf 里的callerid=XXXX ${CHANNEL}: 当前通道标识

${CONTEXT}: 当前context

${DATETIME}: 当前日期时间

${DIALSTATUS}: 当前通道状态

${DNID}: 用户所拨打的号码

${EXTEN}: 当前所拨打分机号码

${HANGUPCAUSE}: The last hangup return code on a Zap channel connected to a PRI interface

${LANGUAGE}: 提示语言

${PRIORITY}: The current priority

${UNIQUEID}: 当前唯一标识

AGI说明:

1、GET DATA [timeout] [max digits]放音收号

例子:$result= $agi->get_data($file,$timeout,1);

return array, see evaluate for return information. ['result'] holds the digits and ['data'] holds the timeout if present.

注意:井号键,全部空值

2、$agi->exec_dial($dialpara1,base_setnum($othernum),$dialpara2."|r") 例子:exec_dial("ss7/siuc","0531********",40)

注意:$agi->exec('Dial',” ss7/siuc/0531********|40”)

3、EXEC

例子:$agi->exec("playback",Sound_Path."prevoice");

注意:playback(“”,”noanswer”)不摘机放音

4、GET VARIABLE

例子:$agi->get_variable("ANSWEREDTIME");

return array, see evaluate for return information. ['result'] is 0 if variable hasn't been set, 1 if it has. ['data'] holds the value.

5、Agi调试命令

$agi->verbose("-----------get DTMF faild----------");

输出要需要的字符串,用来做调试用

6、$agi->hangup;

AMI说明:

Login:登录

例子: Action: login

Username: admin

Secret: god

Logout:退出

例子:ACTION: LOGOFF

Response: Goodbye

Redirect:重定向

例子:Action: Redirect

Channel: Zap/73-1

ExtraChannel: SIP/199testphone-1f3c

Exten: 8600029

Context: default

Priority: 1

Hangup:挂机

相关文档