Freeswitch中Say的详解

在FreeSwitch开源语音系统中,Say命令是一个非常有用的命令,使用此命令可以实现系统发声,构建功能复杂的交互式场景,Say接口将预先录好的声音对特定的内容放音,支持多语言。它主要使用预先录制好的语音结合 phrase(短语)框架,实现简单的语音。如果要使用复杂的语音还需要专门的TTS结合Speak来实现,本章主要介绍Say模块。

默认模块安装是英文版本,Freeswitch实现中语音

在实际中使用到很多参考,Dialplan拨号计划和配置参数

基本命令:say(language sayType sayMethod text),其中Language 为语言,sayType 为播放的数据类型,sayMethod 为播放时的读法,text为播放的内容。

简介如下:

1,language:语言

     en英语,zh中文,这个需要根据实际配置

2,sayType:数据类型

  • ACCOUNT_NUMBER:账号。
  • CURRENCY:货币。
  • CURRENT_DATE:当前日期。
  • CURRENT_DATE_TIME:当前日期时间。
  • CURRENT_TIME:当前时间。
  • EMAIL_ADDRESS:Email地址。
  • IP_ADDRESS:IP地址。
  • ITEMS:项目。
  • MESSAGES:消息。
  • NAME_PHONETIC:姓名拼写。
  • NAME_SPELLED:姓名。
  • NUMBER:数字。
  • PERSONS:人名。
  • POSTAL_ADDRESS:邮寄地址。
  • SHORT_DATE_TIME:短日期时间。
  • TELEPHONE_EXTENSION:分机号。
  • TELEPHONE_NUMBER:手机号码。
  • TIME_MEASUREMENT:时间。
  • URL:网址。

3,sayMethod:读法(并不是所有语言都实现了全部读法)

  • COUNTED:以序数词方式读出。
  • ITERATED:逐个数字读出。
  • PRONOUNCED:以基数词方式读出。

4,举个简单的例子:

	<extension name="socket_767_example">
		<condition field="destination_number" expression="^767\d+$">
		    <action application="answer"/>
			<action application="say" data="en name_spelled intered 3456789abck"></action>
			<action application="say" data="zh NUMBER ITERATED 13781655437"></action>
            <action application="playback" data="voicemail/vm-goodbye.wav"></action>
		</condition>
	</extension>

说明:

  • application="say",代表使用say应用。
  • data="en name_spelled iterated 3456789abck"
  • en=语言(英文),name_spelled= 数据类型(姓名类型),iterated =读法(逐个数字读出)

使用命令行呼叫,测试say

1,拨号盘计划

	<extension name="socket_767_example">
		<condition field="destination_number" expression="^767\d+$">
		    <action application="answer"/>
			<action application="say" data="en name_spelled intered 3456789abck"></action>
			<action application="say" data="zh NUMBER ITERATED 13781655437"></action>
            <action application="playback" data="voicemail/vm-goodbye.wav"></action>
		</condition>
	</extension>
originate {ignore_early_media=true}user/1004 7678 xml default

拨号1004用户,路由到7678 拨号计划,该计划在default的xml中

2,调整拨号计划:使用${nice_code}信道变量,动态播报

    <!--say测试-->
	<extension name="socket_767_example">
		<condition field="destination_number" expression="^767\d+$">
		    <action application="answer"/>
			<action application="say" data="en name_spelled intered ${nice_code}"></action>
			<action application="say" data="zh NUMBER ITERATED 13781655437"></action>
            <action application="playback" data="voicemail/vm-goodbye.wav"></action>
		</condition>
	</extension>
originate {ignore_early_media=true,nice_code=abcdefg}user/1004 7678 xml default

命令行使用nice_code设置了变量,手机能正常播报动态验证码,可以设置多个信道变量。这也可以通过ESl批量外呼实现语音播报。

3,通过lua脚本实现

-- 先应答,防止电话断掉
session:answer();

--使用if语句
if (session:ready() == true) then
    -- 防止自动挂断
    session:setAutoHangup(false);
	
	-- 通过信道变量获得外部传参
    local order_number = session:getVariable("nice_code");
	local order_t = session:getVariable("order_t");
	
	session:execute("say","en name_spelled ITERATED " .. order_t);
	session:execute("say","zh NUMBER ITERATED " .. order_number);
end
originate {ignore_early_media=true,nice_code=186876657,order_t=018791231}user/1002 &lua(Verification.lua)

补充:

session:say("1100","cn","name_spelled","ITERATED");

不起作用,读的依旧是中文,

但是 session:execute("say","en name_spelled ITERATED 1100");又是英文,很是奇怪。

  • 17
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常生果

喜欢我,请支持我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值