本章我们将研究连接到Asterisk的用户设备,一般来说是某种形式的VoIP电话。在Asterisk中配置信道供设备使用相对来说比较简单,但你也需要配置设备本身以使得它知道向谁发起呼叫(这已经跟Asterisk没有关系了,每个硬件厂商都有自己的工具让你配置设备的)。换句话说,配置一个设备分为两个部分:1)告诉Asterisk关于设备的事情,2)告诉设备关于Asterisk的事情。
- 注:Asterisk跟SIP协议是什么关系
- SIP是一种P2P协议,尽管在有些配置中有服务器的概念(网关作为服务器), 但协议本身还是站在P2P的角度去看问题的。 这意味着SIP电话之间是直连的, 中间不经过PBX。 但实际情况是很多SIP会话是经过服务器的, 以Asterisk为例, PBX是所有连接的中心。 当通过Asterisk拨打SIP电话的时候, 实际上有两个呼叫: 一个是从主叫设备到Asterisk, 另一个是从Asterisk到被叫设备。 Asterisk把两个信道连接起来了。 从SIP电话的角度来说, 你需要把它配置成所有的呼叫都要通过Asterisk, 尽管它不通过Asterisk也能连接到其他SIP电话。 SIP很复杂也很灵活, 配置看起来会有点困难, 好在Asterisk并不需要那么大的灵活性。
尽管大多数设备都有基于Web的参数配置界面,如果实际中有两部以上的设备的话,我们建议使用基于服务器的配置过程,也就是说只需要在设备中配置文件服务器的地址。设备会找到并下载属于自己的配置文件。比如说,从FTP服务器上下载XML文件。具体的下载过程和文件语法由设备生产商决定。本章主要是从Asterisk的角度来讨论设备的配置问题。
目录
- 1电话命名的概念
- 2硬电话,软电话,和模拟电话适配器
- 3配置Asterisk
- 3.1信道配置文件是如何跟拨号计划配合工作的
- 3.2sip.conf
- 3.3iax.conf
- 3.4根据环境修改信道配置文件
- 4装载信道配置文件
- 4.1Asterisk命令行界面
- 5测试,确认设备已注册
- 6模拟电话
- 7用于测试设备的基本拨号计划
- 8内部原理:第一次呼叫
- 9结束语
电话命名的概念
在开始讨论Asterisk的电话配置问题之前,我们先介绍一下有关电话命名的最佳实践,以便将用户、分机号和电话的概念区分开来。
在Asterisk中,系统唯一关心的是信道名。根本就没有用户的概念(实际上,Asterisk想在内部通过users.conf实现用户和设备的分离;但是,一般只有Asterisk GUI用到它。通过拨号计划在逻辑上区分更容易理解也更灵活),分机号则用于标识系统中的呼叫处理流程。例如,分机号100可以是呼叫一部电话,也可以是访问一个语音信箱,播放一个语音提示,或者是加入一个电话会议。有可能分机100在上班时间呼叫一部电话,在休息时间呼叫另外一部电话。反过来,呼出电话在上班时间显示一个主叫号码,在休息时间显示另外一个主叫号码(很多前台到了夜间就变成了保安岗)。
- Asterisk分机号
- 分机号是一个很关键的Asterisk概念。在大多数PBX中,一个分机号就是一组数字,用来呼叫一个电话或一个服务。对Asterisk来说,分机号是拨号计划中一组指令的名字。把分机号看成脚本名就对了。分机号可以是一组数字,也可以是一个名字(例如voicemail)。整本书都会详细讨论分机号的问题,但在那之前我们需要先配置一些电话。
区别分机号和它所做的事情是Asterisk的一个重要特性,分机100的行为实际上是由一个脚本定义的。这一特性对“办公桌轮用”一类的需求就更有意义了。
“办公桌轮用”允许某人登录一个设备,然后就可以从该设备接听他的电话了。打比方,我们有三个销售,一般都不在办公室,但每个月都要花几天时间回办公室贴发票。考虑到他们不太可能同时出现在办公室,与其给他们每人配一部电话,不如让他们分享一部电话(或者更进一步,让更大的一群人分享一组电话,比如说,三部电话)。这个场景就明显要求把用户/分机号和实际的电话设备区分开。
所以哪些名字不适合用来给电话命名呢?像人名,比如说[SimonLeBon],就不合适,因为Joan Jett和Rick Astley也可能用那部电话。同样,用分机号给电话命名也不适合,比如[100],因为你将来可能会把它用于分机号160,或者让多个人分享该部电话。出于安全方面的考虑,用数字帐号名也不好,这一点会在第26章 安全中详细谈到。
一种常用的方法是用设备的MAC地址给电话命名。该标识唯一,是跟着设备走的,跟用户和分机号都没有关系。很多公司处于资产管理的目的会给电话贴上条形码和其他信息,只要这些信息是关于设备,而不是关于人的,也可以用来给电话命名。
如何给电话命名取决于你,我们主要是想把电话的概念跟它的所有者,甚至是位置分离开,因为这些不在Asterisk的控制范围内,而且随时会变。
本书用MAC地址表示电话。你可能有自己的选择。
但是有一点,我们关于电话命名的建议不是出于技术上的限制。你想怎样命名都可以,只要符合Asterisk的设备命名规范(字符、数字,不能有空格)。
硬电话,软电话,和模拟电话适配器
有三种终端设备可以提供给用户当成电话使用。他们是硬电话、软电话和模拟电话适配器(ATA)。
硬电话是一种设备。它看起来像办公室电话:它有听筒、号码按键等。它直接连接到网络,也称为VoIP电话。
软电话是一种运行在台式机或笔记本上的软件。语音要经过计算机的声音系统,所以用这种软件时一般用耳机效果会好些。最近也有了运行智能手机上的软电话。软电话的界面一般看起来像是普通电话,但不是必须的。
模拟电话适配器(ATA)使得传统的模拟电话(或者其他模拟设备,像传真机、无绳电话和寻呼机等)可以接入SIP网络,一般是一个三明治大小的盒子,有一个RJ-11口(一般称为FXS口)用来接电话机,一个RJ-45口用来接网络,和一个电源口。有的ATA支持不止一个电话。
硬电话的优点是它在声音方面的效果会好一些。一般质量好一点都会过滤环境噪音,保留人类语音,并调整波形。人们用传统电话用习惯了,硬电话更容易被人接受些。还有,硬电话并不要求你打开计算机才能打电话。
缺点是,相对于很多免费的高质量软电话来说,硬电话有点贵,也不好携带。另外,你的办公桌可能不够地方,又或者你并不总是待在一个地方。
软电话解决了携带性的问题,你只要装到你的笔记本或智能电话中就可以了。另外它的价格也很有吸引力(免费,或者30美元最多)。由于免费的缘故,你连接到Asterisk的第一个用户设备可能就是软电话。因为软电话仅仅是一种软件,表示它很容易安装和升级,通常还包含一些使用外设的特性,像是用webcam进行视频电话,又或者拿文件发传真。
软电话的缺点是它不太像一台设备,打电话时要戴上耳机,计算机有可能会时不时地执行一些后台任务导致CPU卡死。
ATA的优点是允许你把模拟设备接入SIP网络,像无绳电话、寻呼机和响铃器等。网络不好的时候还可以接入老的线路。
ATA的缺点是有些SIP特性用不了。毕竟模拟电话技术有一百年了。
对于Asterisk来说,你选哪一种都不是问题,不管是硬电话、软电话还是ATA。一样的分机号可以呼叫桌面电话、笔记本上的软电话、手机、甚至是闪光灯(有些地方响铃器听不见)。
配置Asterisk
本节我们将介绍如何在/etc/asterisk目录中创建sip.conf和iax.conf文件,以定义SIP和IAX2设备和你的系统通讯所需的参数。
- Asterisk允许设备以各种不同的协议和它对话(从而也包括设备之间的对话)。毕竟,SIP和IAX2协议是最欢迎也是最成熟的VoIP模块,所以我们将专注于它们。如果是初次接触Asterisk,你最好不要把别的协议搅和进来(像是Skinny/SCCP,Unistim,H.323,和MGCP),先把SIP和IAX2搞熟练了再说。其他协议的配置都是类似的,并且示例配置文件包含很多信息和例子,所以一旦你把基础的东西搞定了,其他协议应该是很容易上手的。
信道配置文件,像是sip.conf和iax.conf,包含信道驱动(chan_sip.so、chan_iax2.so等)的配置,以及电话设备跟Asterisk联系(或交互)所需信息和凭据。
有关信道驱动的公用信息包含在位于配置文件顶部的[general]段中。所有段名是用方括号括起来的,设备名也是。段名(或设备名,对我们来说是一样的)后面的所有东西都归属于该段。[generla]段也能用于定义设备配置的缺省值,该值可以被设备段或模板中的值覆盖。Asterisk也硬编码了一下缺省值,所以尽管一些设置是必须的,另一些则可以忽略,只要你觉得缺省值没问题的话。
-
Asterisk将会以下列顺序检查参数:
- 检查设备段
- 检查设备段的模板
- 检查[general]段
- 使用硬编码的缺省值
- 这表示说,没有设置某个参数的值并不意味着该参数没有设置。如果你不放心,你可以在设备段或模板中显式设置某个参数。
- 往后面读,这一概念你会有切实体会的。
信道配置文件是如何跟拨号计划配合工作的
尽管我们还没有讨论过拨号计划,如果能够设想信道配置文件(sip.conf,ias.conf)和拨号计划(extensions.conf)的关系的话,还是很有用的。拨号计划是一个Asterisk系统的心脏:它控制呼叫逻辑是如何应用到信道中的连接的,比如当一个设备拨打分机号101时系统做什么,当一个外部入局呼叫到达时系统做什么,等等。信道配置文件和拨号计划都参与系统的呼叫处理过程。图 5.1,“sip.conf和extensions.conf的关系”用图形化的方式表示了sip.conf和extensions.conf的关系。
当一个呼叫到达Asterisk时,系统先是找到该协议(该次呼叫所使用的协议)所对应的信道配置文件,然后找到该呼叫所对应的设备段。信道配置文件也会处理认证问题,以及定义拨号计划中的处理入口。
一旦Asterisk确定了如何处理该呼叫,它会把呼叫控制交给拨号计划中相应的上下文(context)。信道配置文件中的context参数就是拨号计划中的处理入口(其中包含了处理呼叫所需的信息)。
反过来,如果系统对拨打分机号101的处理就是拨打另外一部电话的话,该拨号请求也会用到信道配置文件,以确定认证信息、编码等。
要记住的关键点是信道配置文件不仅控制呼叫如何进入系统,也控制呼叫如何离开系统。所以,比方说,如果一部电话呼叫另一部电话,信道配置文件不仅用于把呼叫交给拨号计划,也控制着如何把呼叫从拨号计划交给目标设备。
sip.conf
SIP信道模块无疑是Asterisk的信道模块中最成熟和特性最丰富的。这是由于SIP的广泛流行,它已经“接管”了VoIP/电信行业,并且已经在成千上万的设备和PBX中实现了。如果你看一下Asterisk源代码的./configs目录中的sip.conf.sample文件,你会注意到有大量的选项可供使用。幸运的是,大多数选项都有缺省值,所以对于大多数标准SIP电话来说,你只需要创建一个非常简单的配置文件就可以把它连接到Asterisk了。
你要做的第一件事就是在/etc/asterisk目录下创建一个名为sip.conf的配置文件。
在该文件中粘贴或打入下列信息:
[general] context=unauthenticated ;>打开你刚创建的sip.conf文件,我们会逐项解释。
我们创建了四个段,第一个是[general]段。所有信道配置文件的顶部都有这么一个标准段,命名也是固定的。[general]段包含和该协议有关的一般性配置选项,也可以用来定义缺省参数。
例如,我们把缺省上下文定义为unauthenticated,以确保我们明确定义了如何处理未授权的呼叫。我们称之为“unauthenticated”的意思就是