Asterisk的配置文件都在/etc/asterisk目录下,重要的配置文件有:
sip.conf sip电话基本配置
extensions.conf 拨号规则
voicemail.conf 配置语音信箱
meetme.conf 会议室
http.conf web界面相关
manager.conf web界面相关
cdr_mysql.conf 详单数据库
res_mysql.conf mysql数据库配置
features.conf 自定义按键配置,同时还有一些系统默认的功能键
modules.conf 定义了系统启动时加载的模块
logger.conf 日志
sip--会话初始协议,通常用于voip电话,进行呼叫建立、呼叫结束以及呼叫进程中的协商。基本上,它帮助二个端点互相通话。sip不处理媒体;当呼叫建立之后,它通过实时传输协议在电话之间直接传输媒体。
SIP使用UDP5060端口进行通信,目前asterisk没有TCP用于传输,但以后的版本可能会支持。我们所说的媒体是指端点之间传输的用于在另一端点重建你的声音数据。同样也指pbx音乐或声音提示。
RTP用于在端点之间传输媒体。Asterisk中RTP使用大数字的无特权的端口(默认10000至20000)
SIP不是第一个,也不是唯一一个我们使用的VOIP协议(其它包括H.323,MGCP,IAX等),但是目前SIP似乎是硬件厂商最大的动力。SIP协议的优点是普遍的被接受和结构灵活,简单。
下面是基本的sip.conf配置:
1 [10001]2 type=friend; ;可以定义用户(user)\端(peer)\朋友(friend)3 secret=10001 ;链接服务器的密码4 host=dynamic; ; 动态主机地址,需要注册到服务器5 context=default; ;系统分组default 默认不分组暗指所有6 username=10001; ;用户名可以省略7 mailbox=10001@default ;语音信箱8 ;record_out=Always; ;去电录音Adhoc需要时,Never从不,Always总是9 ;record_in=Never ;来电录音10 ;callgroup ;呼叫分组,默认是"1"11 ;pickupgroup ;带接组12 ;disallow ;不允许编码13 port=5060; ;通信端口号14 qualify=yes; ;监视asterisk服务器与电话之间是否延时(默认2000可达;yes也可替换毫秒)15 nat=yes; ;如果一个号码在NAT设备后面,例如路由器或者防火墙,必须配置nat=yes,强迫asterisk忽略号码的联系信息,使用收到的包的地址信息16
17 [10002]18 type=friend; ;可以定义用户(user)\端(peer)\朋友(friend)19 secret=10002 ;链接服务器的密码20 host=dynamic; ; 动态主机地址,需要注册到服务器21 context=default; ;系统分组default 默认不分组暗指所有22 username=10001; ;用户名可以省略23 mailbox=10001@default ;语音信箱24 ;record_out=Always; ;去电录音Adhoc需要时,Never从不,Always总是25 ;record_in=Never ;来电录音26 ;callgroup ;呼叫分组,默认是"1"27 ;pickupgroup ;带接组28 ;disallow ;不允许编码29 port=5060; ;通信端口号30 qualify=yes; ;监视asterisk服务器与电话之间是否延时(默认2000可达;yes也可替换毫秒)31 nat=yes; ;如果一个号码在NAT设备后面,例如路由器或者防火墙,必须配置nat=yes,强迫asterisk忽略号码的联系信息,使用收到的包的地址信息32
33 ;context=internal 定义了指令地点,用于控制电话的权限,以及如何处理此号码的呼入呼叫。sip.conf中设置的context名称和extensions.conf中的匹配。
extensions.conf的配置
1.Answer()应用用于接听正在振铃的通道
2.Playback()应用用于在通道上播放事先录制好的语音文件。在使用Playback()应用时,系统不会理会来自用户的输入。若要使用Playback(),要指定一个文件名(不需要带扩展名)作为参考。要特别说明的事,您也可以在文件名上包括完整的路径。
3.Hangup()应用挂断一个正在活动的通道。
4.Background()应用播放事先录制好的语音文件当主叫方按下电话键的时候,会中断语音的播放,转到与所按数字对应的extension。Background()应用通常用于创建语音菜单。
5.Goto()应用它用于把呼叫发送到另一个context、extension以及priority
6.需要一个extension来处理主叫方没有及时输入的情况。如果主叫方在Background()完成语音文件播放后很久才按键,呼叫将被转移到textension。需要一个用来处理非法输入的extension,从而在主叫方按下一个无效输入
7.Dial()应用把不同的主叫方链接到一起。Dial()需要4个参数。第1个是呼叫的被叫地,由呼叫所采用的技术、反斜线、远地资源等组成。Dial()应用的第2个参量是超时,单位为秒。如果给定了超时参量,Dial()会一直对被叫地进行呼叫,直到有人接听,或者主叫挂断。Dial()应用的第3个参量是可选择的字符串。它包含一个或多个能够影响Dial()应用行为的字符。选项的列表太长,不能在这里逐一列出。最常用的一个是字母r。如果把字母作为第 3 个参量,在通知被叫通道有来电的这段时间内,主叫方会听到振铃声音。Dial( )应用的最后一个参量是URL。如果被叫通道支持在呼叫的同时接受URL,那么所指定的 URL将被发送。这个参量很少使用。
1 [general]2 exten => 10001,1,Dial(SIP/10001);3 exten => 10002,1,Dial(SIP/10002);
简单的例子说明:
(1) 应答,播放语音,挂掉
exten=>s,1,answer ; 接听
exten=>s,2,Playback(hello-world);播放语音文件
exten=>s,3,hangup();挂断
范例:
exten=>123,1,Answer
exten=>123,2,Playback(tt-weasels)
exten=>123,3,Voicemail(44)
exten=>123,4,Hangup
这是单个名为“123”的extension的定义。但一个呼叫被安排到 extension 123,Asterisk将自己回答这个呼叫,播放一个名为“tt-weasels”的声音文件,提示用户是否留下语音邮件,然后挂断电话。
应该注意的是,Asterisk没有关注这几行代码在extensions.conf文件中的顺序。
语音信箱的使用和配置
在voicemail.conf中建立语音信箱
8001=>1234,8001,8001@device;
说明:箭头左边的8001是邮箱号码,箭头右边1234是邮箱的密码,8001是邮箱主人的名字,8001@device是邮箱所有者的Email地址
在extension.conf中添加语句
exten=>_X.,1,Dial(SIP/${EXTEN},r,10) ;呼叫连接当前的通道
exten=>_X.,2,Voicemail(u${EXTEN}@default) ;在十秒钟内没有接听电话,不可用的信息能被播放
exten=>_X.,102,Voicemail(b${EXTEN}@default) ;它将我们的呼叫送往语音邮件,将听到忙的消息
电话会议的配置
[rooms]
conf=>1001,1111,2222 声明会议室号是1001,普通用户进入密码1111,管理员密码2222
要使用web功能要配置http.conf,manager.conf
如要使用web功能,在这两http.conf中设置:
enabled=yes
enablestatic=yes
在manager.conf中设置:
[general]
displaysystemname = yes
enabled = yes
webenabled = yes
port = 5038
[administrator]//添加asterisk
gui用户
secret = 123456
read = system,call,log,verbose,command,agent,user,config
write = system,call,log,verbose,command,agent,user,config
[astbillman]//添加astbill用户
secret = ab87AstBtii3
deny=0.0.0.0/0.0.0.0
;permit=81.229.203.216/255.255.255.255
permit=127.0.0.1/255.255.255.255
read = system,call,log,verbose,command,agent,user
write = system,call,log,verbose,command,agent,user
cdr_mysql.conf的配置
[global]
hostname=localhost;
dbname=asteriskcdrdb
table=cdr
password=password
user=asteriskcdruser
port=3306
sock=/var/lib/mysql/mysql.sock
userfield=1
在每次通话结束后,运行mysql,使用asteriskcdrdb数据库就能看到cdr表下产生的话单
res_mysql.conf 配置
[general]
dbhost = localhost //astbill 数据库
dbname = astbill
dbuser = astbilluser
dbpass = astbill419
dbport = 3306
dbsock = /var/lib/mysql/mysql.sock
logger.conf配置
[logfiles]
debug => debug
console => notice,warning,error
messages => notice,warning,error //都是设置要输出的信息。
;保存在/var/log/asterisk下
[default]
include => DID //包含DID context
include => featuremap //可以使用features.conf中定义的功能
include => parkedcalls //支持call park
exten => 1000,1,saydigits(${EXTEN})
exten =>
1000,2,Set(DYNAMIC_FEATURES=testfeature#musichold#record#unrecord)
exten => 1000,3,background(hello-world)
exten => 1000,4,waitexten(10,m)
exten => i,1,playback(pbx-invalid)
exten => i,2,goto(default,1000,1)
exten => t,1,playback(vm-goodbye)
exten => t,2,hangup()
exten => 1,1,goto(internal,s,1)
exten => _9.,1,goto(out-bound,s,1) //拨9呼外线,需另外写out-bound context。
exten =>
500,1,voicemailmain() //收听语音信箱内容
exten => 500,2,hangup()
exten =>
1234,1,meetme(,IpM) //拨500加入会议,会提示输入会议号和密码
exten => _5XXX,1,Dial(SIP/ServerA/${EXTEN:1},30,r) //拨5呼叫serverA下的用户
exten => _5XXX,2,Answer()
exent => _5XXX,3,hangup()
[internal]
include => featuremap
include => parkedcalls
exten => s,1,Ringing
exten => s,n,wait,2
exten => s,n,background(enter-ext-of-person)
exten => s,n,waitexten(10,m)
exten => _1XX,1,wait(3)
exten =>
_1XX,2,Set(DYNAMIC_FEATURES=testfeature#musichold#record#unrecord)
exten => _1XX,3,Dial(SIP/${EXTEN},10,tTwW)
exten => _1XX,4,playback(vm-nobodyavail)
exten => _1XX,5,voicemail(u${EXTEN}@default) //超时5秒转语音信箱
exten => _1XX,6,hangup()
exten => _1XX,104,playback(tt-busy)
exten => _1XX,105,voicemail(b${EXTEN}@default) //用户忙转语音信箱