FreeSWITCH权威指南.pdf

FreeSWITCH权威指南.pdf
 

书籍描述

内容简介
本书是FreeSWITCH领域最为权威的著作之一,在这本书面前,FreeSWITCH了无秘密!本书由中国FreeSWITCH领域“第一人”、全球FreeSWITCH开源社区知名专家、FreeSWITCH-CN中文社区创始人兼执行主席Seven Du(杜金房)撰写,FreeSWITCH之父Anthony、Minessale鼎力推荐。本书内容极为全面,涵盖FreeSWITCH的方方面面,从它的系统结构、核心概念、各项功能及其使用、维护的方法和要点、系统的调试与排错、系统的性能优化,到脚本开发、基于源代码的二次开发和内部实现原理,深度与广度兼备。实战性极强,从呼叫排队、多人电话会议、话单计费等基本的配置实例到生产环境中的应用实例,从单个的FreeSWITCH应用到FreeSWITCH集群,从脚本开发到基于源代码的二次开发,各种案例应有尽有,很多案例中的参数都可以拿来直接使用。

编辑推荐
中国FreeSWITCH领域“第一人”、全球FreeSWITCH开源社区知名专家撰写,FreeSWITCH之父鼎力推荐,权威性毋庸置疑
内容全面,涵盖FreeSWITCH使用、维护、二次开发、源码分析等各方面;实战性强,包含大量实例,从单个独立应用的实现到集群的部署,应有尽有

作者简介
杜金房(网名:Seven) 资深网络通信技术专家,在网络通信领域耕耘近15年,精通VoIP、SIP和FreeSWITCH等各种网络协议和技术,经验十分丰富。有超过6年的FreeSWITCH应用和开发经验,不仅为国内大家大型通信服务厂商提供技术支持和解决方案(建立了中国第一个FreeSWITCH系统和最大的FreeSWITCH集群),而且客户还遍及印度等海外国家。FreeSWITCH-CN中文社区创始人兼执行主席,被誉为国内FreeSWITCH领域的“第一人”;在FreeSWITCH开源社区非常活跃,不仅经常为开源社区提交补丁和和特性,而且还开发了多款插件;此外,他经常在FreeSWITCH的wiki上分享自己的使用心得和经验,2011年和2012年应邀参加在美国芝加哥举办的ClueCon大会,并发表主题演讲。此外,他还精通C、Erlang、Ruby、Lua等语言相关的技术。

目录
目  录
前言
第一部分 基 础 篇
第1章 PSTN与VoIP基础 2
1.1 PSTN起源与发展 2
1.1.1 最早的电话网 2
1.1.2 人工电话交换时代 3
1.1.3 自动电话交换时代 3
1.1.4 半电子交换机时代 6
1.1.5 空分交换机时代 6
1.1.6 数字交换机时代 6
1.1.7 现代PSTN时代 6
1.1.8 下一代网络及VoIP时代 6
1.2 电话实现技术 8
1.2.1 电话号码 8
1.2.2 模拟信号与数字信号 11
1.2.3 PCM 11
1.2.4 局间中继与电路复用技术 12
1.3 我国电话网结构 12
1.4 信令 14
1.4.1 信令分类 14
1.4.2 用户线信令 15
1.4.3 局间信令 15
1.4.4 七号信令 16
1.4.5 H.323与SIP信令 17
1.5 媒体 19
1.6 电路交换与分组交换 20
1.6.1 电路交换 20
1.6.2 分组交换 20
1.7 VoIP 21
1.8 IMS 22
1.8.1 什么是IMS 22
1.8.2 IMS的特点 22
1.8.3 IMS核心网元 23
1.8.4 SIP协议的参考点 26
1.9 小结 27
第2章 PSTN、PBX及呼叫中心业务 28
2.1 PSTN业务 28
2.1.1 POTS 28
2.1.2 商务业务 30
2.1.3 其他增值业务 30
2.2 PBX业务 31
2.2.1 呼叫转移 31
2.2.2 同组代答 31
2.3 PBX与中继线 31
2.4 IP-PBX业务 34
2.5 呼叫中心 35
2.5.1 什么是呼叫中心 35
2.5.2 呼叫中心的历史 36
2.5.3 呼叫中心的分类 37
2.5.4 呼叫中心的主要技术指标 39
2.5.5 CTI中间件 40
2.5.6 FreeSWITCH在呼叫中心的应用 41
2.6 小结 42
第3章 初识FreeSWITCH 43
3.1 什么是FreeSWITCH ? 43
3.1.1 FreeSWITCH的概念 43
3.1.2 FreeSWITCH的功能 45
3.2 快速体验 46
3.2.1 安装基本FreeSWITCH系统 46
3.2.2 连接SIP电话 57
3.3 配置FreeSWITCH 61
3.4 FreeSWITCH用作软电话 63
3.5 配置SIP网关拨打外部电话 64
3.5.1 从某一分机上呼出 65
3.5.2 呼入电话处理 66
3.6 小结 66
第4章 运行FreeSWITCH 67
4.1 命令行参数 67
4.2 系统启动脚本 68
4.3 判断 FreeSWITCH 是否运行 69
4.4 控制台与命令客户端 69
4.5 呼叫 72
4.5.1 发起呼叫 72
4.5.2 呼叫字符串 72
4.6 API 与 App 73
4.7 API命令帮助 75
4.8 小结 76
第5章 FreeSWITCH架构 77
5.1 总体架构 77
5.1.1 核心 77
5.1.2 接口实现 81
5.2 目录结构 83
5.3 配置文件 85
5.3.1 freeswitch.xml 86
5.3.2 vars.xml 88
5.3.3 autoload_configs 目录 89
5.3.4 其他 90
5.4 XML 用户目录 91
5.5 呼叫相关概念 93
5.5.1 来去话、Session 、Channel与Call 93
5.5.2 回铃音与 Early Media 94
5.5.3 全局变量与局部变量 94
5.6 小结 95
第6章 拨号计划 96
6.1 XML Dialplan 96
6.1.1 配置文件的结构 96
6.1.2 默认的配置文件简介 99
6.1.3 正则表达式 100
6.1.4 通道变量 101
6.1.5 测试条件 105
6.1.6 动作与反动作 108
6.1.7 工作机制深入剖析 109
6.1.8 内联执行 111
6.1.9 实例解析 112
6.2 inline Dialplan 118
6.3 其他Dialplan 120
6.4 常用的Dialplan App 120
6.5 在Dialplan中使用API命令 123
6.6 深入理解通道变量及相关操作 124
6.7 小结 125
第7章 SIP协议 126
7.1 SIP协议基础 126
7.1.1 HTTP与SIP协议基础 127
7.1.2 SIP的基本概念和相关元素 129
7.1.3 SIP协议的基本方法和头域简介 131
7.2 SIP注册 132
7.3 SIP呼叫流程 135
7.3.1 UA间直接呼叫 136
7.3.2 通过 B2BUA 呼叫 137
7.4 深入理解SIP 147
7.4.1 SIP URI 147
7.4.2 SDP和SOA 147
7.4.3 3PCC 151
7.4.4 SIP承载 152
7.5 小结 152
第8章 媒体 154
8.1 媒体与媒体处理 154
8.1.1 音频编码 154
8.1.2 媒体工作机理和相关配置 159
8.2 媒体协商 160
8.2.1 协商过程 160
8.2.2 SDP及其在编码协商中的作用 161
8.2.3 协商时机与策略 163
8.3 其他媒体相关的问题 163
8.3.1 RTP和RTCP 163
8.3.2 转码 165
8.3.3 透传、媒体绕过与媒体代理 167
8.3.4 Media Bug 168
8.3.5 视频 168
8.3.6 排错 169
8.4 小结 170
第9章 SIP模块 171
9.1 基本概念 171
9.2 Sofia配置文件 172
9.2.1 Profile配置文件 173
9.2.1 Profile的几个重要参数 175
9.2.2 external.xml 177
9.2.3 Gateway 179
9.3 常用命令 181
9.3.1 状态相关命令 181
9.3.2 Profile相关命令 182
9.3.3 SIP Capture 183
9.3.4 global相关 184
9.3.5 debug相关 184
9.3.6 其他命令 185
9.3.7 其他 186
9.4 NAT穿越 186
9.4.1 NAT的种类 188
9.4.2 FreeSWITCH的拓扑结构 189
9.4.3 NAT是怎么影响SIP/RTP通信的 190
9.4.4 NAT的穿越方法 191
9.5 小结 198
第二部分 实 战 篇
第10章 基本技能 200
10.1 调试与排错 200
10.1.1 解决问题的一般方法和流程 200
10.1.2 查看日志 203
10.2 使用外部工具抓包 205
10.2.1 tcpdump 205
10.2.2 tshark 206
10.2.3 ngrep 207
10.2.4 pcapsipdump 208
10.3 使用Wireshark抓包并分析呼叫 208
10.3.1 使用Wireshark抓包 209
10.3.2 使用Wireshark对抓包进行分析 210
10.4 originate命令实例解析 213
10.4.1 使用格式和参数 213
10.4.2 转入Dialplan 214
10.4.3 更改主叫号码 215
10.4.4 处理呼叫超时 215
10.4.5 防止命令阻塞 216
10.4.6 使用通道变量 216
10.4.7 Early Media对呼叫的影响 217
10.4.8 bridge也使用originate 217
10.4.9 bridge中的Early Media 218
10.4.10 bridge中的主叫号码 219
10.5 呼叫是怎样工作的? 220
10.6 FreeSWITCH图形用户界面简介 223
10.6.1 FusionPBX 223
10.6.2 blue.box 223
10.6.3 FreeSWITCH Portal 224
10.7 小结 226
第11章 基本功能与实现 227
11.1 批量创建用户 227
11.2 用FreeSWITCH实现IVR 229
11.2.1 最简单的菜单 229
11.2.2 默认IVR简介 232
11.3 按时间进行路由 233
11.4 配置中文语音提示 234
11.4.1 最简单的实现方案 234
11.4.2 使用sound_prefix 235
11.4.3 使用Phrase 236
11.4.4 使用中文语音提示 238
11.5 录音 239
11.5.1 单腿录音 239
11.5.2 对两条腿的通话进行录音 240
11.5.3 立体声 241
11.5.4 录音相关的通道变量 242
11.5.5 原生格式 243
11.6 放音 244
11.6.1 playback的参数 244
11.6.2 循环播放 248
11.6.3 Say 249
11.7 TTS 251
11.7.1 使用mod_flite 251
11.7.2 mod_tts_commandline 252
11.7.3 MRCP 256
11.7.4 Google Translate 257
11.7.5 TTS小结 258
11.8 在呼叫失败的情况下向主叫用户播放语音提示 259
11.8.1 实现方法 259
11.8.2 进阶 260
11.8.3 使用TTS 261
11.8.4 原理 262
11.9 实现呼叫前转业务 263
11.10 小结 265
第12章 高级功能与配置实例 266
12.1 使用mod_fifo实现简单呼叫队列 266
12.1.1 呼叫停泊与取回 266
12.1.2 配置座席 268
12.1.3 fifo 270
12.2 使用mod_callcenter实现呼叫中心应用 272
12.2.1 mod_callcenter模块简介 273
12.2.2 座席配置与管理 274
12.3 数据库 277
12.3.1 默认数据库中有什么? 277
12.3.2 ODBC 279
12.3.3 使用数据库原生客户端库直接连接数据库 282
12.4 视频通话 283
12.4.1 配置视频通话 283
12.4.2 视频录像与回放 285
12.4.3 视频转码 285
12.5 多人电话会议 286
12.5.1 音频会议 286
12.5.2 视频会议 292
12.6 话单 297
12.6.1 CSV格式的话单 297
12.6.2 直接将话单写入数据库 298
12.6.3 使用HTTP服务器接收话单 299
12.7 计费 300
12.8 小结 302
第13章 FreeSWITCH与FreeSWITCH对接 303
13.1 在同一台主机上启动多个FreeSWITCH实例 303
13.1.1 背景故事 304
13.1.2 练习 305
13.1.3 进阶 306
13.2 FreeSWITCH与FreeSWITCH对接 306
13.2.1 双机对接 306
13.2.2 汇接 308
13.2.3 双归属 309
13.2.4 长途局 311
13.2.5 ACL 311
13.3 FreeSWITCH作为PBX 312
13.3.1 普通的PBX设置 313
13.3.2 DID 315
13.3.3 使用PBX上的网关呼出 319
13.4 小结 319
第14章 FreeSWITCH与其他设备或系统对接 321
14.1 使用Doubango客户端连接 321
14.2 对接IMS 322
14.2.1 网关配置 323
14.2.2 通过IMS呼出 324
14.2.3 通过IMS呼入 324
14.2.4 其他问题 325
14.3 连接模拟话机和模拟中继线 326
14.3.1 FXS和FXO 326
14.3.2 拓扑结构 327
14.3.3 使用潮流网关连接模拟话机 328
14.3.4 使用迅时网关连接模拟话机和模拟中继线 329
14.4 通过E1线路与其他系统对接 335
14.4.1 配置FS1 335
14.4.2 配置E1网关设备 340
14.4.3 配置FS2 342
14.4.4 对接其他厂家的E1网关 345
14.5 对接Asterisk 346
14.5.1 从FreeSWITCH呼叫Asterisk 346
14.5.2 从Asterisk上呼叫FreeSWITCH 347
14.5.3 其他 347
14.6 使用H.323协议对接 348
14.6.1 mod_h323 348
14.6.2 mod_opal 350
14.6.3 其他 351
14.7 小结 351
第15章 其他技巧与实例 353
15.1 转接和代接 353
15.1.1 盲转 353
15.1.2 协商转 356
15.1.3 代接 357
15.2 共享线路呈现 358
15.3 使用组播功能做网络广播 360
15.4 DTMF 361
15.4.1 带内DTMF 361
15.4.2 RFC2833 362
15.4.3 SIP INFO 363
15.5 号码连选 363
15.5.1 注册到运营商服务器 364
15.5.2 通过单个号码呼出 364
15.5.3 使用随机数做号码连选 365
15.5.4 使用mod_distributor进行连选 365
15.5.5 其他 366
15.6 收发传真 367
15.7 多租户 368
15.7.1 Domain简介 368
15.7.2 配置与实例 370
15.7.3 进阶 372
15.7.4 其他 373
15.8 使用loopback Endpoint外呼 373
15.9 在Web浏览器中打电话 375
15.9.1 Flash 376
15.9.2 WebRTC 379
15.10 HA 382
15.10.1 崩溃恢复实验 382
15.10.2 HA简介 383
15.10.3 双机HA实现细节及需要注意的问题 384
15.11 集群及分布式部署 386
15.11.1 大规模集群的总体结构 386
15.11.2 负载均衡配置实例 387
15.12 压力测试 392
15.12.1 参数和指标 392
15.12.2 呼叫测试 393
15.12.3 注册测试 395
15.12.4 编解码测试 396
15.12.5 测试结果 396
15.13 生产环境下的稳定性和安全性 396
15.13.1 稳定性 397
15.13.2 安全性 397
15.14 小结 398
第三部分 高 级 篇
第16章 嵌入式脚本 400
16.1 FreeSWITCH中的嵌入式脚本 400
16.2 Lua 401
16.2.1 Lua语法简介 402
16.2.2 将电话路由到Lua脚本 408
16.2.3 Session 相关函数 408
16.2.4 非Session函数和独立的Lua脚本 412
16.2.5 Event相关函数 412
16.2.6 Chat相关函数 415
16.2.7 LUA拨号计划 416
16.2.8 连接数据库 417
16.3 其他脚本语言 419
16.3.1 JavaScript 419
16.3.2 Python 420
16.4 小结 421
第17章 嵌入式及HTTP开发 423
17.1 用Lua脚本写个小游戏 423
17.2 用Lua实现IVR 425
17.3 在会议中呼出 429
17.4 一个在FreeSWITCH中外呼的脚本 431
17.5 使用Lua脚本通过多个网关循环外呼 433
17.6 在FreeSWITCH中执行长期运行的嵌入式脚本 434
17.7 使用Lua提供XML Binding 436
17.8 语音识别 437
17.8.1 使用Pocket Sphinx进行中文语音识别 438
17.8.2 通过商业语音识别软件进行识别 444
17.9 使用mod_xml_curl提供动态用户管理 446
17.10 使用mod_xml_cdr模块处理话单 448
17.11 小结 450
第18章 Event Socket 452
18.1 架构 452
18.1.1 外连模式 453
18.1.2 内连模式 454
18.2 Event Socket协议 454
18.2.1 外连 455
18.2.2 内连 456
18.2.3 Event Socket命令详解 457
18.3 Event Socket库 465
18.3.1 Event Socket示例 465
18.3.2 ESL函数说明 470
18.4 事件 475
18.4.1 事件的学习方法 475
18.4.2 常用事件简介 476
18.5 小结 478

第19章 使用ESL开发 479
19.1 创建独立的ESL应用 479
19.1.1 创建目录和源文件 479
19.1.2 编译和执行 480
19.1.3 将源代码纳入版本控制 481
19.2 用ESL重写空中充值服务 482
19.3 用ESL写一个ACD 490
19.4 用Inbound模式实现IVR 496
19.5 使用Java连接ESL 501
19.6 使用Erlang控制呼叫流程 502
19.6.1 准备工作 503
19.6.2 将来话交给Erlang处理 504
19.6.3 用Erlang实现空中充值服务 506
19.6.4 用Erlang状态机实现空中充值服务 509
19.6.5 其他 514
19.7 定时呼叫 516
19.8 小结 517
第20章 源代码导读及编译指南 518
20.1 准备FreeSWITCH源代码环境 518
20.2 FreeSWITCH源代码目录结构 519
20.3 FreeSWITCH源代码导读 519
20.3.1 APR 520
20.3.2 SWITCH APR 520
20.3.3 main函数 522
20.3.4 可加载模块 524
20.3.5 模块的结构 530
20.3.6 Session和Channel 531
20.3.7 SWITCH IVR 536
20.3.8 Core IO 537
20.3.9 Core Media 540
20.3.10 Core RTP 541
20.3.11 SWITCH XML 543
20.3.12 SWITCH Event 544
20.3.13 Core Codec 和 Core File 547
20.4 FreeSWITCH源代码的编译 548
20.4.1 首次编译 549
20.4.2 增量编译 550
20.4.3 常见问题及最佳实践 551
20.5 小结 552
第21章 FreeSWITCH源代码分析 553
21.1 mod_dptools 553
21.1.1 echo 553
21.1.2 answer 555
21.1.3 set 557
21.1.4 bridge 559
21.1.5 Endpoint Interface 563
21.1.6 模块框架 564
21.2 mod_commands 566
21.2.1 模块框架 566
21.2.2 originate 566
21.3 mod_sofia 567
21.3.1 模块加载 568
21.3.2 Sofia的加载及通话建立 568
21.4 小结 576
第22章 FreeSWITCH二次开发 577
22.1 给FreeSWITCH汇报Bug和打补丁 577
22.1.1 修复内存泄露问题 577
22.1.2 给中文模块打补丁 578
22.1.3 给FreeSWITCH核心打补丁 579
22.1.4 高手也会犯错误 581
22.1.5 汇报严重的问题 581
22.1.6 给Sofia-SIP打补丁 582
22.1.7 给现有App增加新功能 584
22.1.8 给FreeSWITCH增加一个新的Interface 586
22.2 写一个新的FreeSWITCH编解码模块 587
22.3 从头开始写一个模块 589
22.3.1 初始准备工作 589
22.3.2 写一个简单的Dialplan 590
22.3.3 增加一个App 592
22.3.4 写一个API 593
22.3.5 小结 594
22.4 使用libfreeswitch 594
22.4.1 自己写一个软交换机 594
22.4.2 使用libfreeswitch提供的库函数 595
22.4.3 其他 599
22.5 调试跟踪 600
22.6 小结 601
附录A FreeSWITCH开源软件社区指南 603
附录B 关于FreeSWITCH常用术语翻译的意见 605
附录C 模块列表 607
附录D FreeSWITCH架构详细示意图 614
后记 615

序言
前  言
我们已经步入了一个崭新的时代。当前,VoIP已开始成为包括语音和视频在内的多媒体通信的主导并将在全世界范围内引领一场新的革命,而SIP(Session Initiation Protocol,会话初始协议)正是这场革命的核心。
试想一下我们常用的电子邮件,它仅能用于文字通信。从电子邮件诞生开始,经过三十几年的发展,到现在几乎人人都有了一个Email地址(有的人还有多个)。随着实时多媒体通信需求的增加及技术的发展,笔者相信在不久的将来,每个人都将会拥有一个用于多媒体通信的SIP地址。当前,因为互联网技术高速发展,使得数据流量的成本越来越低,而且随着3G、4G无线网络的不断发展与优化,以及各种智能移动终端的出现,网络更将无处不在,这就为SIP的进一步普及营造了必要的环境。在这种环境下,各种新型的SIP电话及可以运行在各种移动设备上的SIP客户端可以让用户以极低的成本与世界上任何一个角落的人通信。
为什么写这本书
大多数关于操作系统的图书均重理论而轻实践,而本书则在这两者之间进行了较好的折中。
—— Andrew S. Tanenbaum
从第一次读Tanenbaum的《操作系统设计与实现》到现在已经十多年了,可这句写在那本书前言里的话到现在还让我记忆犹新。上大学时,我也曾学习过“程控交换网”、“移动通信”之类的专业知识,但那时只有肤浅的认识,理解不深。毕业后,我到烟台电信工作,负责程控交换机的维护。在工作中,我学到了电信网络传输与交换的各种技术,掌握了七号信令系统(SS7),算是做到了理论与实践相结合吧。那时候,VoIP还是很新的东西,由于网络条件的限制,国内也少有人用。2007年年底,我开始接触Asterisk。阅读了《Asterisk,电话未来之路》,并买了一个单口的语音卡,实现了VoiceMail、PSTN网关、SIP中继等各种功能。能在自己电脑上实现这些有趣的东西,令我非常兴奋。后来,我加入Idapted Inc.,开发一种一对一的网络教学平台。最初的后台语音交换系统也使用Asterisk,但不久后便转到了FreeSWITCH。那时我就深切意识到,FreeSWITCH必将成为Asterisk之后的通信领域的又一宠儿。于是便怀着无比的热情开始学习FreeSWITCH。
在学习和探索FreeSWITCH的过程中,我逐渐融入了FreeSWITCH社区,与全世界的开发者讨论各种VoIP技术、交流使用经验,这让我学到了许多知识。同时,在开发和使用FreeSWITCH的过程中我也积累了大量的使用和开发经验,并将这些知识和经验不时地更新到FreeSWITCH官方的Wiki上。Wiki是FreeSWITH文档的大本营,内容来自众多FreeSWITCH爱好者和实践者的奉献。不过,对于初学者来说,Wiki上的内容读起来还不是很系统,因此我就萌生了写一本书的想法。
本书面向的读者
本书作为国内第一本介绍FreeSWITCH的书,内容全面又不失深度,因此适合从事FreeSWITCH相关工作的各层次的读者阅读—对于初学者来说,本书是很好的入门教材;对于有一定经验的读者来说,本书可以提供更深入的指导和案例分析,帮助他们深入理清各功能点的来龙去脉;对于高级用户和开发者来说,本书也有详细的开发指导和最佳实战经验。
FreeSWITCH爱好者:对于FreeSWITCH爱好者来说,本书是最直接的需求。本书内容全面、介绍细腻和深度适当,是其他资料或同类书籍所没有的。
以FreeSWITCH为基础进行二次开发的人员:以FreeSWITCH为基础,可以进行呼叫中心、指挥调度、IP-PBX、互联网音频或视频等系统的开发。本书可以提供详尽、丰富的参考资料和实践经验,使这类读者少走弯路,甚至达到事半功倍的效果。
VoIP系统、软交换系统、电信设备开发人员:FreeSWITCH是开源领域的典范,又是同类系统中的佼佼者。本书对FreeSWITCH的原理、实现都做了深入探讨,还对源代码进行了导读和深入分析,可以带领读者很快了解现代软件的架构、逻辑及算法实现,因而很有借鉴意义。FreeSWITCH使用MPL许可证发布,完全不限制商业应用,因而广大开发者也可以完全站在巨人肩膀上,不重复发明轮子,迅速做出新的产品。
Asterisk开发者:跟大多数Asterisk开发者一样,我也是读着《Asterisk,电话未来之路》、《Trixbox不相信眼泪》一路走过来的。FreeSWITCH作为后起之秀,在许可证、系统架构和性能方面都有很好的优势。了解FreeSWITCH可以开拓读者的眼界和思路,不管是否转到FreeSWITCH,相信本书都会对你的职业生涯有所帮助。
FreeSWITCH系统实施、维护人员:对于FreeSWITCH相关呼叫中心、IP-PBX等系统的实施和维护人员来说,本书也是不可或缺的教材。事实上,本书第3章介绍了一个完整的FreeSWITCH IP-PBX搭建方案,通过对这一章的学习,企业的系统管理员可以很容易地用FreeSWITCH打造一个企业电话系统。
电信企业的维护人员、技术决策人员:广大电信企业的人员在以往的工作中积累了大量的工作经验,但往往依赖于华为、中兴等设备厂家提供的解决方案和技术架构。技术瞬息万变,在市场竞争日益激烈,国内电信政策调整并逐渐宽松之际(如虚拟运营商牌照的发放),只有了解另一种解题思路,并掌握了新技术,才能更好地把握市场方向,为客户提供更好的服务。
呼叫中心从业人员:可以预见,在不远的将来,将有很多呼叫中心是基于FreeSWITCH开发的。而本书中丰富的基础知识和详尽的功能介绍将对呼叫中心系统的使用、管理和决策起到很好的指导作用。
相关专业在校师生:笔者看过一些学校的教材,大部分只是讲VoIP原理及SIP协议等,很枯燥;而且,老师总是教育学生“要理论与实践相结合”,而本书正是理论与实战的最佳结合点。同时我也注意到,有一些学校的导师和研究生已经在围绕这个主题进行研究了。
与FreeSWITCH相关的开发经理、技术决策人员:FreeSWITCH是VoIP软交换软件的典范,但本书所讲的不仅仅是FreeSWITCH。书中以FreeSWITCH为例将枯燥的(包括通信、互联网以及软件开发)专业知识以浅显、直观、生动的语言呈现在读者面前;同时,对软件开发的模型、模式、架构、流程、状态机、接口设计等进行了普及和深入剖析。了解本书所讲的知识有助于技术选型和决策。
总之,FreeSWITCH是一个电话系统。我们人人都离不开电话,可以说,它将来可能出现在任何企业、部门及要使用电话的所有角落。进一步讲,FreeSWITCH完全超越了一个简单的电话系统,其应是一个更通用的通信系统平台,它可以完美地与互联网及移动互联网结合,创建前所未有的通信应用。古人云“开卷有益”,或云“他山之石,可以攻玉”。所以,即使你不使用FreeSWITCH,但只要从事与通信相关的工作,本书都会在扩充基础知识、开阔思路等方面对你有所帮助。
本书的内容及特色
作为专门介绍FreeSWITCH的第一本中文书,笔者对内容做了精心安排。为了照顾各种背景、各种水平的读者,也为了让读者更多地了解FreeSWITCH的方方面面,本书尽量选择了不同语言、不同场景、不同技术、不同实现方法的例子,力求使大家通过本书,对FreeSWITCH有一个全面而又深入的认识。
本书内容基于最新的FreeSWITCH 1.4版(功能和特性截止到2014年1月份的最新开发版本),从总体上分为三个部分:
第一部分 基础篇:作为本书的开篇,这部分首先介绍一些基本概念及背景知识,这部分内容主要针对没有电信背景的人。对从电路交换转到VoIP来的读者来说也会很有帮助。此外,这部分也详尽讲解了学习FreeSWITCH应该具备的基础知识,如基本的概念和术语、FreeSWITCH的基本架构、模块的组织、配置文件的组织、拨号计划和电话路由、SIP协议、媒体处理与媒体协商、NAT穿越,以及FreeSWITCH中的SIP模块(mod_sofia)等,并在第3章带领大家进行了完整的IP-PBX配置和体验。
读完本部分,读者就能具备独立使用和维护基本的FreeSWITCH系统的能力了。
第二部分 实战篇:要想学好FreeSWITCH,就必须做到理论与实践相结合,所以反复练习是必须的。这部分结合我在实际工作中的一些实际例子,介绍了在解决问题的过程中积累的经验。如第10章介绍了调试与排错的一般技巧、检查及分析系统日志的方法,并详细解释了呼叫是如何工作的。在后面的章节中还讲了一些基本功能的配置实例,如创建用户、IVR、录放音、TTS、呼叫排队、视频通话、多人电话会议、话单、计费、FreeSWITCH对接以及生产环境中的应用、系统的部署方式、拓扑结构、参数配置、安全性考虑及系统优化指南等。
通过这些内容,读者可以深入理解基础篇介绍的概念和理论,并且可以仿照这里的例子做出各种各样的应用。另外,这部分中有些例子甚至可以直接套用。
第三部分 高级篇:这部分主是面对开发者的。不过,即使不从事开发工作,学习一下本部分的内容也是很有帮助的。这部分除了讲开发之外,还对整个系统架构及内部实现进行了深入剖析。读完后你会觉得:噢,原来是这样的!
具体来讲,这部分讲了嵌入式脚本、Event Socket开发的基础知识以及通过这些开发技术实现的IVR、呼叫中心应用之类的各种例子。此外,还讲解了源代码阅读、编译的方法,并对源代码进行了深入分析。最后给出了一个在FreeSWITCH代码上进行源代码级二次开发的实例。读者可以通过自己动手实现各种呼叫功能和流程,进一步理解和巩固所学的知识,以便从根本上了解FreeSWITCH中的一切秘密。
排版及约定
本书部分插图由XMind、Keynote、Graphviz、mscgen等工具生成。
程序代码、系统的输入输出等大部分有行号。强调部分使用粗体字。
有些程序代码行较长,为适应版面,进行了人工排版。
提示符。对于命令行的输入输出来说,在Linux及Mac等UNIX类平台上,前面的“$”(或“#”,如果为root用户的话)符为操作系统命令提示符;在Windows系统上使用“C:\”作为操作系统命令提示符;“freeswitch>”作为FreeSWITCH(控制台以及fs_cli)系统提示符。在不至于引起混淆的情况下,可能会省略系统提示符。
除非有特别说明,本书中的Wiki一般指wiki.freeswitch.org,Jira一般指jira.freeswitch.org。
如何阅读本书
本书对内容和学习路线做了精心安排,对于大部分读者而言,适合顺序阅读(唯一例外的就是你可以先读后记部分)。当然,由于各种概念和理论都是相互联系的,因此,在读后面一些章节时回过头来复习和印证一下某些基本概念也是很有必要的。
对于刚进入通信领域的开发者来说,前面的通信历史和基础知识是非常有用的。只有了解了这些基础知识,才能更好地理解通信网中各个不同组成部分所发挥的作用以及它们之间的交互流程。对于有了通信基础却不熟悉FreeSWITCH的读者来说,可以简单浏览前面的通信基础知识,并通过第3章的FreeSWITCH体验对FreeSWITCH有一个直观的认识。对于比较熟悉FreeSWITCH的读者来说,本书的第4章到第9章也会帮助他们使以前零散的知识更加系统化。对于基于FreeSWITCH进行开发的普通开发者来说,在熟练掌握基础知识之后,再阅读本书第二部分,并同步做一些练习,会取得较好的效果。如果想直接在FreeSWITCH内部开发模块或修改FreeSWITCH的源代码,可接着顺序阅读第三部分的内容。
当然,笔者鼓励所有人都通读全书的内容,即使不做开发,后面有关开发的相关内容也有助于理解前面的基础知识。在通读本书一遍以后,根据自己的情况挑选相关的章节进行反复阅读和实验,以便将所有知识都融会贯通,从而使自己的水平更上一层楼。
此外,FreeSWITCH一直处于很活跃的开发中,所以某些章节中描述的内容可能与最新的版本有所出入,我将在本书相关的网站上进行跟踪说明。
实验环境及软、硬件设备选择
本书涉及的软件绝大部分都是开源软件(非开源的软件,笔者都进行了特殊说明),因此读者可以根据书中的指导自行安装和实验。
为了使书中的案例更真实,同时也为了方便大家在真实的硬件环境中进行实践,书中的实验我们均使用真实的硬件设备或软件产品进行。
作为一本技术书籍,我们在书中只讨论各种设备互连的技术性问题,而对于各厂商的设备好坏则不做评论。有条件的读者可以自行研究和比较。不过,如果读者在学习过程中想拿硬件设备做实验,但是不知道该选择哪款产品,我建议可以从本书中提到的设备中选择。推荐的理由有二:其一,这些设备我都亲自测试过;其二,书中的硬件都是现在市场上比较流行、口碑和质量都比较好的,这类硬件不容易出错,即使出错也容易找到技术支持。初学者往往对FreeSWITCH和硬件都不是很熟悉,因而在遇到问题时很难定位是硬件原因还是软件原因,以至于浪费宝贵的学习时间。至于在生产环境中大规模的应用,相信各公司都有专门的人研究,我在此就不敢妄言了。
资源和勘误
book.dujinfang.com 是本书的在线站点,提供本书的代码下载及勘误等。
freeswitch@dujinfang.com 是专门为本书设立的电子邮箱,如果您对本书有任何意见、建议或批评请发到该邮箱。
http://weibo.com/dujinfang 是我的微博,我很乐意与您进行交流。
FreeSWITCH-CN是FreeSWITCH中文社区的微信公共账号,您也可以关注该账号获取本书最新的情况,以及与本书作者进行交流。
www.freeswitch.org.cn是FreeSWITCH-CN中文社区的官方网站,经常关注该网站的更新,这样可以获取中文社区的最新信息。
www.hzbook.com是华章公司的官网,您也可以到这里下载相关代码。
由于笔者水平所限,书中存在错误和疏漏在所难免,欢迎广大读者批评指正。
致谢
FreeSWITCHTM是OSTAG的注册商标。感谢Anthony Minessale及他的团队给我们提供了如此优秀的软件,也感谢他在本书写作时提供的耐心指导和答疑;同时感谢FreeSWITCH社区所有成员的热心帮助,使我在学习FreeSWITCH的道路上一帆风顺。本书的一些资料和例子来自FreeSWITCH Wiki及邮件列表,因不能一一查证原作者,故在此一并致谢。
感谢机械工业出版社华章公司。华章公司对中文原创计算机图书的信任让我倍感温馨。感谢杨福川策划,他对图书出版的理念带给我许多启发和写作的动力。感谢孙海亮和姜影编辑,他们的耐心和细致保证了本书的质量和写作进度。感谢方舟先生,他给了我许多写书的建议,并介绍我认识杨福川先生。感谢刘光大老师,是他帮我策划并将我带上了出版之路。
感谢我的妻子吕佳娉,她是本书的第一读者,常常帮我修订文字错误;偶尔,在我埋头写作时,悄悄地在我案头放一个削好的苹果;多少次,在我挑灯夜战的翌日清晨,做好早餐,冲好茶,自己悄悄去上班。感谢我的儿子杜昱凝,他很聪明,还不到4岁就会经常帮我测试电话了。在我写作时,他清脆的声音“喂,爸爸吗?……”经常萦绕在我的耳畔,鼓励我继续写下去。我也很内疚写书占用了好多本应该陪他玩耍的时间。
感谢Jonathan Palley先生,是他指导我走上了FreeSWITCH之路。感谢崔钢先生跟我一起创业,因为有了他管理公司的方方面面,才使我有更多的时间专注于FreeSWITCH;此外,他还写了本书第2章中有关呼叫中心的部分内容。感谢滨州公路工程总公司机械工程师张令考先生,他与笔者合作编写了第2章、第12章及第14章的部分内容。感谢高超、李洋、杨小金、景朝阳、李雪梅,他们或者写了一些例子,或者帮我进行了校对、测试、编辑和排版等。感谢程祝波,他维护着FreeSWITCH-CN QQ群,从而为大家提供了一个实时交流的平台,同时他也对本书的写作提了很多很好的意见。感谢Tim Yang先生,是他提供了本书自写作以来的第一笔捐款。感谢网友flyingnn及其他热心读者,他们对本书给予了积极的反馈并帮助我勘误,没有他们,便没有本书。
特别鸣谢
在本书写作时,得到了国内外一些硬件和设备厂商的赞助和支持,在此表示由衷的感谢。这些公司有(排名不分先后):Yealink(亿联)、Grandstream(潮流)、Dinstar(鼎信通达)、Sangoma(加拿大,及中国总代星昊通)、Vestec(加拿大)等。

杜金房

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多