您的当前位置:首页正文

《Asterisk 使用资料》

来源:画鸵萌宠网
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从文件中去除身份标签).

keys/ 使用公钥和私钥系统认证与一个由RSA数字签名形成的一对等连接.公钥和私钥的扩展名分别为.pub和.key

firmware/ 这个目录含了很多Asterisk相兼容的设备固件,它只有iax/这个子目录,其中有Digium的IAXy的二进制固件镜像.

images/ 只有在较多的支持并且利用图解式的图像设备被发布,这个目录将会与相应的目录有更大的关联.

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

================配置文件================ /etc/asterisk/asterisk.conf 主要配置文件,

/etc/zaptel.conf 硬件接口的基本层.修改这个配置文件要用modprobe装载Linux Kernel使用模块.

/etc/asterisk/zapata.conf 为硬件配置Asterisk的接口. /etc/asterisk/extensions.conf 拨号方案. /etc/asterisk/sip.conf SIP协议配置文件 /etc/asterisk/iax.conf 呼入和呼出IAX通道 /etc/asterisk/extensions.conf 拨号方案配置文件

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

Asterisk developer\\'s documentation 翻译计划 by serva

今天,Asterisk已经成为一个VOIP业界使用最广泛的一个集成电信级别PBX的工具,IPPBX如今已经成为VOIP商家争夺的一块重要市场,在我们越来越熟悉使用Asterisk的同时,我们希望能够越来越深入的了解asterisk,特别是对于开发人员,如果有自己特定的需求,在复杂的asterisk文件夹和asterisk的源代码文件中迷失了方向,不知所措。

在使用asterisk后,我们知道, Asterisk就是一台企业级的电话交换机,它功能的特点有:语音邮件,电话会议,呼叫路由,呼叫列队,呼叫转移,音乐保持等。然后这些功能是如何实现的,SIP和H323之间是如何进行通话的?甚至,我们也许也要问更基础一点的问题,SIP和SIP之间是如何进行通话?信令是如何控制,通话流程是怎么样?包括语音是如何进行交换传输的?这些都是我们开发人员希望了解,或者说对asterisk有不同需求的人,需要了解的。但是对于那么复杂的asterisk的代码,我们如何下手?飞云提出了对http://www.asterisk.org/doxygen/进行中文的翻译,这样可以使得有需要的人,能够初步的了解Asterisk的文件结构和文件的大概功能,可以使得更多的人参与到我们的队伍中来,一起完成对asterisk所有源码的注释。

在http://www.asterisk.org/doxygen/中,我们可以看到modules这个选项,在1.4版本中,出现了Main文件夹,将之间版本的直接放在asterisk的根目录下的一些文件,转移到Main文件夹中,其中Main文件夹中很多文件就是对应的Main_options module。AMI functions 主要对应的源码放在manager.c文件中。此外,还有CLI_functions,CDR,Asterisk Channel Drivers,Dial plan applications等。

对asterisk源码的重要性和规整,如下表,按照modules来放置。

Format和codec的部分,由于需要的知识比较广,也比较专业,偏向于编码方面,而对于asterisk本身而言,在意的不是format或者codec本身,而是他们提供出来的接口,使得asterisk在媒体数据交换的时候,可以查到对应的编码,或者可以调用对应的压缩算法而已。所以我建议,只需要翻译有代表的几个。上面的列表中,列出来的只是.c的文件,我们翻译的时候,会对应到很多相应的.h文件,其中很多.h文件包含了大量的数据结构的定义,是对于理解asterisk非常有帮助的。

在http://www.asterisk.org/doxygen/中,file list中对应的文件,都会有Data Structures,而每个文件的Data Structures里面包含的结构,都可以Data Structures总的列表中找到Struct Reference,所以,我们在翻译的时候,以.c文件为主要翻译的对象,其中有函数的说明,程序中代码段的注释,还有其他的一些文字性的说明,然后.c文件对应的Data Structures 需要翻译到总的列表中的Struct Reference、也是归于.c文件翻译的范围之内。

此外,在http://www.asterisk.org/doxygen/中,还有Modules,Directories和Related Pages目录,Modules,Directories目录需要翻译当前页连接文件的内容。这个对于代码是相关联的。而Related Pages目录的东西,属于周围相关文档,可以参照翻译的人数来决定。

翻译只是我们熟悉的第一步,其实http://www.asterisk.org/doxygen/中,做的代码注释和介绍,是比较有限的,很多方面都没有补齐,我们的最终的目的是注释并掌握整个asterisk的源代码,便于我们自己利用。我们需要通过上面的翻译完成之后,按照翻译整理出一个asterisk的框架结构,包括,核心,扩展,以及应用等。这样可以使得,在代码注释有更多的人,真正能够入手到代码注释,这样可以保证代码注释的质量。

模块 文件 功能 重要性 分工 Main_options

asterisk.c ASTERISK的核心执行程序, 执行着PBX的核心程序和CLI的接口程序 * 飞云

pbx.c PBX的核心程序 * 大头,篇幅较大,后期还要增加人手

channel.c channel驱动的管理和功能接口 * voipmaker&steven(原来是serva,篇幅较大,后期还要增加人手)

rtp.c rtp和rtcp协议的实现,NAT的RTP穿越的实现,转换成asterisk特有的frame形式的实现 * amy

config.c 配置文件的读取和解析,转换成对应的数据结构 file.c 通用文件读写接口,包括日志,音频文件等。 frame.c asterisk的特有的音频形式的处理

io.c I/O管理,对所有的asterisk的channel,或者是rtp做统一的管理 loader.c asteriskl的模块启动程序

app.c extension功能的调度和通用功能的接口 * meng9999 say.c asterisk报声音等的接口

sched.c asterisk的任务调度管理函数(有定时器的功能) dsp.c 软件方式实现dsp的功能 db.c asterisk的数据库管理接口

translate.c 语音或者视频数据的codec转换程序 astmm.c asterisk内存管理程序

Dial plan

applications app_exec.c 所有的app总的执行调度程序 * liumin

app_dial.c dial函数和retrydial 函数对应的实现 * wky,篇幅较大,后期还要增加人手

app_macro.c macro函数执行和实现 app_echo.c echo 函数实现

app_meetme.c meetme会议的实现,提供函数接口给extension调用 app_mixmonitor.c MixMonitor函数,录音包括混音的功能 app_queue.c 队列的实现

app_read.c Read函数的实现,可以用来读取变量的值

app_voicemail.c 语音信箱,包括录制语音,读取语音,发送语音邮件等功能 app_stack.c Stack 应用,Gosub, Return等函数的实现 app_dictate.c Dictate函数实现,模拟指示的生成和发送 app_chanspy.c 监听所有channel语音信息的实现 app_mp3.c mp3文件播放函数的实现

app_playback.c 可以播放任何的asterisk支持的声音文件格式 * (前面有两个空格的)QQ糖

app_softhangup.c 挂机extension函数的实现 app_transfer.c extension函数,转移一路通话

Asterisk Channel

Drivers chan_sip.c SIP协议实现 * 大唐盛世,篇幅较大,后期还要增加人手 chan_h323.c H323协议的实现 * 肉夹馍

chan_local.c local的实现,asterisk在extension中独有的channel驱动程序 * kices

chan_agent.c * leeb

chan_zap.c zaptel的应用层驱动,为zaptel的硬件调用和控制提供接口

chan_features.c

chan_mgcp.c mgcp协议实现 chan_iax2.c iax2协议实现,asterisk特有的通信协议,信令和媒体属于同一端口 chan_phone.c chan_skinny.c

CDR Drivers

cdr.c Call Detail Record的生成程序 cdr_csv.c 文本方式的cdr cdr_custom.c 用户化的cdr

cdr_manager.c CDR的管理程序 cdr_tds.c free tds方式的cdr cdr_odbc.c odbc环境的cdr生成 cdr_pgsql.c pagesql方式的cdr

cdr_radius.c radius方式的cdr * VOIP计费 cdr_sqlite.c sqlite方式的cdr

AMI functions

manager.c asterisk的管理接口 * do-feel astman.c 经过封装的asterisk管理接口

Media File

Formats format_g723.c 723的asterisk编码实现 format_g729.c 729的asterisk编码实现 format_h263.c h263的asterisk编码实现 format_wav.c 线性的asterisk编码实现 format_pcm.c pcm的asterisk编码实现 format_h264.c h264的asterisk编码实现 Codec functions

codec_a_mu.c alaw到ulaw的编码转换实现 codec_ulaw.c ulaw的解编码 codec_alaw.c alaw的解编码 Res functions

res_features.c 呼叫转移,呼叫等待等功能的实现 * serva res_musiconhold.c musiconhold的实现

Asterisk基本配置

Asterisk译为星号(*)在很多应用中被用做通配符,Astrisk做为PBX系统的完美名称,原因之一是Asterisk可以连接数目庞大的接口类型,包括: 1、模拟接接口,如你的电话线或模拟电话. 2、数字线路,如T-1和E-1线路 3、Voip协议,如SIP和IAX

目前正式版本是IAX2,但是IAX1的所有格式都已经停掉.所以当说到IAX都是特拽IAX2 使用接口配置文件

1.Zaptel.conf:硬件接口基层配置,我们将建立一个FX0和一个FXS通道. 2.zapata.conf:硬件配置Asterisk的接口. 3.extension.conf:拨号方案文件. 4.sip.conf:配置SIP协议的文件

5.iax.conf:配置呼入和呼出IAX通道的文件

FXO与FXS通信

区别:区别简单,就在于连接的那端提供拨号音.FXO不生成拨号音,而是接收.FXS端口提供拨号音和震铃电压,在有呼叫的时候提醒用户.两者接口都提供双向通讯(同时双方向的通讯传输).

如果Asterisk有个兼容FXO端口,就可以把电话线接入这端口,可以使用这根电话线呼叫和接收电话呼叫.同理,如果有个FXS端口,可以连接一部模拟电话,Asterisk就可以呼叫这部电话,可能也可以呼叫.(端口:通过配置使用的信令进行定义)

FXS卡必须像中心局(CO)进行运转,使用FXO信令.同理,FXO卡连接CO,就意味着它需要像终端进行运转,使用FXS信令.

Zaptel配置(FXO)

在/etc/zaptel.conf文件,用于配置硬件,可以定义FXS端口与FXO信令的配置:

fxsks=1 ;定义fxs端口采用通道1以ks信令协议 ;fxoks=2 ;定义fxo端口采用通道2以ks信令协议 loadzone=us defaultzone=us 信令协议:Loop start(ls),ground start(gs),kewlstart(ks),使用ks外信令协议,把fxoks中的ks替换ls或gs,Asterisk的模拟电路推荐ks信令协议.

******编辑完zaptel.conf文件,需要使用/sbin/ztcfg -vv装载配置到硬件(不须要详细输出可以省略-vv);修改信令方法需要重启.在编辑sip.conf和iax.conf文档后,分别需要装载chan_iax2.so和chan_sip.so

Zapata配置

[trunkgroups] ;定义一个主干组 ; define any trunk groups [channels] ;硬件通道和他们选项信令方式. ; hardware channels ;硬件通道 ; default ;默认 busydetect=yes ;增加这两行,要不FXO口不能检测到挂机信号。 busycount=5 usecallerid=yes ;设置来电显示 hidecallerid=no ;设置去电不隐藏号码 callwaiting=yes ;设置呼叫等待 threewaycalling=yes ;开启三方通话(先闪断,再呼叫第三方,再闪断,就可以实现三方通话) transfer=yes ;转叫前转(需要三方通话支持) echocancel=yes ;回声消除 echotraining=yes ;回音练习(会话前发个声音,用于测试回声) ; define channels ;定义通道 context=from-test ; Context内执行指令需要在extensions.conf内定义 [from-test] signalling=fxs_ks ;FXO通道使用FXS信令 channel => 2 ; PSTN放在端口2上 允许zaptel和其它设备通过PCI硬件安装到系统中,编辑udev

[root@ask asterisk]# vi /etc/udev/rules.d/50-udev.rules #在末尾添加上以下 KERNEL=\"zapctl\NAME=\"zap/ctl\" KERNEL=\"zaptimer\NAME=\"zap/timer\" KERNEL=\"zapchannel\NAME=\"zap/channel\" KERNEL=\"zappseudo\NAME=\"zap/pseudo\" KERNEL=\"zap[0-9]*\NAME=\"zap/%n\"

Dialplan配置

基本的拨号方案,使用Echo()校验工作通道双向通讯;

[from-test] exten => s,1,Answer() exten => s,n,Echo()

SIP

SIP(会话初始协议),通常用于VOIP电话,进行呼叫建立,呼叫协商,呼叫结束.它帮助两个端互相通认,但它不处理媒体;当呼叫建立后,他通过实时传输协议(RTP)在电话A到电话B直接传输媒体.

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 srvlookup=yet ;建立一个逻辑和可解析地址的方法,你可以达到这个地址,还可以获取DNS很多好处 [10000] username=10000 ;用户名 type=friend ;可以定义用户(user)\\端(peer)\\朋友(friend) secret=123456 ;认证密码 record_out=Always;去电录音Adhoc须要时,Never从不,Always总是 record_in=Never ;来电录音 callgroup ;呼叫组,默认为\"1\" pickupgroup ;代接组 disallow ;不允许编码 allow ;允许编码 port=5060 ;端口号 qualify=yes ;监视Asterisk服务器与电话之间是否延时(默认2,000可达;yes可替换毫秒) context=default ;指令的地点 host=dynamic ;要求号码要注册,以便Asterisk如何找到电话.(static则不需要注册) dtmfmode=rfc2833 ; mailbox=10000@device callerid=test1 <10000> canreinvite=no ; 用户户类型是用于认证呼入呼叫;端类型用于呼出呼叫;朋友类型两种都用.(这个常用在sip.conf与iax.conf中用到)

IAX

IAX(Inter Aasterisk eXchange)协议通常用于服务器间通信.IAX和SIP协议最大区别在于媒体(语音)在端点之间传输的方式不同.

Asterisk默认情况是在5060端口接收SIP信令,在10000-20000端口接收RTP(媒体)流.而IAX所有的信令和媒体流都通过一个端口4569进行传输.这种方式的好处是IAX协议能更适合在NAT相关拓扑的应用.

IAX用户习惯对进入PBX系统的呼叫进行鉴权和处理.对从PBX系统呼出的呼叫,Asterisk应用IAX的iax.conf文件的端点进入(条目)对远端进行鉴权)

通过iax.conf设置进行呼叫的鉴权和处理:

[general] ;至少需要一个主要段落,主要定义IAX协议的相关设置. jitterbuffer=no register => remote_number:password@domain ;注册到远程服务器上,告诉服务器当前位置(互联网位置)在哪 [REC_SERVER] type=user ;用user来定义呼入呼叫的类型 context=incoming ;进行呼入呼叫鉴定 auth=rsa inkeys= ;公钥,是Asterisk标准 通过extensions.conf设置一个incoming的context: [incoming] exten => remote_number,1,Dial(SIP/number) ;拨打远程号码时(呼入)转移到number(内部)号码上 --------以上是IAX入局配置,下面配置出局IAX连接--------

在iax.conf设置呼出条目

[REMOTE_SERVER] type=peer ;用peer定义呼出类型 host=my.receiving.server.ca ;接收服务器域名或IP地址 username=number ;接收服务器认证用户(账户号码) secret=password ;接收服务器认证密码(账户密码) qualify=yes ;不时检查远端的服务器是否响应用 disallow=all ;用于复位原来设置的所有编码信息 allow=gsm ;支持gsm编码 allow=libc ;支持libc编码 allow=g726 ;支持持g726编码 ****使用disallow复位原来设置的所有编码信息.再重新设置支持的编码,优先级从高到低 在extensions.conf设置

[to_remove] exten => remove_number,1,Dial(IAX2/REMOVE_SERVER/number) 拨号方案语法

Asterisk的拨号方案在文件extensions.conf中定义(/etc/asterisk/extensions.con) extensions.conf(四部分:context,extension,priorities,application)

context:用于对extensions组命名,把拨号方案的不同部分进行分离,免得交织在一起. 表示方法是把名字放在[]的中间,名字只能用a~z,A~Z,0~9,以及连字号和下划线组成(空格不在允许的字符里面,context中不要 使用空格).如:[context1],[incoming],[default];所有放在context定义的之后的指令都是这个context一部 分,直到下一个context定义的开始. context的一个重要用途就是加强安全性.如果没有仔细设计拨号方案,可能会造成别人盗用你的系统的不良后果.

extensions:extensions是asterisk要执行的指令,由来电或通道上所拨数字来触发.可以定义电话分机

extension的语法是单词exten后面跟着一个由等号和大于号组成的箭头,如:exten => extension的名字

一个完整的extension由三部分组成:

extensions的名字或号码 priority(每个extension可以有多个步骤,步骤的编号称作priority) 应用(或者命令),针对呼叫完成一些动作 这三个部分用英文逗号分开,如:

exten => name,priority,application() priorities:每个extension都可以有几个步骤,称作priorities 如:

exten=>50001,1,Answer() #编号为1的priority,执行接听电话 exten=>50001,2,Hangup() #编号为2的priority,然后挂电话 必须确保priority从1开始并且连续的编号

application:动作,比如:播放声音,接受音频拨号输入或者挂断电话等. 关于拨号方案基础见:http://lwb12915.bokee.com/viewdiary.13461506.html 如有引用本文http://lwb12915.bokee.com/control/diary/preview.b请注册版权所有

Asterisk PBX 配置文件

简介

Asterisk PBX 有一套自定义的配置文件格式,通过一个内置的配置文件解析器(Parser)进行配置文件的读写操作。从 Asterisk 1.2 版本以后,配置文件的格式有了一些改进,增加了配置模板(template configuration)的支持。配置模板(template configuration)极大的提高了配置的灵活性和可扩展性。

配置文件的改进是在通用配置解析器层次实现的,因此,本文件介绍的这种特性适用于 Asterisk PBX 各个配块的配置文件。本文将简要介绍 Asterisk PBX配置文件的格式。

基本语法

Asterisk 配置文件的基本格式类似下面的样子:

[section]

label1 = value1 label2 = value2

在某些文件中(如: mgcp.conf, zapata.conf 和 agents.conf),格式略有一些差别。这些文件中,配置文件类似如下的样子:

[section]

label1 = value1 label2 = value2 object1 => name1

label3 = value3 label4 = value4 object2 => name2

这 个配置文件可以说是配置模板的原型,简单的说,上面的配置生成了两个配置对像,第一个object1包含了从label1到label2的配置属性(不包 括 label3/label4);第二个object2包含了从label1到label4的配置属性。这样配置显然比重复的写两段配置看上去要优秀一些, 但不难看出,如果需要配置更多有不同属性的配置对像,这种配置方法还是显得比较困难了。 基于模板的新配置文件则可以更好的支持这种需求。配置模板相当于C++中的一个基本类,你可用该基类来创建一个对像,也可以继承这个类,增加基类属 性/方法和重载基类的属性/方法等。简单的说,如果你需要配置十个SIP用户,这些用户大部份均是 friend 类型,非固定IP接入,使用GSM prec,那么,你可以把这些属性定义为一个模板,当实际配置一个用户时,引用这个模板,就不需要再重复定义上面这些属性了。

模板化的配置文件在原来的配置文件格式上略有改变,一个模板化配置文件类似如下的样子:

[section](options) label = value ...

很明显,新的配置文件在原来的 section 的行增加了一个 options 选项参数,这个选项用于定义模板,引用模板或隐藏模板。所有已定义的对像都可以被看作一个模板来引用。 注意:在节名称中括号\"]\"与配置的小括号\"(\"间不能有空格。

注释行

在Asterisk PBX的配置文件中,以分号\";\"开始的行都被当作注释行来处理。新的配置文件引入了多行注释的支持,多行注释由分号和两个减号 \";--\"开始,以两个减号加分号\"--;\"结束。除了支持多行注释处,这种注释还支持行内注释,即,在同一行中,位于 \";--\"和\"--;\"以外的内容不会被当成注释,而是当成正常的配置内容来对待。了解C语言的用户更容易理解这种注释,因为它与C++中\"//\"注释和\"/* */\"注释的功能和差别是一样的。配置文件中的注释行类似如下的样子:

; 这是Asterisk 配置文件单行注释,这一整行都是,直到回车,下一行是配置内容

label = value

;-- 这是一个 Asterisk PBX 配置的多行注释,回车,

嗯,就像这样,也没有关系,没有遇到结束标志,Asterisk config parser会一

直把所有内容都当成是注释,直到它的出现 --;

;-- 也可以这样把注释和配置混到一起 --; extern => 119,1,Dial(Zap/1)

包含其它配置文件

Asterisk PBX 所有配置文件都可以通过 #include来包含其它配置文件的内容,被包含文件的内容将被加入到当前配置文件中include所在位置,例如:

#include sip.conf

改进后的配置文件解析器还允许把一个可执行文件的输出内容包含到当前配置文件中。这可以 说是一个非常有用的改进,因为这使得用户可以根据当前系统状况作出一些处理后,再生成相应的配置段,例如,你可以从一个XML文件来生成当前的 sip 用户配置,也可以从数据读取用户信息以生成配置文件。允许这个新的特性需要在 asterisk.conf中设置 execincludes 属性:

[options]

execincludes=yes

当设置了允许 execincludes 后,可以用类似下面的方法来添加一个 exec 包含:

#exec /usr/local/bin/generate-sip-config.sh

向已经定义的节添加内容

[section]

label = value

[section](+) label2 = value2

在 这个例子里,加号表示同名的第二个配置节点的内容是对第一个节点的补充。后一个配置节点可以存在于另一个文件中(通过#include包含)。需要注意的 是,包含加号的这个配置项不是一个独立的项目,也就是说,它的存在必需依赖于前面已定义的同名节点,如果那个节点不存在,那么Asterisk PBX的配置解析器在解析带\"+\"节点时就会发生错误而中止。

定义一个模板节点

[section](!) label = value

在这个例子中,节点后面加上了一个叹号,表示这是一个模板节点,模板节点本身并不代表一个实质生效的配置,模板只能被其它节点引用,作为其它节点的一部份来使用。引用关系(下面要介绍)类似于C++的继承,而模板则类似于C++中的虚类。

引用配置模板或另一个配置

[section](name[,name1]) label = value

在这个示例中,括号里面的名称 name, name1...是一个配置模板或另一个配置节点的名称。这种配置方式表示,将括号中节点的名称加入到当前配置节点配置项的前面。也就是说,这个配置节点 中的配置项目会包括name, name1的内容,然后再是这个节点下面的配置项。这有点像C++或其它面向对象程序语言中对象的继承,而且与之相类似,这个节点本身还可以被其它节点引 用(继承)。例如下面的配置:

[foo]

permit=192.168.0.2 host=asdf

deny=192.168.0.1

[bar]

permit=192.168.1.2

host=jkl deny=192.168.1.1

[baz](foo,bar)

permit=192.168.3.1 host=bnm

在这个例子里面,节点 baz引用了节点foo和节点bar,因此被解析成如下的样子:

[baz]

permit=192.168.0.2

host=asdf

deny=192.168.0.1 permit=192.168.1.2 host=jkl

deny=192.168.1.1 permit=192.168.3.1 host=bnm

示例

下面我们给出一个Asterisk PBX中SIP配置示例,并简单说明其作用。在 sip.conf 中的定义如下:

[defaults](!) type=friend nat=yes qualify=on

dtmfmode=rfc2833 disallow=all allow=alaw

#include accounts/*/sip.conf

在这个配置文件中,定义了一个模板 default,然后通过 #include 引用了account目录下所有子目录中的sip.conf。其中一个子目录 account/redice/sip.conf 的内容如下:

[redice_tmpl](!,defaults) secret=this_is_not_secret context=from-redice-grp callerid=RediceGrp <300> accountcode=0001

[redice](redice_tmpl)

mailbox=******************

[redice1](redice_tmpl)

mailbox=*******************

这 个配置文件 sip.conf 中定义了两个SIP电话,redice和redice1,其配置都来自于模板 redice_tmpl,唯一不同是的使用了不相同的语音邮箱。而模板 redice_tmpl 则是包含另一个模板defaults(定义于主目录中的 sip.conf 中)的模板。

从这个示例不难看出,新的Asterisk PBX 配置能力大大增强了,配置可以写得更加简单和灵活,而通过第三方软件来对 Asterisk PBX 进行配置也会变得更加容易。

Asterisk集联

IAX 设置详细

两台Asterisk服务器设置步骤如下:

* 设置iax.conf文件,一台设置成为peer模式另外一台设置成为user模式 * 设置user的extensions.conf让他的用户可以从user发送呼叫peer上 * 任意的, 在user上注册peer(当peer是动态IP地址的时候) * 相反设置以上的步骤, 如果你想实现相互呼叫

=========================================== 声明IAX2 user(在peer中)

如果想一个peer能收到呼叫. 必须在peer机器上设置iax.conf识别呼叫来自user. [username] type=user auth=md5

secret=secretword context=iax2users

context非常重要,他用来设置user新来的呼叫路由如何处理.

这个步骤将允许远程的user设备注册到peer上.如果你想限制请在peer的iax.conf里增加限制和许可的设置.

================================= 声明IAX2 peer(在user中)

从一个user产生呼叫的时候必须在user的iax.conf里设置到peer的验证. [peername] type=peer

host=hostname.domain.tld (如果用\"dynamic\"就要先进行一下register到peer) auth=md5

secret=secretword ; 如果拨号的时候填写这里就不需要再填写 username=username-at-the-peer ; 如果拨号的时候填写这里就不需要再填写 请注意:

* type=user 表示你将通过这个号码将验证一个进来的呼叫 * type=peer 表示你将通过这个号码发送呼叫给某人 * type=friend 表示两个功能都有

Using type=friend makes life easier, but treat it as a shortcut. If you add both type=friend and host=hostname, domain.ext you limit the hosts your peer can place calls from, which may not be what you want.

现在完成第一步和第二步之后我们只需要考虑设置拨号方案了.读下面的例子看看怎么做吧.

================================ 连接到拨号方案 示例1

extensions.conf:

exten => _7XXX,1,Dial(IAX2/myserver:passwordA@IAXserverA/${EXTEN:1},30,r) exten => _7XXX,2,Dial(SIP/myserver:passwordA@SIPserverA/${EXTEN:1},30,r) exten => _7XXX,3,Congestion

exten => _8XXX,1,Dial(IAX2/myserver:passwordB@IAXserverB/${EXTEN:1},30,r) exten => _8XXX,2,Dial(SIP/myserver:passwordB@SIPserverB/${EXTEN:1},30,r) exten => _8XXX,3,Congestion

记得要在iax.conf和sip.conf设置[IAXserverA]的这些定义.这个示例当出现问题后使用SIP做逃逸系统.注意你的用户名和密码可能会被CDR记录下来(你需要使用第二个示例的方法来实现隐藏). 示例2

这个示例将不会把用户名同密码显示在CDR当中

注意:在1.0.9版这个方法仍然不是Asterisk标准分支,所以仍然需要用户名和密码在dial字符串中

exten => _7XXX,1,Dial(IAX2/username:pass@serverB/${EXTEN:1},30,r) (serverA) iax.conf [general]

register => :@ [serverB] type=friend user= secret=

host= extensions.conf

exten => _7XXX,1,Dial(IAX2/serverB/${EXTEN:1},30,r) exten => _7XXX,2,Congestion (serverB) iax.conf [serverA] type=friend user= secret=

host= |

extensions.conf

exten => _8XXX,1,Dial(IAX2/serverA/${EXTEN:1},30,r) exten => _8XXX,2,Congestion

在一些时候serverA和serverB就是在对方服务器上的用户 示例3

在extensions.conf使用switch对象你可以连接两台服务器或是其他服务器的连接方案。在这个方案中我们自己的serverC将连接ServerA或serverB: [default]

exten => _801XXX,1,Goto,srvA|${EXTEN}|1 exten => _802XXX,1,Goto,srvB|${EXTEN}|1 [srvA]

exten => _801XXX,1,StripMSD,3 exten => _XXX,2,Goto,1 switch => IAX/serverA [srvB]

exten => _802XXX,1,StripMSD,3 exten => _XXX,2,Goto,1 switch => IAX/serverB

注意:你要注意不能建立死循环serverA到serverB并且serverB又到serverA!同样考虑使用iax.conf中设置autokill来杀掉被悬起长时间进程(当远程服务器无法连接) 示例4

extensions.conf: (主服务器) [outbound]

switch=>IAX2/master:**********************.net/outbound

iax.conf (主服务器): [slave] type=user auth=plaintext context=outbound secret=secret host=dynamic callerid=\"slave\" trunk=yes notransfer=yes [slave] type=peer

auth=plaintext

context=outbound-nuphone secret=secret host=dynamic trunk=yes notransfer=yes

extensions.conf (从服务器): [assigned-dids]

; uncomment a dial mechanism, first one goes to specific extension ; other one goes to dial parameter s.

;exten => 7046446999,1,Dial,IAX2/master@slave/${EXTEN} ;exten => 7046446999,1,Dial,IAX2/master@slave iax.conf (从服务器):

register=>slave:**********************.net[master] type=peer

host=iax-gw1.company.net secret=secret context=outbound trunk=yes canreinvite=no [master] type=user secret=secret context=acontext trunk=yes canreinvite=no

=========================== 关于register命令

当peer的ip并不明确,用户将不知道如何发送呼叫信息(当一个办公室用户呼叫在家里工作的peer,因为在家里工作的peer只有一个动态IP或他是在NAT设置) 这个时候peer要注册到user及时的把自己的IP告诉user: 在peer的iax.conf的[general]上怎么写:

register=>user:************************.ext因为不断更新所以user总是知道peer的ip是否改变了.

register命令仅仅被用在动态IP地址的情况下,如果两台服务器都是静态IP地址你不需要做任何设置.

使用Asterisk作为H.323和SIP网关

首先安装Asterisk,可参见本站内相关的内容,这里不详述。

下载并编译OH323.SO模块,该模块会用到pwlib和openh323两个库,现已经成功编译一个静态连接pwlib和openh323库的 模块。 如果要编译,必须注意pwlib和openh323的版本,有个USE_OLD_CAPABILITIES_API编译开关对应较老的版本。我使用的是asterisk-oh323-0.7.3.tar.gz 即oh323 v0.7.3版本,该版本对应于Asterisk 1.2.x (Asterisk有两个版本树,一个是Stable版本系列1.0.x, 一个是Head系列1.2.x, 目前我使用的是1.2.x, 因此在编译oh323的时候要选择对应版本)

编译完成后使用make install, 安装模块以及添加文件。如果使用已编译模块,则需要将oh323.so复制到Asterisk的模块目录,默认安装目录是 /usr/lib/asterisk/modules,并且手动添加配置文件oh323.conf到Asterisk的配置文件目录,默认是 /etc/asterisk 配置oh323.conf

在oh323.conf中找到\"gatekeeper=<参数>\"项,有以下几种参数:

• DISABLE - 禁用gatekeeper • DISCOVER - 使用广播发现机制

or - 显式制订gatekeeper的地

• GKID: - 显式指定gatekeeper id

如果已知gk在10.167.16.8, 则使用

gatekeeper=10.167.16.8

进行配置。

在oh323.conf中找到或直接在上一项下面添加

gatekeeperPassword=<密码>

密码是注册到gatekeeper的密码,没有则为空。 配置alias和prefix组, 一个这样的组的格式如下:

context= context= alias= alias= ...

gwprefix= gwprefix= ...

oh323.so支持多个alias/prefix组,并且为每个组指定一个context(即路由脚本),如需要将所有以888开头的被叫号码用名为voip-h323的context来路由,则编写以下配置:

context=voip-h323 gwprefix=777

codec配置

在oh323.conf最下面有一组codec,去掉或注释掉相应的即可。 将H.323话务路由到SIP Server

要将H.323话务路由到一台或多台SIP Server, 需要注册到这些SIP Server的至少一条Trunk线路,然后根据被叫号码分别路由到这些Trunk线路。 注册Trunk

在本例中,使用10.167.25.8的SIP Server, Trunk线路使用7770759,在sip.conf 文件里,找到[general]配置段,加入格式如下的Trunk 配置:

register=7770759:*************.25.8/7770759/*xxxxxx 是7770759账号的密码 */

配置Out_Line

要使用Trunk线路路由outgoing话务,必须为每条Trunk线路配置一个Out_Line,这样才能在需要的时候调用Out_Line的名字来使用与之对应的Trunk线路。

在sip.conf文件里,加入一个名为sip-8的Out_Line, 该Out_Line使用上面配置的7770759作为外出线路,例子如下:

[sip-8]

username=7770759 type=friend secret=xxxxxx qualify=no insecure=very host=10.167.25.8 dtmfmode=rfc2833 canreinvite=no

配置H.323 To SIP路由脚本

打开extensions.conf文件,添加以下节:

[macro-dialout-trunk]

exten => s,1,Dial(SIP/${ARG2}@${ARG1})

[voip-h323]

exten => _777XXXX,1,Macro(dialout-trunk,sip-8,${EXTEN})

以上脚本定义了一个呼叫SIP终端的宏,并且在voip-h323这个context中将所有777开头,长度为7的号码通过sip-8路由到SIP终端。

配置SIP To H.323路由脚本

打开extensions.conf文件,添加以下节:

[from-pstn]

exten => _666XXX, 1,Dial(OH323/${EXTEN}

该脚本把被叫号码为666开头,长度为6的呼叫路由到H.323 GateKeeper

asterisk app命令中文翻译

常规指令

Authenticate:鉴别用户

VMAuthenticate:根据“voicemail.conf”鉴别用户 Curl:接受外接URLs的修复。支持POSTing DUNDiLookup:用DUNDi查寻号码 SendDTMF:发送独裁的DTMF数据 SendImage:发送图像档案 SendText:发送给客户正文消息 SendURL:发送给客户USL以显示 System:执行系统命令

Transfer:将访客转移到另一个扩展名 TrySystem:0回复执行系统命令 Wait:稍等 WaitExten稍等:

WaitForRing:等待呼叫申请 WaitMusicOnHold:等待,在线音乐 Billing

ForkCDR:将CDR分成两个独立的实体

NoCDR:确保 asterisk没有把CRD保存为特定的呼叫 ResetCDR:重新安装CDR数据 SetAccount:设置帐簿号码

SetAMAflags:开通AMA标志开户的渠道 SetCDRUserField:建立CDR用户领域 AppendCDRUserField:给CDR用户附加数据 Call management (hangup, answer, dial, etc) Answer:如果呼叫回复一个信道 Busy:显示忙的情形等待挂断

ChanIsAvail:如果信道可以利用即核查 Congestion:显示拥塞等待挂断 Dial:设置一个指令连接当前的信道 DISA:直接访问内在系统 Hangup: 无条件挂断 Ringing显示呼叫

Caller presentation (ID, Name etc) CallingPres:更改呼叫者的身份介绍

LookupBlacklist: 从黑名单数据库上查询访客的身份 姓名和号码 LookupCIDName: 从当地的数据库查询访客的身份和姓名 PrivacyManager:如果没有CallerID过来,要求输入电话号码 SetCallerID: 建立CallerID,发生矛盾服从CallerID SetCallerPres:建立访客资料的独立信道

SetCIDName:建立呼叫者身份 姓名,发生矛盾服从CallerID

SetCIDNum: 只建立访客的身份号码(没有姓名),发生矛盾服从CallerID SoftHangup: 请求挂断转到另一个信道 Zapateller:拥SIT阻止远程商人 ADSI

• ADSIProg:将 Asterisk ADSI Scripts 加载到电话 • GetCPEID: 获得 ADSI CPE ID Database handling

• DBdel: 从数据库中删除一个键. 发生矛盾服从 DB. • DBdeltree: 从数据库中删除群. 发生矛盾服从 DB. • DBget:从数据库中找回数值. 发生矛盾服从DB. • DBput: 在数据库中储存一个数值. 发生矛盾服从DB. • MYSQL:执行不同的 mySQL 数据库行为 查 Asterisk database 找更多的信息. Application integration • AGI: 执行一套AGI 适应程序 • DeadAGI: 在中断的信道上执行AGI • EAGI: 执行一套 AGI 适应程序 • EnumLookup:在 ENUM 中查找号码 • Macro: 执行较大的程序

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

• Perl: res perl 是Apache 的 mod_perl, 只适用于 Asterisk • PHP: res_php 不需要就可将PHP与进行一体化处理 • Read: 用DTMF读变量

• TXTCIDName: 从 TXT 记录中查找访客的姓名 • UserEvent:发送任意结果给界面处理器

Control flow & timeouts

• AbsoluteTimeout: 建立呼叫最长时间 • DigitTimeout: 建立数据间的最长时间间隔 • Goto:转到优先码,扩展名和过渡段 • GotoIf: 条件展转接

• GotoIfTime: 当前的条件转接 • Random: 在拨号栏中随机跳动

• ResponseTimeout: 设置等候回应的最长时间 • While: 开始一个当循环- *1.2beta • EndWhile: 结束一个当循环 - *1.2beta • ExecIf: 条件执行 - *1.2beta

String & variable manipulation • Cut: 串处理功能,发生矛盾支持 CUT. • ImportVar: 赋数值变量 • Math: 进行简单的计算

• Prefix: 预设主要的数据 • SetGlobalVar:赋数值变量 • Set: 设信道变量和功能值

• SetVar: 赋数值变量(如果不允许,使用 Set) • StripLSD: 消除附加的数据 • StripMSD: 消除主要的数据

• SubString: 在一个预设的变量中保存子链数据 • Suffix:添加附加数据 Sounds:录音重放

• Background: 当执行其它命令的时候播放声音文件 • BackgroundDetect: 用谈话探测背景文件

• ControlPlayback: 用快进,重绕和离开当前命令控制器播放声音文件 • DateTime: 显示日期/和时间 • Echo: 重复声音回复到永福端

• Festival: 使用欢快的声音合成器朗诵课文 • Milliwatt: 在0分贝产生持续的1000赫兹的音调 • MP3Player: 播放MP3声音文件 • MusicOnHold: 无限度地播放音乐 • Playback: 播放一个声音文件

• Playtones: 当执行其它命令的时候播放声音列表 • SayUnixTime: 显示日期/和时间 • SayAlpha: 显示字母 • SayDigits: 显示阿拉伯数字 • SayNumber: 显示数字 • SayPhonetic:显示语音

• SetMusicOnHold: 在控制系统上显示默认的音乐 • SetLanguage: 为录音重放显示语言转换 • StopPlaytones: 停止播放音调列表

查看Asterisk sound files 获取更多信息 语音: 录音和监测

• ALSAMonitor: 监测ALSA控制台 • ChangeMonitor: 转换监测的路线文件名 • ChanSpy:通用的路线干涉 • Dictate: 听写的录音和播放 • Monitor: 录音电话会话到声音文件 • MuxMon:记录和混合电话支架 • Record: 记录电话会话到语音文件 • StopMonitor: 停止监测路线 SIP 命令

• SIPdtmfMode: 在SIP呼叫过程中转换DTMF模式 • SIPGetHeader: 从SIP邀请信息中获取标题

• SIPAddHeader: 填标题到外部的SIP邀请

• suplimental resource SIPCallPickup:在获取组中获取打入的电话 • sipredirect: 发送SIP 302信息到呼叫者 ZAP 命令

• Flash: 编辑到Zap主页 • ZapBarge: 干涉Zap路线 • ZapRAS: 提供ISDN数据服务

• ZapScan: 扫描Zap路线到监督程序调用

• 查看 Asterisk zap channels, zapata.conf 获取等多信息. 语音邮件和会议

• Directory: 规定语音邮件扩展目录

• HasNewVoicemail: 有条件的分枝到优先权+101 • MailboxExists: 检查邮箱是否存在 • MeetMe:简单的 MeetMe 会议桥 • MeetMeAdmin: MeetMe 会议管理 • MeetMeCount: MeetMe参与者计算 • VoiceMail: 语音留言

• VoiceMailMain: 进入语音系统

• VMAuthenticate: 基于语音邮箱鉴别用户 查看 voicemail.conf 获取更多的信息 列队和ACD操纵

• AddQueueMember: 自动添加排队成员 • AgentCallbackLogin: 呼叫代理商回叫注册 • AgentLogin: 呼叫代理商注册

• AgentMonitorOutgoing: 记录代理商的外出呼叫 • ParkAndAnnounce: 停放和宣告 • ParkedCall: 回复被停放的呼叫 • PauseQueueMemeber: 中止代理 • Queue: 排队等代呼叫

• RemoveQueueMember: 自动移交列队成员 • UnpauseQueueMemeber: 重新开始代理

警报监测/中心站

警报接受站:仿效一个Ademco 连接ID的警报接受站

业余无线电接受装置/转发器连接

Rpt:支持业余无线电接受装置和商业化的两种转发器连接

外部应用(不是在CVS里)

Asterisk app_dbodc:用unixODBC进行拨号方案修正 DynExtenDB:数据库中的存储扩充 Iconv:字符切换设置

app Prepaid:为Postgres 所设计的

PPPD:邮件后台程序连接器

Bristuff & zaphfc applications

• PickUp: 大多数路线是独立的;是bristuff片的一部分 • PickUpChan:接收指定路线 • PickupSIPuri

• PickDown: 挂断长途电话 • Steal: 接受中转电话

• Devstate: 产生一种安装设备驱动程序状态来改变事件(忙,打电话…) • Segfault:用 segfault 撞击Asterisk • ZapEC: 对于Zap能或者不能的回波消除 • Autoanswer: 在指定范围内自动回话 • AutoanswerLogin: 登陆到自动回话应用程序 vISDN applications VISDN交叠拨号 Sirrix 路径的应用

• SrxEchoCan: 不能/能回波消除 • SrxDeflect: 偏转进入的电话

• SrxMWI:在Sirrix组上 设置/重新设置信息等待指示(MWI)

Asterisk十问十答

这里所提的问题,不是Asterisk的细节问题,而是基本的入门问题。很多朋友在群里对Asterisk提出各种疑问,甚至是质疑,我觉得有必要针对一些常见问题做出解答,以正视听。由于本人水平有限,可能许多细节都不是十分严谨,也请专家给予批评指正。

1)Asterisk是什么?如何理解这样一个开源代码?它和大家熟悉的GNUGK有什么不同? Asterisk是一个IPPBX的开源代码。IPPBX的开源代码很多,而Asterisk是名气最大,使用量最大,影响力最大的一个。

不 要把Asterisk想象成一个产品,如果你这么想象,你会在后续的工作中出现很多理解的偏差,你应该把它想象成制作IPPBX的一个原材料,或者 IPPBX的一个软件的“操作系统”。在Asterisk上进行改造,你可以修改任何东西,比如界面、数据库、数据结构、协议栈等等,让它变成你想要的产 品,或者利用这个过程提供服务。

GNUGK是个啥东西?GNUGK是要做一个GATEKEEPER,而Asterisk则不同,它要做一个IPPBX。GK和IPPBX根本就是两个东西。

在 采用H.323标准的IP电话网络中,主要有4种实体:终端、网关(GW,Gateway)、网守(GK,Gatekeeper)和多点控制单元 (MCU,Multipoint Control Unit)。网守处于高层,提供对端点(终端、网关、多点控制单元统称为端点)和呼叫的管理功能,是IP电话网络系统中的重要管理实体。网守的主要功能 有:地址解析、接入控制、带宽管理、区域管理等四项基本功能;此外,还能提供呼叫控制信令、呼叫管理等其他功能。要构建一个H323的VOIP网,离不开 GK的管理。那么GNUGK所致力于的工作,就是做一个网守。我们运营常常用的H323平台,基本上都是GNUGK改造的,加入计费、界面、修改其中的诸 多bug,就成了虚拟运营商耳熟能详的“平台”。其实,在任何开源代码上开发都不是一件容易的事情,都需要丰富的经验、细致的分析、沉稳的开发和严格的测 试工作,如果只是想实现基本业务,对用户界面和性能要求也不高,直接拿来用也未尝不可。

IPPBX是IP化的PBX,这句话说起来简单,理解上可 是千差万别。IPPBX的最终目的是要替换现有的PBX的。因为现有的PBX结构不够开放,提供增值业务的能力差,而基于IP架构的PBX,开放能力和拓 展能力都大幅度增强,和NGN网络结合,创造出大量增值业务,真正满足用户需求。在商业推广中,各个厂家根据自身的技术架构,开发出形形色色的 IPPBX,有在原有PBX上插一块以太网卡,就叫做IPPBX的,有TDM和IP两个核心的IPPBX,也有纯IP核心的,基于Intel服务器架构或 者嵌入式的IPPBX,而Asterisk的初衷就是做这种纯IP核心的IPPBX。纯IP核心的IPPBX,可以有几种形式,最基本的就是一台服务器, 装上Asterisk软件,加上自身开发的应用,这种IPPBX必须使用IP终端,如宽带话机、小网关、中继网关、软电话等;比较流行的形式是一台服务器 插各种板卡,这些板卡带s口、o口、E1/T1口,用来连接电话机、局端放出的模拟或者数字线路,IP终端和普通终端都可以接入。 2)Asterisk能做什么?

Asterisk, 英文是“星号”的意思,设计的初衷是,任何和电话系统有关的东西,它都能做。但是实际上,并不是所有和电话有关的功能靠Asterisk实现都是最好的, 这个要根据自身的需求,在Asterisk上定制开发,才会真正达到你所要的目标。Asterisk最擅长的就是做一个IPPBX,当然有人用它来做 VoiceMail服务器、IVR服务器、会议服务器、中继网关、SIP SERVER、发卡系统等等。另外,Asterisk也有H323的支持能力,但是你不能把它的H323当作GK,而只能作为一个支持H323的端点设 备。Asterisk能作什么,建议你多听很多专业人士的介绍,别想当然。Asterisk是动态的,它不断推出新的版本,比如T38的支持能力,可能在 不久的将来,就有版本完全实现。

3)如何学习Asterisk?

在学习Asterisk之前,你必须了解互联网和通信网两方面的知识。你必须知道一个普通电话是如何打通的,也必须知道一个VOIP网络是如何架构的。

Asterisk爱好者协会花了很大力气集体翻译了那本介绍Asterisk的书——Asterisk,the future of telephony,我们翻译成Asterisk,未来电话之路,希望初学者先好好学习一下。 我 们在第一个问题中已经提到,不要把Asterisk看作一个产品,也不要指望有个工程师无偿长时间地帮你解决所有问题,也不要指望一本书把你的问题全部解 答。Asterisk本身就是一个开源的代码,具有很多分支,每个人看到它的角度都可能是不完全一致的,因此最好的学习方法就是根据客户的需求自己摸索。

经常到www.Asterisk.org,www.voip-info.org去 看看,很多人把自己的问题提在上面,有一些专业人士帮你解答。你需要注意,这两个网站都是.org的,也就是说,是一个组织的,不是一个企业 (.com),国内也有不少和Asterisk有关的网站,通过baidu或者google的搜索你都能看到,但是国内这方面的人气和专业程度都远远不能 和www.voip-info.org相比。当你开始摸索,就去中文网站,www.Asterisker.cn里面好好研究一下有相关经验的人写的文档,把配置文件做修改后拿一些终端来做测试,不断丰富你的相关知识。 4)目前用Asterisk开发的产品都有哪些?商用情况如何?

中 国市场是个很有特点的市场,其规律和欧美的市场规律差别极大。对于中国的消费者而言,开源往往被人认为等同于免费,那么不管你在上面做多少人类劳动,他们 都认为你应该免费。这就造成了中国的VOIP厂家们,在IPPBX的开发上基本都用Asterisk,但是谁都不愿意承认自己是基于Asterisk的。 国内具体哪些厂家在这个基础上开发,我不便多讲,但是只要功能比较复杂的,都是在其上经过相当繁琐的改造工作的。从全球情况看,Asterisk上做开发 的公司不完全统计应该在1000家以上,其开源的代码和开放的架构以及丰富的业务基础,让很多小厂家找到了可以做复杂业务的平台。Jajah, Voipdiscount等等,都是基于Asterisk开发的。Asterisk的SIP协议栈的兼容性应该经过大量实践的检验,是相对成熟的。商用情 况,无论是在国外还是在国内都比较多,但是在国内,出于对这些厂家的商业保护,我还是不说他们的名字了。

5)IPPBX能作什么?在未来的市场上是否有空间?

很多人把IPPBX的理解定位比较死,这往往和他们以前接触的某款IPPBX有 关。其实,技术术语是技术术语,产品是产品,相互之间虽然有关系,但是并不能狭隘地理解。某个厂家说我IPPBX长这样,那么所有的IPPBX都必须长这 样。实际上,IPPBX长相差异很大。有的IPPBX有丰富的外部接口,s口、o口、E1/T1口、以太网口等等,有的就没有这么丰富,甚至有的就只有一 个以太网口。(注:IPPBX带有E1接口,并不是说它就是个中继网关,但是起到了一定的中继网关所起到的作用。)没有谁好谁坏的问题,只有谁更适合哪类 客户的问题。 IPPBX严格的界定至今没有,有的人说以IP为核心的才是IPPBX,可是有很多PBX厂家,做了一块以太网板子,就说自己是 IPPBX,你也不得不承认它具有一定的IP功能,也是IPPBX。我说这么多,那么大家理解IPPBX恐怕会更加开放。很多人把IPPBX做了分类,有 的做了\"代\"的划分,比如第一代是PBX插以太网板子,二代呢就是TDM和IP混合核心,三代呢,就是纯IP核心。以Asterisk为基础的 IPPBX,往往属于第三代。它应该完全以IP为核心,不科学地说,路由器内加了语音功能,而不像传统的PBX厂家,程控交换机内加了数据功能。 那 么什么才是未来市场的趋势呢?我想,各执一词是不可避免的。但是,有一点是肯定的,只有发挥了IP为核心的技术优势和产业优势的,才是未来有发展前途的。 那么为什么PBX已经很成熟了,前面还非要加一个IP呢?其实,这和NGN网络取代PSTN网络一样的原理--增值业务的开放性和组网的灵活性。

IPPBX一定要以IP为核心,才能真正把增值业务开放出来让更多的人参与开发和运营,而不是设备厂家独有的技术,能否开发增值业务都取决于这个厂家的实力和技术架构。

很多厂家说,我的IPPBX功能强大,在现在来看可能更让用户购买着放心,可是从长远讲,IPPBX应该提供的是开放的架构而不是业务本身,它应该可以吸纳各种其它机构开发的业务,而不是这个厂家自己做的业务。如若不然,IPPBX根本没有取代PBX的意义。

随 着越来越多的人意识到,业务必须向下推,IPPBX就更有其在企业行业通信网上的现实意义。未来的每个企业可能都有不同的IPPBX,虽然大的架构差不 多,但是每个企业自身的业务千差万别。有的要和呼叫中心结合,有的要和CRM结合,有的呢,和ERP结合,还有的和IM结合。在未来的融合通信方面, IPPBX要起到重要作用。

有人说IPPBX过时了,其实那是针对某种类型的IPPBX而言,而真正的IPPBX时代还没有到来。很多媒体上传言 IPPBX的销量已经大于PBX,这个说法也有一定问题。毕竟现在PBX插上IP卡就被称为IPPBX,如果照这么统计,用IPPBX的用户的确太多了。 所以说,那只是商业吵作造成的,而真正能吸纳各种增值业务的开放的IPPBX,目前并没有在全球范围内大规模流行开。一个简单的道理,现在新成立的公司, 有几个老板说,我要IPPBX,别买PBX?正如NGN网络在全球的应用一样,IPPBX的部署需要一个过程,不要看细节,看现状,你只要看到整个产业方 向的走势,你就会看到IPPBX的美好前途。

Asterisk的设计初衷,就是要以纯粹的IP为核心,在组建企业PBX的用户群中找到自己的生存价值。而这一点,是符合整个技术和社会历史潮流的。 6)Asterisk和Trixbox有何关系?哪个更好?

这是大家最爱问的问题之一。他们的区别大家都能看出来,一个有界面,一个没有。Asterisk是基础,Trixbox是在此基础上的一个封装。Trixbox以前叫做AAH,Asterisk at Home,2006年6月才改名,目前在不断发布新的版本(参见www.trixbox.org)。

对 于初学者来说,或者只是简单应用者来说,Trixbox已经足够了,界面相对友好,配置相对好理解。而Asterisk就相对比较复杂,配置起来还要学会 那么多的命令和参数。从功能和稳定性上,两者没有区别,但是很多人还是喜欢原汁原味的Asterisk,因为Trixbox毕竟被封装了一层,对于水平比 较高的开发人员来讲,不是一个太好的事情。因此对于开发者而言,还是要研究Asterisk本身的。

你究竟要使用什么,是要根据你的具体需求,别直接问别人,哪个更好?这个世界上,二值逻辑的东西真的不多。

7)Asterisk能省钱吗?能做回拨吗?能计费吗?能做软交换平台吗?能支持H323吗?Asterisk能做什么增值业务?可以在网上下载计费吗? 提出此类问题的多之又多,举不胜举。在这里统一做一个回答。

首 先大家要理解Asterisk不是一个产品,而是一个开源代码的IPPBX基础架构,由于是开源的,任何一部分你都可以修改,它的代码你可以修改,它的协 议栈你可以换,它的所有东西你都可以变。夸张一点说,Asterisk是一个你可以控制的人,脑袋你可以换,鼻子你可以换,眼睛你可以换,也可以把脑袋放 到脚上,只要他能满足你的独特需求(当然有些需求可能会有点变态),你想怎么折腾就怎么折腾。那么这么以来,你可以把它所有的东西都换了,当然结果就是你 根本没必要用Asterisk了。当然我这么举例是个特殊的情况,一般来说,你修改其中的某些部件,加入你觉得有必要加入的功能,这就应该能做你最想做的 东西了。Asterisk能作任何事,就是这个原因。回拨,你把相关的东西做了修改就可以,计费,该加上的就加上,如果你把管理界面和呼叫流程做好,就可 以做软交换平台。

这里专门提一下H323。Asterisk是海外的东西,和国内正好相反,SIP是海外的主流,并且符合大的技术趋势,而 H323的复杂性以及业务的单一性造成SIP成为未来NGN网络发展的

主流协议,那么H323只能是辅助协议。而国内的情况,H323占到了绝对主流,大 量盗版软交换的应用,使H323的地位比较稳固,而SIP协议相对应用较少(据说SIP占全部在网应用的10%以内)。Asterisk在H323方便做 的不强,无论是openH323还是ooh323(在addons里面),在性能方面都不十分让人满意。但是已经有不少人在上面进行二次开发,增强了相关 功能。

Asterisk能省钱否的问题,很难回答。这个问题问的很笼统。如果你是厂家,用Asterisk为基础开发,让你节省大量时间;如果你 的公司是做运营的,单独拿Asterisk做运营必须加入相关的计费等内容,这个还需要修改,直接用,恐怕有困难。国外有很多在Asterisk基础上开 发出来的东西,如果你去网上淘一淘,说不定会有收获,很多都是开源的。但是不要期待过高,是否适合你应用就是另外一回事了。客观地说,99%以上的国外做 的计费系统、管理系统都不完全满足你的需求。所以,你还是需要等待国内有相关的厂家做出更适合市场需要的产品吧。

8)Asterisk和digium的板卡有何关系?

开源不代表不赚钱,开源的目的就是东方不亮西方亮,靠硬件赚钱,那就是板卡。digium是个公司,www.digium.com, 看到了吧,是.com。公司是要赢利的。很多国外的人对digium是崇拜的,所以再贵他们也要买digium的卡。Aserisk不是必须插板卡的,但 是如果有板卡,IPPBX的外部接口会更丰富。很多公司在开发自己的板卡,那么需要自己写适合Asterisk的驱动程序,这样做的好处是,你可以根据自 己的开发实力定制digium没有的板卡,即使有,你做出的板卡一定比digium的价格低。其它一些公司的板卡也能兼容Asterisk,比如 EICON,比如YATE。有机会大家可以查查相关的网站资料。当然,digium的板卡技术含量不高,大家买他,很多人是因为对asterisk的尊敬 和崇拜。其实很多clone卡,很多抄板子的卡,完全能胜任配合Asterisk的工作。唉,没有办法,什么高科技的东西放到中国,一定会\"发扬光大\" 的。对此有兴趣的朋友可以予以关注。 9)Asterisk在国际国内的发展势头如何?

Asterisk在全球有众多公司在二次开发,再骂Asterisk这个不好,那个 不好都无济于事,人的接受能力和程度就是如此,哪个都有缺陷,这个不可避免,我们接受它也不完全是随遇而安,很多公司在Asterisk上已经获得了成 功,中国的厂家已经陆续在此基础上制造自己的符合国情的IPPBX,期待着IPPBX大面积应用的时代赶快到来!趋势如何,不用我再费篇幅了吧! 在这里再介绍两个和Asterisk发展和支持有关的网站吧: http://www.asteriskvoipnews.com/ http://www.jaredsmith.net/ http://www.asteriskguru.com/

10)Asterisk爱好者协会是做什么的?目标是什么?每个入会成员的责任和义务是什么?

Asterisk 爱好者协会在建立之处,我写了一篇\"人,是要以群分的\",3月3日,20556356的QQ群建立,打起了\"Asterisk爱好者聚集地\"的旗号,加上 我的时间允许,稍做管理,群越来越多,人气也算旺盛,虽然高手并不多,但是已经基本达到了聚集爱好者的目的。目前,通过我自己建立和朋友的赠送,已经有9 个群了,人数大概在600人(几乎每个人都在至少2个群里),也不算少,那么我们如果设立最高纲领,恐怕就是让Asterisk能够推动中国的通信建设, 而这个纲领的确太高,我们看最低纲领吧,我想无非是各自找到各自在Asterisk这个即将和正在形

成的产业链中的位置,了解竞争对手,了解市场总体状 况,挖掘新的市场机会。

每个入会成员应该带着开放的心态来,交友、寻找商业和技术合作伙伴,但是尽量不要惟利是图。群很开放,对Asterisk和VOIP和IPPBX感兴趣的人都可以加入,那么每个人的义务就是不要在网上发彪谩骂,大家和气交流。

群里搞的那个翻译还是比较成功的,Asterisk,the future of telephony这本书现在在很多网站上都有下载,这也是大家集体勤劳和智慧的结晶。下一步我们还将组织很多活动,也希望更多的人参与进来,为我们的最高纲领和最低纲领而努力。

群号:20556356(满),23223948(满),17906458,25411566,12623717,26398851,29206893,24021169,24459532

因篇幅问题不能全部显示,请点此查看更多更全内容

Top