extensions.conf介绍

1.     整体介绍

Asterisk的拨号方案在文件extensions.conf 中定义。文件 extensions.conf 通常在/etc/asterisk/目录下。拨号方案由4 部分组成:contexts、extensions、priorities和 applications。

(1)      Context :

l  Context 用来对 extension的组命名。简单说来,它把拨号方案的不同部分进行分离,免得彼此交织在一起。在一个context中定义的extension完全独立于在另一个context中定义的extensiont。Contexts 的表示方法是把名字放在方括号([])的中间。这个名字可以由A-Z(大小写都可以)、数字0-9,以及连字号和下划线组成[*]

l  设置节有general 和 globals 两种形式,由系统管理员完全定义。一种特殊类型的“contexts”是 macros,由用户自定义,命名前缀是“macro-”,这是可重用的模式,如同编程语言里的“过程”。extensions.conf中每一节都由[]中的节名开始。

l  [general]   extentions.conf文件的顶部,配置几个设置。

l  [globals] 接着,在[globals]节中,你可以定义全局变量/常量,以及他们的初始值

(2)      Extension :

l  在每一个 context 内,可以定义一个或者多个extension。 Extension是Asterisk要执行的指令,由来电或者通道上所拨数字来触发。Extension 规定了在呼叫通过拨号方案是,对其采取哪些处理。

l  extension 的语法是单词exten 后面跟着一个由等号和大于号组成的箭头,如下所示:exten=>之后是 extension 的名字。在与电话系统打交道的时候,我们把extension 看作是呼叫另一部电话所拨的号码。

特殊的extension:i:Invalid ;s:Start ;h:Hangup;t:Timeout T:AbsoluteTimeout ;o:Operator

l  extension.conf 文件中的句法,一个extension执行的每一步是下面这个格式的:exten =>name,priority,application(parameters)

1.      每个 extension 都可以有多个步骤,称作priorities。每个priority都按顺序编号,从1开始 (实际上,这个规定有个例外,如在Unnumbered Priorities Actually所介绍的那样)。每个 priority执行一个规定的应用。

2.Priority编号增加了新的变化,引入了npriority,表示“下一个”的意思。每次Asterisk遇“n”这个priority的时候,就取出前一个priority的编号加上1

 (3)Application:

l  应用是拨号方案中的劳动力。每个应用针对当前通道完成规定的动作,比如播放声音、接受音频拨号输入,或者挂断电话等。

l  具体的应用使用见Asterisk DialPlan中文翻译

l  详细介绍一下常用的应用函数

1.      Answer( )应用用于接听正在振铃的通道。

2.      Playback()应用用于在通道上播放事先录制好的语音文件。在使用Playback( )应用时,系统不会理会来自用户的输入。若要使用Playback( ),要指定一个文件名(不要带扩展名)作为参量。要特别说明的事,您也可以在文件名上包括完整的路径。

3.      Hangup( )应用挂断一个正在活动的通道

4.      Background()应用播放事先录制好的语音文件当主叫方按下电话键(1 个或者多个)的时候,会中断语音的播放,转到与所按数字对应的extension。Background( )应用通常用于创建语音菜单。

5.      Goto( )应用它用于把呼叫发送到另一个context、extension 以及 priority。

6.      需要一个 extension来处理主叫方没有及时(默认的时间是10 秒)输入的情况。如果主叫方在Background( )完成语音文件播放之后很久才按键,呼叫将被转移到t extension。需要一个用来处理非法输入的extension,从而在主叫方按下一个无效输入

7.      Dial( )应用把不同的主叫方连接到一起。Dial( ) 需要 4 个参量。第 1 个是呼叫的被叫地,由呼叫所采用的(传输)技术、反斜线、远地资源(通常是通道名称或编号)等组成。Dial( )应用的第2 个参量是超时,单位为秒。如果给定了超时参量, Dial( ) 会一直对被叫地进行呼叫,直到超时后才放弃,然后转移到该extension 中的下一个priority。如果没有指定超时时间,Dial( )会一直呼叫该通道,直到有人接听,或者主叫挂机。Dial( )应用的第 3 个参量是可选择的字符串。它包含一个或多个能够影响Dial( )应用行为的字符。选项地列表太长,不能在这里逐一列出。最常用的一个是字母r。如果把字母作为第 3 个参量,在通知被叫通道有来电的这段时间内,主叫方会听到振铃声音。Dial( )应用的最后一个参量是URL。如果被叫通道支持在呼叫的同时接受URL,那么所指定的 URL将被发送。这个参量很少使用。

2 . 简单的例子和说明

(1)    应答,播放语音,挂掉

exten=>s,1,answer ; 接听

exten=>s,2,Playback(hello-world);播放语音文件

exten=>s,3,hangup();挂断

(2)    添加两个分机,

l  在sip.conf中添加两个分机

[1000]

type=friend

username=1000

accountcode=1000

secret=1000

context=from-exten-sip

;followed advance settings

host=dynamic

nat=yes

qualify=2000

canreinvite=no     

callgroup=0,

pickupgroup=0,

setvar=

call-limit=1

[1001]

type=friend

username=1001

accountcode=1001

secret=1001

context=from-exten-sip

;followed advance settings

host=dynamic

nat=yes

qualify=2000

canreinvite=no     

callgroup=0,

pickupgroup=0,

setvar=

call-limit=1

l  实现用一个分机呼叫另一分机,

在extension.conf中添加[incoming]上下文。

[incoming]

exten=>_X.,1,Dial(SIP/${EXTEN});说明_X.模式匹配,匹配任何电话号码。${EXTEN}通道变量,拨了某个extension,Asterisk会把通道变量${EXTEN}设置为所拨的数字。

exten=>_X.,2,Playback(vm-nobodyavail);被叫地没有应答,Dial() 会继续到该 extension 的下一个priority。

exten=>_X.,3,Hangup();        挂断

exten=>_X.,102,Playback(tt-allbusy);但是,如果被叫通道忙,Dial()将转到priority n+101,如果其存在的话(其中的 n 是 Dial( )被调用的priority)

exten=>_X.,103,Hangup();挂断

 

l  简单的语音菜单的设计

[test]

exten=>s,1,Answer();                    应答            

exten=>s,2,Background(enter-ext-of-person);在等待分机的时候播放声音文件

exten=>101,1,Playback(101);               播放号码101

exten=>101,2,Playback(goodbye);          播放语音goodbye         

exten=>101,3,Hangup();                   挂断

exten=>102,1,Playback(102)           播放号码101

exten=> 102,2,Playback(goodbye)       播放语音goodbye

exten=>102,3,Hangup()                挂断

exten=>i,1,Playback(pbx-invalid);       输入不可用信息 播放语音pbx-invalid

exten=>i,2,Goto(test,s,1);            跳转到起始

exten=>t,1,Playback(vm-goodbye);     超时时播放语音goodbye

exten=>t,2,Hangup();                挂断

 

l  语音信箱的使用(在FreePBX中可以实现)

在voice.conf中建立语音信箱

 8001=>1234,8001,8001@device;说明:箭头左边的8001是邮箱号码,箭头右边1234是邮箱的密码,8001是邮箱主人的名字,8001@device是邮箱所有者的email地址

 

8002=>1234,8002,8002@device

 

在extension.conf中添加语句

[vm]

exten=>_X.,1,Dial(SIP/${EXTEN},r,10)              ;呼叫连接当前的通道        

exten=>_X.,2,Voicemail(u${EXTEN}@default)     ;在十秒钟内没有接听电话,不可用的信息能被播放

exten=>_X.,102,Voicemail(b${EXTEN}@default)  ;它将我们的呼叫送往语音邮件,将听到忙的消息

l  电话会议(在FreePBX中可以实现)

在meetme.conf中添加会议

 Conf=>400,1234,5678  ;说明400是会议名称,1234是进入会议的密码,5678是管理员的密码

在extension.conf中添加命令

 Exten=>18,1,Answer()

 exten=>18,2,MeetMe(400,i,1234)

 exten=>18,3,Playback(vm-goodbye)

 exten=>18,4,Hangup()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值