`

asterisk拨号方案的配置

 
阅读更多

===================================================

 http://skytony.spaces.live.com/blog/cns!3ADCAF7D549E5C1E!209.entry

 

配置文件 “extensions.conf” 包含了Asterisk的拨号方案(dial  plan)。它的所有操作的控制和执行流程的主要方案。它控制呼入和呼出是如何被处理和路由。这里是你配置连接行为的地方。
 
"extensions.conf"的内容以“节”的形式组织。它可以静态设置和定义,作为上下文被执行。设置节有general 和 globals 两种形式,由系统管理员完全定义。一种特殊类型的“contexts”是 macros,由用户自定义,命名前缀是“macro-”,这是可重用的模式,如同编程语言里的“过程”。extensions.conf中每一节都由 []中的节名开始。这使得extensions.conf具有和windows世界里传统的ini文件非常相似的结构。
 
 
Asterisk v1.2中的新东西: 默认情况下,有一个新的选项“autofallthrough”被设置成了“yes”. 这个设置改变了以前的规则使得遇忙,阻塞,挂起的呼叫被立即终止。如果你正在为IVR写一个extension.你必须使用“WaitExten”应用程序。
 
[general]   extentions.conf文件的顶部,配置几个设置。
[globals]  接着,在[globals]节中,你可以定义全局变量/常量,以及他们的初始值。
 
Contexts 和 Extensions
     在[general]和[globals]之后,extentions.conf文件的剩余部分就是dialplan的定义了。
dialplan是由contexts的集合组成的。每个context是由extensions的集合组成。
 
Extension 模式
     当你在context中定义extension时,你不仅使用文字数字,字母,还要匹配extension模式。
 
 
Context包括的内容
   一个extension context可以嵌套另一个,参考一下下面的范例:
 Context "default":
         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"
 
这里我们定义三种 extension
第一种content: default 允许拨打三个电话extension: Mark, Wil, and the Operator.
 
第二种content: local      一个扩展模式:允许拨打7位数字号码(本地呼叫),同时也包括
                                   “default” context,这样也允许用户拨打 Mark,Wil,或者是操作员。
 
第三种content: longdistance 一种允许拨打长途呼叫的扩展模式。它同时也包括上述的两种模式
                       (default 和 local)
 使用扩展context,你可以谨慎的控制哪些人使用计费服务(内线,市话,长途)
 
如果一个拨叫号码匹配多个模式,你可以参阅一下“扩展模式的排序”
 
 
当Asterisk从一个通道上收到一个呼入连接,Asterisk从context定义中查询通道命令。context根据用户拨打的 extension定义了不同的命令集。例如,如果用户拨打的是“123”,context可以提供提供一套命令集来指导如何去做。如果用户拨“9”, context可以提供另一套命令集来指导做什么,同时context可以提供一套命令集来控制用户拨打的任何以“555”开头的号码。
 
某些类型的友好连接,比如来自外线的呼入,用户没有拨打extension,在这种情况下,...
 
比方说,举个例子,你有一个信道“Zap/1”,它连接到你办公室中的一个电话手持设备。假如在Zap信道的的配置文件 (zapata.conf)中,你为Zap信道1定义了context=john.这样当你使用那个手持设备拨打一个号码时,Asterisk在 extension.conf中寻找名为“john”的context,找出它所应该做的(工作)。
在extensions.conf中定义一个名为john的context,应该以下面的样子开始:
 
[john]
 
每一个context,你需要定义一个或者多个extensions,Asterisk根据不同的号码拨叫用来比较。
每个extension,通过命令集列表告诉了Asterisk应该做什么。
 
 
 Extensions
 
extension 有两种类型: literal 和 pattern
 
literal extension 可以是一个号码,就像123。它也可以包括出现在传统电话中的标准的符号*和#,因此,12#89*是一个有效的extension.某些电话拨号盘有一些特殊的标着 A,B,C 或者 D 的 DTMF键。extension也可以使用这些字母来定义。实际上,extension的名字可以包含任何字母和数字以及某些标点符号。
   
       extension名字是大小写敏感的?是的。有时是大小写敏感的,有时不是。当用户使用他们的VoIP电话拨打名为"OFFICE"的  extension 时,Asterisk不会执行名为“Office”的extension中定义的命令。另一方面,extension的名字不是大小写敏感的,因此你不能在一个content中
定义仅仅是大小写不同的extension.因此你不能为“OFFICE”extension定义一套程序集,同时为"office"extension也定义一套程序集。
 
预定义的Extension名称。
Asterisk为特定的目标指定了一些extension名称。
  • 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.

例子: Asterisk - dual servers

 

从外部控制 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拨号方案常用函数

    理解并熟练运用这些Asterisk拨号方案函数,可以帮助你创建复杂而灵活的电话系统,满足各种业务需求。在实际使用中,根据实际情况调整参数和功能,可以实现自动应答、语音导航、呼叫转移、会议等功能,极大地提高了...

    asterisk拨号方案中应用使用详解

    "asterisk拨号方案中应用使用详解" Asterisk拨号方案中应用使用详解是指在Asterisk系统中使用拨号方案来实现各种应用的技术手段。本文将对Asterisk拨号方案中的各种应用进行详细地解释和示例。 1. Authenticate:...

    asterisk info 录音实现方案

    Asterisk录音方案通常要借助于其配置文件,例如features.conf,来实现对DTMF信号的响应。 描述中说明了方案涉及到的关键信息,包括主叫(caller)和被叫(callee)信息的传输。在Asterisk系统中,可以通过DTMF信号...

    Asterisk 简介 Asterisk 架构 Asterisk程序框图

    Asterisk由Digium公司开发,最初由Mark Spencer在1999年创建,旨在为Linux操作系统提供一种低成本的PBX(Private Branch Exchange)解决方案。随着时间的发展,Asterisk已经成为全球最受欢迎的开源通信平台之一。它...

    Asterisk 1.4 配置手册

    ### Asterisk 1.4 配置手册知识点详解 #### 一、Asterisk简介与特点 **Asterisk** 是一个开源的电话系统平台,它支持多种语音通信技术,包括传统的电话网络(TDM)和互联网电话(VoIP)。自问世以来,Asterisk ...

    asterisk AGI应用说明

    本文将详细介绍如何在Asterisk中使用AGI接口,包括AGI的基本概念、配置方法、常见应用场景以及一些实用技巧。 #### 二、AGI基础 ##### 2.1 AGI脚本执行方式 执行AGI脚本时,`Application`字段应设置为`agi`,其...

    asterisk16版本安装包

    总的来说,Asterisk 16版本安装包提供了一个强大的VoIP解决方案,通过详细的编译和配置,我们可以搭建出一个功能丰富的通信系统,满足各种业务需求。不过,由于Asterisk具有高度灵活性和复杂性,因此在使用过程中...

    Asterisk配置笔记

    其中,zaptel.conf 文件用于配置硬件接口,zapata.conf 文件用于配置 Asterisk 的接口,extension.conf 文件用于配置拨号方案,sip.conf 文件用于配置 SIP 协议,iax.conf 文件用于配置 IAX 协议。 三、FXO 与 FXS ...

    好用的asterisk工具

    - **Asterisk配置**:Asterisk的配置涉及多个文件,包括sip.conf(SIP配置)、extensions.conf(拨号计划)和iax.conf(IAX2配置)。正确配置这些文件是确保Asterisk正常工作的关键。 - **模块化设计**:Asterisk...

    Asterisk AMI 接口代码

    4. **配置管理**:修改或查看Asterisk的配置文件。 5. **实时日志访问**:获取Asterisk的日志信息。 在Java库`asterisk-java`中,开发者可以使用提供的API来建立连接、发送命令、处理事件。以下是一些关键类和方法...

    asterisk语音板卡安装配置文档

    - 完成基本安装和配置后,还需要配置Asterisk软件本身,包括定义拨号计划、IVR菜单、路由规则等。这通常通过修改Asterisk的配置文件(如`extensions.conf`和`dialplan`)来完成。 7. **故障排查** - 在遇到问题时...

    asterisk原版

    3. Asterisk的拨号方案设计:例如如何使用Dial()应用来处理呼叫,以及如何通过Asterisk的拨号计划来构建复杂的呼叫路由逻辑。 4. 与外部系统的集成:如何将Asterisk与PBX、SIP电话、VoIP网关等传统和新兴的通信设备...

    Asterisk 中文文档说明

    这包括如何在不同的操作系统上安装Asterisk,如Linux,以及如何配置网络设置、拨号计划和语音邮件系统。这些内容对于初次接触Asterisk的人来说非常实用,因为它们提供了构建基本电话系统的蓝图。 Asterisk的脚本...

    Asterisk配置.doc

    例如, `[1111]`、`[2222]`和`[9999]`是三个不同用户的配置,每个用户都有一个唯一的ID(username)、密码(secret)和拨号方案(context)。`host=dynamic`表示IP地址会动态分配,`nat=yes`表明用户位于NAT路由器...

    Asterisk 客户端.rar

    在压缩包里,可能包含关于如何配置和使用这些客户端的详细指南,包括设置连接、拨号计划、通话记录等功能的实现。 2. **Asterisk Manager API (AMI)**:AMI是Asterisk的核心管理接口,它提供了一种通过网络控制...

    Asterisk基本配置PPT

    - **基本配置**:Asterisk的基本配置包括但不限于网络设置、硬件配置、电话号码路由等。其中最重要的是对电话硬件的配置,这通常涉及到对电话线路的支持,如FXO/FXS端口的配置。此外,还需要对电话号码进行路由规划...

    Asterisk权威指南 第3版 中文

    2. **安装与配置**:详述如何在各种操作系统(如Linux)上安装和配置Asterisk,包括获取最新版本、设置环境、配置文件解析等。 3. **电话网络概念**:深入理解VoIP的基本原理,如IP电话、编码和解码、QoS(Quality ...

    Asterisk全局变量分析

    本文将详细介绍Asterisk中的全局变量及其在拨号方案中的应用。 #### 二、全局变量定义与作用 全局变量是Asterisk中定义的一类特殊变量,它们在整个PBX环境中都是可见和可访问的。全局变量通常被用来存储一些常量值...

Global site tag (gtag.js) - Google Analytics