===================================================
http://skytony.spaces.live.com/blog/cns!3ADCAF7D549E5C1E!209.entry
Extension Description
101 Mark Spencer
102 Wil Meadows
0 Operator
Context "local":
Extension Description
_9NXXXXXX Local calls
include => "default"
Context "longdistance":
Extension Description
_91NXXNXXXXXX Long distance calls
include => "local"
- i:Invalid
- s:Start
- h:Hangup
- t:Timeout
- T:AbsoluteTimeout
- o:Operator
详细信息: Asterisk standard extensions
定义Extension
不同于传统的PBX,extension是和电话,接口,菜单等联系在一起的。在Asterisk中,一个extension是定义成命令执行列表的。就像Dial和GotoIf命令,具有基于不同的条件转到某个地方的能力。
当一个extension被拨叫,标为优先级1的命令被执行,紧接着是2,等等。
这将一直持续到:
- 呼叫被挂起。
- 命令返回代码-1(表示失败)
- 下一个更高优先级的命令不存在。(注意:Asterisk不会跳过丢失的优先级别)
- 呼叫被路由到一个新的extension
extension.conf 文件中的句法,一个extension执行的每一步是下面这个格式的:
exten = extension,priority,Command(parameters)
这里等号也可以用一个箭头来修饰,就是“=〉”,一种在很多例子中经常可以被看到的格式。
好了,假如一个“context”,名为“john”。在每一个context中,你可以定义一个或多个 extension.每一个extension中,你定义一组命令集。你如何定义这些extension和命令?你需要一个文本编辑器来编辑 extensions.conf文件。当然,也可以使用某些不错的工具:GUI tool.
extension中的执行步骤和命令行组件是下面的样子:
- extension 是extension的标签,可以是字符串常量或者是动态的模式-匹配许多可能的电话号码。
- priority 通常是正数(特例参见注意)。它是一个extension中的每个命令行的排序号码。第一个可执行命令的priority值为“1”。因此当Asterisk将一个呼叫转入一个extension时,它将首先寻找priority值为1的命令。如果没有优先值为1的行,那么这个extension将不会匹配这个拨入的号码。当执行完优先值为1的命令之后,Asterisk将把priority的值增加到2,除非命令本身决定下一个要执行的优先值。如果extension中没有定义下一个priority,Asterisk将完成对这个 extension的处理,即使是存在一个比丢失的命令的优先级更高的命令。
注意:特殊情况下,字符串也会被用于指定优先级(参见 Asterisk standard extensions)。
- command 是命令的名称(也被称为“应用程序”)。详见 Asterisk Commands List.
- parameters 依赖于命令。某些命令没有参数,在这种情况下省略参数。
范例
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文件中的顺序。你可以以不同的顺序混合这几行代码,就像下面的例子,它与之前的例子没有什么不同,因为Asterisk使用priority来标示每一行的执行顺序。
exten=>123,4,Hangup
exten=>123,1,Answer
exten=>123,3,Voicemail(44)
exten=>123,2,Playback(tt-weasels)
定义extension时的其它选项包括被称为“ex-girlfriend”逻辑的选项。这个逻辑将匹配extension,不管是来自外部还是内部,关键是看拨入人的呼叫ID(caller id).例如:
exten=>123/100,1,Answer()
exten=>123/100,2,Playback(tt-weasels)
exten=>123/100,3,Voicemail(123)
exten=>123/100,4,Hangup()
只有当呼入人的ID号为100时,这个extension才被匹配,并且执行接下来的选项。这个也可以通过模式匹配来完成,如下所示:
exten=>1234/_256NXXXXXX,1,Answer()
and so on ...
只有以256开头的Caller ID才会匹配“1234”这个模式。这在保持本地呼叫时是很有用的。
你甚至可以做这样的事情:
exten=>s,1,Answer
exten=>s/9184238080,2,Set(CALLERID(name)=EVIL BASTARD)
exten=>s,2,Set(CALLERID(name)=Good Person)
exten=>s,3,Dial(SIP/goodperson)
定义context的语法关键字有: exten,include,ignorepat以及switch
详见:How Does Asterisk Handle "Match As You Go" Dialing?
这种extension的排序办法存在的一个弊端是-如果你需要插入或删除一个priority时,你必须手动重新全部编号。我正在搞这么一个工具用来处理这件事情,感兴趣的话,可以尝试一下:give it a try
Asterisk1.2以后的版本有一个新的方法处理这件事情。第一个优先级给它编号,接下来的优先级给它命名成“n”. 深入的了解:Asterisk Priorities
变量和表达式
支持变量的结构 ${VARIABLENAME}
使用表达式的结构${EXPRESSION} ,这里表达式可以是常用表达式,比较表达式,加法表达式等等。
标准变量见: Asterisk variables 。表达式的描述见: Asterisk readme.variables
extensions.conf 文件中的全局变量和信道变量的更多信息,见Using Variables in Asterisk Dialplans
1.2版本中的新的拨号功能,见:Using Functions in Asterisk Dialplans
载入
在设置发生了改变之后,如果想重新加载拨号方案,无需加载所有的Asterisk配置文件。可以使用extension加载命令:Asterisk CLI
一个大文件还是几个小文件?
当在extension.conf文件中使用 #include<filename> 声明时,包含了其它的文件。用这个办法你可以启动这样一个系统:extensions.conf是主文件,users.conf包含你的本地用户,services.conf包含各种服务-例如会议系统。使用这个方法,拨号方案可能更容易维护。#include<filename>声明不同于include<context>声明。#include声明在所有的配置文件中都可以使用。
转到其它的Asterisk
语法:
[iaxprovider]
switch=>IAX2/user:[key]@server/context
指定转到其它的服务器。user 和 key 需要在被呼入的服务器的iax.conf文件中定义。
context是被转入的服务器的extensions.conf文件中的context.
从外部控制 extensions.conf
Asterisk extensions from mysql
所有的 .conf 文件都可以使用 #include 声明包含另一个.conf 文件。
使用范例:
#include "my-extra-config-file"
[globals]
ALL= Zap/1&SIP/1000&SIP/1001
[default]
exten=>s,1,Answer
exten=>s,2,Playback(welcome-message)
exten=>s,3,Goto(context-in-include-file,s,1) ;go to include 文件中定义的 context
:
:
范例:
使用宏创建extension
[globals]
PHONE1=Zap/1
PHONE2=SIP/6002
[macro-oneline]
exten=>s,1,Dial(${ARG1},20,t)
exten=>s,2,Voicemail(u${MACRO_EXTEN})
exten=>s,3,Hangup
exten=>s,102,Voicemail(b${MACRO_EXTEN})
exten=>s,103,Hangup
[local]
exten=>6601,1,Macro(oneline,${PHONE1})
exten=>6602,1,Macro(oneline,${PHONE2})
相关推荐
asterisk拨号方案中应用使用详解,有详细的说明和例子
这是一些关于拨号常用的函数,通过这些函数可能更深了解拨号
天体图Astograph是一个简单的python工具,可以直观地表示您的Asterisk拨号计划它使用 GraphViz 绘制包含上下文之间的链接例子考虑以下extensions.conf文件: 和以下命令: cat extensions.conf | ./astograph.py | ...
asterisk 拨号方案中的applcations 中英文对照
如何把asterisk的配置从配置文件迁移到数据库中 更多内容参考:http://www.voip-info.org
对asterisk有一定的简单认识之后,需要对asterisk进行更高级的复杂的拨号方案的配置之时,电话的未来之路已经不能再给予帮助,那么这个拨号方案就是一个必须品。里边详细讲解了如何使用变量和如何编写复杂的拨号方案...
详细写了如何实现asterisk视频通讯功能的 每步都有截图噢!
Asterisk全局变量分析说明 涉及拨号方案
asterisk 使用info 触发录音,http告知服务器;带有主叫信息,被叫信息等。
Asterisk 简介 Asterisk 架构 Asterisk程序框图
该电子书提供详细的Asterisk 1.4的介绍、配置和编程,非常适合Asterisk的初学者。
Asterisk权威指南(第3版)第05章用户设备配置 Asterisk权威指南(第3版)第06章Dialplan基础 Asterisk权威指南(第3版)第07章外线连接 Asterisk权威指南(第3版)第08章语音邮件 Asterisk权威指南(第3版)第10章深入...
Asterisk服务器搭建和配置文档.docx
这一章介绍 Asterisk 的核心部件,拨号方案。 第六章 更多的拨号方案概念 这一章将介绍更多的高级的拨号方案的概念。 第七章 了解电话 这一章与 Asterisk 无关,而是讨论一些更加重要的应用于公共电话网的技 术 ...
asterisk dial apps (asterisk Dial拨号 APP模块)
使用Asterisk作为SIP.2 H.323网关配置
融博公司与太公网合作,将Asterisk与融博呼叫中心应用生成器融为一体,向客户提供呼叫中心一体化解决方案。主要解决以下三个方面的问题:提供基于Asterisk软交换的快速应用开发平台;融博CRM与Asterisk软交换紧密...
星号语法高亮 一个简单的Brackets扩展名,用于突出显示Asterisk拨号计划代码。
asterisk安装与配置.pdf