本章我们将研究连接到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将会以下列顺序检查参数:

  1. 检查设备段
  2. 检查设备段的模板
  3. 检查[general]段
  4. 使用硬编码的缺省值
这表示说,没有设置某个参数的值并不意味着该参数没有设置。如果你不放心,你可以在设备段或模板中显式设置某个参数。
往后面读,这一概念你会有切实体会的。

信道配置文件是如何跟拨号计划配合工作的

尽管我们还没有讨论过拨号计划,如果能够设想信道配置文件(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”的意思就是

Asterisk权威指南/第五章 用户设备配置相关推荐

  1. Asterisk权威指南/第六章 拨号计划基础

    拨号计划是你的Asterisk系统的心脏.它定义了呼叫是如何流进和流出系统的.拨号计划用一种脚本语言写成的,Asterisk依照其中的指令响应外部触发.和传统电话系统相比,Asterisk的拨号计划是 ...

  2. Asterisk权威指南/第三章 安装Asterisk

    在这一章我们将详细介绍如何从源代码安装Asterisk.很多人回避这种方法,说它太难了,又耗时间.我们在这里想证明的是从源代码安装Asterisk其实没那么难.更重要的是,我们想为你提供一个最好的As ...

  3. CUDA C编程权威指南 第五章 共享内存和常量内存

    共享内存是较小的片上内存,具有较低的延迟(相比全局,低20~30倍),提供更高的带宽(相比全局,10倍) block通信 用于全局内存数据的缓存 __shared__来申请共享变量,如果共享内存大小在 ...

  4. 《Hadoop权威指南》第二章 关于MapReduce

    <Hadoop权威指南>第二章 关于MapReduce 目录 使用Hadoop来数据分析 横向扩展 注:<Hadoop权威指南>重点学习摘要笔记 1. 使用Hadoop来数据分 ...

  5. JavaScript权威指南 第11章JavaScript标准库

    JavaScript权威指南 第11章JavaScript标准库 第11章 JavaScript标准库 11.1 集合与映射 11.1.1 Set类 11.1.2 Map类 11.1.3 WeakMa ...

  6. HTML5 权威指南第 10 章 文档分节 学习笔记

    HTML5 权威指南第 10 章 文档分节 学习笔记 第 8 章 标记文字 内容从从文字出发,专注如何将单体内容正确的呈现出来:第 9 章 组织内容 内容从段落出发,专注如何将单体内容合理的放在段落中 ...

  7. JavaScript权威指南 第15章 网络编程 第三部分

    JavaScript权威指南 第15章 网络编程 第三部分 可伸缩矢量图形 15.7.1 在HTML中使用SVG 15.7.2 编程操作SVG 15.7.3 通过JavaScript创建SVG图片 1 ...

  8. Java7并发编程指南——第五章:Fork Join框架

    Java7并发编程指南--第五章:Fork Join框架 @(并发和IO流) Java7并发编程指南第五章Fork Join框架 思维导图 项目代码 思维导图 项目代码 GitHub:Java7Con ...

  9. Asterisk权威指南/第一章 一场电话革命

    当我们开始着手写一本Asterisk书的时候(大概五年前),我们确信Asterisk将会从根本上改变通讯行业.今天,我们预言的这场革命几乎就要完成了.Asterisk现在是世界上最成功的PBX,并且是 ...

最新文章

  1. classname帝国怎么用php调用,帝国cms怎么调用栏目别名
  2. SAP Retail 寄售门店关键配置
  3. BZOJ1257 [CQOI2007]余数之和
  4. FreeRTOS任务创建和删除
  5. 第 39 章 ThinkPHP--视图
  6. LeetCode MySQL 512. 游戏玩法分析 II
  7. SQL必知必会-事物处理
  8. 内购订单进行二次处理_更学教育:卖家在投诉异常订单的流程是怎么样的?
  9. azure批量创建虚拟机_如何将数据库迁移到Azure虚拟机
  10. ACM-ICPC训练行动路线图
  11. redis运行状态图形化监控工具 — RedisLive
  12. 利用c#反射提高设计灵活性
  13. excel处置4000行数据卡_Pandas读取并修改excel的示例代码
  14. 团“模子”政策模式乱舞
  15. 实对称矩阵的特征值求法_线性代数中的二次型,实际上是特征值的几何应用,概念需加强理解...
  16. Visio 安装后提示 Dos 共享冲突
  17. 【叨、校长】一个基于Extjs、Pushlet美轮美奂的Web聊天室
  18. django运行错误:wrong number of arguments for ‘set‘ command
  19. AES对称加密原理及服务
  20. PTC指定位置安装许可服务器,PTC安装在终端服务器上的問題

热门文章

  1. consul docker方式搭建
  2. 【Git、GitHub、GitLab】三 Git基本命令之创建仓库并向仓库中添加文件
  3. mysql函数(五.流程控制函数)
  4. stringstream字符串流的妙用
  5. Windows10搭建FTP服务器
  6. MySQL-5.7.21非图形化下载、安装、连接问题记录
  7. 解决cocos2dx调用removeFromParent后报错问题
  8. 尚未注册 OLE DB 访问接口 SQLNCLI10 7043 错误
  9. VS配合VSS时,编译报错:未能向文件“....csproj.FileListAbsolute.txt”写入命令行,对路径的访问被拒绝。...
  10. 数据结构一—— 数组