0
点赞
收藏
分享

微信扫一扫

基本功能与实现

茗越 04-06 18:16 阅读 1

批量创建用户

用户配置文件:conf/directory/default/,每个用户对应一个XML配置文件。

创建用户:

基本功能与实现_配置文件

批量创建用户:

基本功能与实现_创建用户_02

freeswitch 源代码目录中的 script/perl/add_user 脚本(Perl语言编写)。

基本功能与实现_配置文件_03

创建用户后,reloadxml。修改dialplan,增加到这部分用户的路由。例如增加了1020~1039这20个用户,修改默认的dialplan中的正则表达式:

基本功能与实现_创建用户_04

基本功能与实现_创建用户_05

用freeswitch 实现IVR

IVR(Interactive Voice Response,交互式语音响应):电话语音菜单。可以自己注册一个分机,拨打5000,就可以听到菜单提示了。

最简单的菜单

IVR 系统默认的配置文件:conf/autolaod_configs/ivr.conf.xml,它装入 conf/ivr_menus/目录下的所有xml文件。demo_ivr 是拨打5000听到的那个。

真正的菜单配置信息放到 <menus></menus> 标签中。每个菜单应该有唯一的名字(name)。创建一个xml配置文件 conf/ivr_menus/welcome.xml :

基本功能与实现_创建用户_06


greet-long:指定最开始的欢迎音,该语音文件默认位置:/usr/local/freeswitch/sounds/ 目录下。

基本功能与实现_创建用户_07

基本功能与实现_创建用户_08

基本功能与实现_创建用户_09

在控制台执行reloadxm,使配置生效。

基本功能与实现_配置文件_10

配置dialplan,把用户来话转接到菜单,在dialplan中加入一个extension:

基本功能与实现_创建用户_11

默认IVR简介

菜单项的配置:

基本功能与实现_xml_12

按 * 号键可以返回主菜单:

基本功能与实现_创建用户_13

按时间进行路由

构造dialplan:

基本功能与实现_创建用户_14

配置打DID号码才转入IVR:

基本功能与实现_创建用户_15

注意:action和anti-action都设置了inline属性,值为true表示该动作会立即生效。

基本功能与实现_配置文件_16

还需要配置实现 ivr_day 和 ivr_night 两个不同的IVR。

配置中文语音提示

基本功能与实现_创建用户_17

基本功能与实现_xml_18

将这些文件直接用中文语音包中对应的文件替换。

使用 sound_prefix

var.xml 中定义:

基本功能与实现_配置文件_19

修改该变量的值,指向中文的语音文件路径:

基本功能与实现_xml_20

或在dialplan中针对每一个channel进行改变:

基本功能与实现_创建用户_21

也可以设置到用户目录中,在1002.xml中加入该变量:

基本功能与实现_配置文件_22

测试dialplan:

基本功能与实现_xml_23

基本功能与实现_xml_24

当1002拨打1234,听到‘123“,但其他用户拨打1234,仍会听到”one two three“。

使用Phrase

freeswitch 实现了 phrase(短语)框架。可以将不同语音的日期、时间、货币及数字等以相同语音表示。

默认的ivr配置中,使用了phrase。 ivr_menus/demo_ivr.xml 中,greet-long的配置:

基本功能与实现_配置文件_25

该phrase 是 conf/lang/en/demo/demo_ivr.xml 中定义的一个宏:

基本功能与实现_xml_26

name属性定义了该宏的名称;pause表示在每个action之间暂停多长时间(毫秒),它匹配(match)指定模式(pattern)后,便执行下面的动作(action)。

声音文件在:conf/lang/en/en.xml 中定义,demo_ivr.xml 也是有该文件使用 include 装入。en.xml 的部分内容:

基本功能与实现_xml_27

en.xml 定义了一种语言,name 为 en;由say-module 指定的en模块;所有支持的声音文件路径都由sound-prefix指定。

可以拨打 9386 试一下。

中文phrase配置

基本功能与实现_创建用户_28

编辑 zh.xml

基本功能与实现_创建用户_29

在 conf/freeswitch.xml中

基本功能与实现_创建用户_30

增加一行

基本功能与实现_创建用户_31

说 中文

freeswitch中的say接口可以通过一些预先录制的声音文件说出一些常用的词语组合,如日期、时间等。

Say接口支持各种语言,如果需要支持中文,需要mod_say_zh模块。默认不被编译。

编译:

基本功能与实现_xml_32

为了freeswitch启动时自动加载,conf/autoload_configs/modules 中将下面行注释去掉:

基本功能与实现_配置文件_33

使用中文语言提示

在dialplan中指定language或default_language通道变量。例如修改默认的5000对应的dialplan:

基本功能与实现_配置文件_34

在1002用户配置文件1002.xml中添加,仅对1002用户生效:

基本功能与实现_创建用户_35

录音

单腿录音

基本功能与实现_创建用户_36

在dialplan中录音

基本功能与实现_xml_37

由于只有一个channel,所有录音文件是单声道的。

使用playback测试:

基本功能与实现_xml_38

对两条腿的通话进行录音

一般正常的通话通常由两个channel组成。

基本功能与实现_创建用户_39

基本功能与实现_创建用户_40

使用sox附带的play命令

基本功能与实现_创建用户_41

在不同的时间点分别执行:

基本功能与实现_创建用户_42

在dialplan中,使用record_session:

基本功能与实现_xml_43

立体声

可以将通话的两个人的声音分别存在两个声道里。

事先将RECORD_STEREO通道变量设置为true可以在录音时直接录成立体声。在dialplan中使用record_session:

基本功能与实现_配置文件_44

录音相关的通道变量

变量区分大小写:

基本功能与实现_xml_45

基本功能与实现_创建用户_46

还有一些变量可以设置声音文件的元信息:

基本功能与实现_xml_47

原生格式

为了最大限度的节省系统资源,可以将声音录制成原生格式。由mod_native_file模块提供。

将声音文件录成 /tmp/test.PCMU

基本功能与实现_xml_48

PCM格式的文件处理:

基本功能与实现_xml_49

基本功能与实现_配置文件_50

放音

playback的参数

播放声音文件

基本功能与实现_创建用户_51

文件接口的分类

1.声音文件

由mod_sndfile模块直接调用libsndfile库,典型的如:WAV、AU、AIFF、VOX等

基本功能与实现_xml_52

libsndfile 不支持的声音文件由其他模块实现;如mod_shout模块实现了对MP3文件的支持。

编译安装

基本功能与实现_xml_53

2.local_stream

mod_local_stream 中实现。每个流在整个系统中只有一个实例,但可以被多个channel读取。适合做保持音乐(MOH)

基本功能与实现_xml_54

3.silence_stream

是一个静音流,在mod_stream中实现。

基本功能与实现_xml_55

在dialplan中,有一个sleep App 和playback有同样的效果。使当前channel的执行暂停2s:

基本功能与实现_配置文件_56

区别:slience_stream会播放静音,而sleep会中断RTP流的传输。

基本功能与实现_创建用户_57

基本功能与实现_xml_58

1400为舒适噪声的参数值,范围为:1~10000,值越小噪声的音量越大;通常使用的参数值为:600~1400。

4.tone_stream

是一个铃流,在mod_tone_stream模块中实现。可以使用TGML语言生成各种信号音。

产生回铃音信号:

基本功能与实现_创建用户_59

英国的回铃音:

基本功能与实现_配置文件_60

conf/vars.xml 中定义了一些其他国家的信号音。

基本功能与实现_xml_61

loops=3 表示循环产生3次信号音,loops=1 表示无限循环。

5.file_string

原先在mod_file_string模块中实现,后合并到mod_dptools中。

基本功能与实现_配置文件_62

可以指定多个文件间的播放时间间隔

基本功能与实现_创建用户_63

6.其他接口与参数

mod_vlc模块实现了一个vlc的文件接口。vlc是一个跨平台的多媒体播放器,它能播放主流音、视频文件。

播放一个本地文件:

基本功能与实现_创建用户_64

mod_httapi模块直接实现了一个HTTP接口,它可以将远程文件缓存到本地:

基本功能与实现_创建用户_65

在playback的参数中添加“say”:

<acton application="playback" data="say:tts_commandline:Ting-Ting:hi"/>

基本功能与实现_创建用户_66

默认ivr的配置中的欢迎音就是用带有phrase:前缀的phrase宏实现。

基本功能与实现_配置文件_67

循环播放

endless_playback 和 loop_playback 两个app用于多次播放某个文件。

不断播放 test.wav 直至挂机:

基本功能与实现_创建用户_68

Say

Say是一个接口,通过定义一个统一的接口屏蔽了语言的多样性。Say也是一个app,可以通过特定的语法,使用预先录好的声音读出日期、时间等,并通过Say接口支持多语言。

基本功能与实现_创建用户_69

Say 能读取的数据类型

基本功能与实现_配置文件_70

基本功能与实现_配置文件_71

具体的读法:

基本功能与实现_配置文件_72

基本功能与实现_配置文件_73

基本功能与实现_配置文件_74

TTS

TTS(text to speech)是将文本转换成语言的一项技术,又称为语言合成(Synthesis)。

使用mod_flite

mod_flite 是freeswitch 基于flite语言合成引擎的一个TTS模块。仅支持英文。

编译安装TTS模块

基本功能与实现_配置文件_75

呼叫1000,并执行speak。speak参数使用竖线分隔,第一个参数flite表示TTS引擎的名字;第二个参数kal表示一种嗓音,(awb、kal、rms、slt)。在分机1000振铃并接听后,可以听到“hello,welcome to freeswitch”)。

基本功能与实现_创建用户_76

配置好以上dialplan后,拨打1234。

mod_tts_commandline

可以调用命令,通过命令来执行TTS功能,生成一个声音文件,进而播放。

1.使用Mac上的TTS功能

基本功能与实现_配置文件_77

基本功能与实现_xml_78

该命令不支持WAV格式。所有使用了aiff格式。

可以使用SOX软件包中的play命令来播放该文件:

基本功能与实现_配置文件_79

mac系统默认不带中文的语音库,需要安装。

安装步骤:打开“系统偏好” - 选择 “听写与语音”、“文本至语音”,在系统噪音中选择自定义,就可以选择噪音为“Ting-Ting”。

基本功能与实现_配置文件_80

编译安装 mod_tts_commandline模块

基本功能与实现_创建用户_81

编辑 tts_commandline 模块,修改settings部分:

基本功能与实现_xml_82

基本功能与实现_xml_83

dialplan的配置文件应该使用UTF-8

基本功能与实现_创建用户_84

2.使用windows平台上的TTS功能

建立VBS脚本,例如:C:\src\say.vbs

基本功能与实现_配置文件_85

使用createobject创建一个SAPI的语音对象spvoice,创建一个文件对象spfilestream,该文件对象打开一个声音文件并准备写入,然后把spvoice的音频输出指定为该文件对象,调用spvoice的speak方法进行TTS转换,并把结果写入声音文件中。

基本功能与实现_xml_86

配置 conf\autoload_configs\tts_commandline.conf.xml 文件了

基本功能与实现_创建用户_87

生成一个工程文件:

1)找一个差不多的工程文件复制过来,然后稍加修改。例如:application\mod_fsv目录下的 mod_fsv.2010.vcxproj 工程文件复制到 asr_tts\mod_tts_commandline 目录中,并改名:mod_tts_commandline.2010.vcxproj。打开该文件,将所有的 mod_fsv 替换 mod_tts_commandline。

2)打开freeswitch的solution文件freeswitch.2010.express.sln,右击“解决方案资源管理器”,选择“解决方案freeswitch.2.10..”,选择“添加” - “现有项目”,找到刚刚建立的mod_tts_commandline.2010.vcxproj,点击确定。接着在“解决方案资源管理器”中找到“mod_tts_commandline”一项,右击,选择“生成”命令编译该模块。

3.使用Linux上的TTS功能

可以使用Google Translate提供的API自己写一个脚本与mod_tts_commandline集成。

MRCP

MRCP(Media Resource Control Protocol)是一个支持访问网络上的媒体资源的协议。典型应用是TTS和ASR(自动语音识别)。v1版使用RTSP协议进行媒体资源的协商,v2版使用SIP协议。UniMRCP是MRCP协议的一个开源实现,支持v1和v2。

mod_unimrcp 是UniMRCP基础上在freeswitch中实现的一个模块。同时支持TTS和ASR。

Google Translate

基本功能与实现_xml_88

把文字变成MP3声音文件:

基本功能与实现_创建用户_89

基本功能与实现_创建用户_90

-A 指定客户端使用的User Agent;-o 指定输出文件。

加载mod_shout,使用如下的dialplan:

基本功能与实现_xml_91

基本功能与实现_配置文件_92

呼叫1234就可以听到测试的声音了。

拆成中文和英文分别读:

基本功能与实现_配置文件_93

也可以使用mod_httapi提供的HTTP文件来实现:

基本功能与实现_配置文件_94

TTS小结

什么情况下使用TTS,什么情况下使用录音呢?

基本功能与实现_创建用户_95

在呼叫失败的情况下向主叫用户播放语音提示

实现方法

对本地用户的路由都是在 conf/dialplan/default.xml中的local_extension部分配置的。呼叫失败时,会将电话转到voicemail(语音信箱),提示用户可留言。在电话进入语音信箱之前播放一个语音提示:

基本功能与实现_xml_96

第一个bridge用于呼叫被叫号码,如果呼叫失败,则dialplan会继续往下执行,

基本功能与实现_配置文件_97

在最后一个bridge之前加入:

基本功能与实现_xml_98

重新拨打电话,如果被叫忙(或拒接),originate_disposition 变量的值会是USER_BUSY,如果用户没注册就是USER_NOT_REGISTERED。拨打一个不存在的用户是,日志如下:

基本功能与实现_xml_99

提示找不到指定文件,录一个放上去。如果用户忙,也可以录一段放到/tmp/USER_BUSY.wav文件中。

进阶

1)使用一个LUA脚本;在最后一个bridge之前加入:

基本功能与实现_配置文件_100

2)使用dialplan配置。将呼叫转到播放不同声音文件的dialplan extension:

基本功能与实现_配置文件_101

使用TTS

在 conf/lang/zh/demo 目录下创建脚本,book-demo.xml。

基本功能与实现_xml_102

使用两个宏,第一个用于在用户忙的时候播放;第二个在用户未注册的时候播放。

配置后,在freeswitch控制台执行relaodmxl。

在dialplan中:

基本功能与实现_xml_103

基本功能与实现_配置文件_104

在dialplan中直接使用phrase app,

基本功能与实现_配置文件_105

只用一个phrase Macro。

先配置dialplan:

基本功能与实现_配置文件_106

在phrase Macro 中配置一个名为 HangupGause的Macro,并将 originate_disposition 作为参数传入。

基本功能与实现_xml_107

原理

基本功能与实现_创建用户_108

第一行的作用:在一个成功的bridge之后,如果用户挂断电话,直接挂机。

第二行的作用:如果呼叫失败,让dialplan继续执行,否则channel在第一次呼叫失败时就挂机了。

实现呼叫前转业务

通过拨打一个特定的号码登记需要转移到的电话号码,以后所有的呼叫都转移到该号码上。

为了实现业务登记,先建立路由:

基本功能与实现_配置文件_109

在1002拨打 #57#时将登记的信息删除:

基本功能与实现_创建用户_110

在正常的路由中进行检查:

基本功能与实现_配置文件_111

也可以使用hash api命令进行检查:

基本功能与实现_创建用户_112

直到下面的dialplan extension:

基本功能与实现_配置文件_113



举报

相关推荐

0 条评论