文档目录

    语音合成

  • HTTP接口说明
  • MRCP接口说明
  • SSML使用说明
  • 语音识别

  • MRCP接口说明
  • 云通讯

  • 语音通知接口说明
HTTP接口说明
更新时间:2019-11-26
此接口适用于http协议调用语音合成接口,即TTS-HTTP接口。
1、鉴权-通用请求参数说明
HTTP请求方式:POST
数据编码: UTF-8
请求时,需要将鉴权参数放到请求头中,代码示例如下:
HttpRequest request = HttpRequest.post(url)
.header("accessKeyId", "10931")
.header("signType", "normal")

.header("signature", "f261ff0bf7c3472894c7da70113c552b")
.header("timestamp", "1571037860787");
                                     
参数是否必填说明
accessKeyId租户id,说明: accessKeyId在能力开放平台首页-企业信息中获得(paas.lingban.cn
timestamp时间戳(毫秒)
signType验证模式:密钥明文(normal)、数字签名(md5),默认为密钥明文
signature 密钥明文验证模式时,此字段直接传递 accessKeySecret 。 数字签名验证模式时,此字段为签名结果
签名方法: accessKeyId + timestamp + accessKeySecret )。

说明: accessKeySecret 在能力开放平台首页-企业信息中获得
IP白名单说明:
•  IP白名单为全局白名单,填写后,能力开放平台内所有接口的调用,都需要从白名单中的IP进行发起。
•  TTS-HTTP接口为http协议接口,IP白名单为选填。
•  对于http协议的接口,若填写IP白名单,则只允许白名单内IP调用接口;若不填写IP白名单,则对该账号调用接口的IP不进行限制。
•  IP白名单的添加、编辑在能力开放平台首页-企业信息中进行(paas.lingban.cn)。
1.1 通用响应参数说明
                      
参数说明
code返回码, 1为请求成功,其他均为请求失败
msg返回说明
data返回内容
1.2 通用接口调用成功示例
{
"code": 1,
"msg": "success",
"data": {}
}
1.3 通用接口调用失败示例
{
"code": -1,
"msg": "创建任务失败",
"data": {}
}
2、接口说明
接口地址:/open/tts/v1/create
HTTP请求方式:POST
POST请求参数格式:application/json;charset=UTF-8
3、请求参数
注意: 请求参数包括 [通用请求参数] 和下表中的参数
                                                         
参数类型 必填说明 示例
textString 合成文字 灵伴即时,与生活对话,与 未来沟通!
speakerString说话人编码 nana
volumeString音量,值区间0-100 默认50 50
speedString音速,值区间0-100 默认50 50
pitchString音调,值区间0-100 默认50 50
inputTypeString文本格式,支持格式[text、ssml],默认text text
4、请求样例
POST https://paas.lingban.cn/open/tts/v1/create
Content-Type: application/json;charset=UTF-8
accessKeyId: 10931
timestamp: 1571037860787
signType: md5
signature: d4975f17500b0bada784fc87ac5ace1b
{
"text": "灵伴即时,与生活对话,与未来沟通!",
"speaker": "yanyan",
"volume":"50",
"speed":"50",
"pitch":"50",
"inputType":"text"
}
5、响应结果
响应结果的成功或失败通过HTTP Header的Content-Type字段区分:
成功响应
Headers的Content-Type字段内容为application/octet-stream,表示合成成功,合成的语音数据在Body中。
Headers的invokeId字段内容为该次调用产生唯一标识
Body内容为合成音频的二进制数据。
失败响应
Headers没有Content-Type字段,或者Content-Type字段内容为application/json,表示合成失败,错误信息在Body中。
Body内容为错误信息,JSON格式的字符串。如下所示:
{
"code": "-1",
"msg": "合成失败"
}
拒绝合成
请求参数input-type非text或ssml格式,拒绝合成请求。拒绝信息在Body中。
Body内容为拒绝合成信息,JSON格式的字符串。如下所示:
{
"code": "2001",
"msg": "请求类型非法"
}
6、说话人音色
•  音色是指语音合成引擎所能识别的音色清单列表,音色代号是在接口中传入的参数值
•  题材分类是指该音色推荐使用的场景
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
音色代号性别名称题材分类
linger灵儿童声
yaoyao妖妖童声
subo苏博新闻
mina米娜新闻
linghui灵慧新闻
lingyin灵隐新闻
youlan幽蓝言情小说
lingmeng绫梦言情小说
shanyu山雨玄幻小说
shenghun圣魂玄幻小说
hongmang鸿芒玄幻小说
yuzhang御彰玄幻小说
yizhou易周都市小说
chuanqi传奇游戏小说
mengjing梦静都市小说
jianming剑鸣玄幻小说
haohan浩翰都市小说
yunsong云颂玄幻小说
youran悠然玄幻小说
yanyan妍妍客服
nana娜娜客服
lulu璐璐客服
tiantian天天客服
ningning宁宁客服
xiaoyao逍遥客服
wenxi文熙客服
shuangshuang双双客服
ruirui瑞睿客服
nainai奈奈客服
qiqi麒麒客服
xiaoxiao筱筱客服
yurou羽柔客服
linglong玲珑客服
qiulian秋莲客服
luyao露瑶客服
lingfeng灵凤客服
lingyu凌宇客服
bufan步凡客服
xintong馨彤客服
yiyi伊依客服
zhentian振天客服
xiaocheng晓诚客服
chenchen晨晨客服
zhengcheng征程客服
siqi思绮客服
chenyu晨雨客服
zili子黎客服
wenhui文慧客服
xiaofang小芳客服
xiaoai小艾客服
7、状态码
                                                
状态码说明
1请求成功
-1合成失败
1001IP不合法
1002账户余额不足
1003话术不可为空
1004说话人不合法
1005账户未开通
1007验证参数错误
2001请求类型非法
MRCP接口说明
更新时间:2019-11-28
此接口适用于mrcp协议调用语音合成接口,即TTS-MRCP接口。
IP白名单说明:
•  IP白名单为全局白名单,填写后,能力开放平台内所有接口的调用,都需要从白名单中的IP进行发起。
•  若须调用TTS-MRCP接口,则IP白名单为必填。
•  IP白名单的添加、编辑在能力开放平台首页-企业信息中进行(paas.lingban.cn)。
1、配置freeswitch的mod_unimrcp模块:
安装mod_unimrcp模块
cd /项目源码地址/frerswitch
vim modules.conf
# 取消掉asr_tts/mod_unimrcp的注释
asr_tts/mod_unimrcp
# 安装mod_unimrcp模块
make mod_unimrcp-install
# 编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,添加或者去掉注释mod_unimrcp,让模块启动默认加载
vim /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
2、设置配置文件与conf文件
在mrcp_profiles目录下新建lingban-tts-mrcp-v2.xml配置文件:
vim /usr/local/freeswitch/conf/mrcp_profiles/lingban-tts-mrcp-v2.xml
然后输入以下内容:
接下来修改unimrcp默认使用的TTS驱动,vim/usr/local/freeswitch/conf/autoload_configs/unimrcp.conf.xml:default-tts-profile为新创建的lingban-tts:
3、设置拨号计划,拨打软电话
在/usr/local/freeswitch/conf/dialplan/default.xml文件中创建拨号计划:
接下来用我们的软电话注册freeswitch,然后拨打8888即可听到语音合成结果。
4、SPEAK方法说明
4.1 在SPEAK方法中可以指定以下header
•  Content-Type:请求类型
•  Voice-Name:说话人代码
•  Prosody-Volume:音量
•  Prosody-Rate:语速
4.2 请求类型(Content-Type)
必填
支持以下两种类型:
•  text/plain:以纯文本的形式传递待合成文本
•  application/ssml+xml:以ssml的形式传递待合成文本
注意:待合成文本的格式必须和Content-Type指定的类型一致
4.3 说话人代码(Voice-Name)
非必填
如果不指定本header,使用默认说话人(该默认值是在部署的配置文件中指定的)
如果指定了错误的说话人代码,服务器会拒绝SPEAK请求,并返回004 error
MRCP/2.0 149 1 409 COMPLETE
Channel-Identifier: b6a0e6d0e0d911e9@speechsynth
Completion-Cause: 004 error
Completion-Reason: Invalid voice name
说话人代码详见5.说话人音色
注意:说话人代码区分大小写
4.4 音量(Prosody-Volume)
非必填
分为绝对值、相对值和枚举值三类
绝对值的取值范围为0.0~100.0,如果不指定本header,默认音量为绝对值50.0
相对值的取值范围为-50.0~+50.0,相对值指定了在绝对值50.0的基础上的变化量,相对值0.0等效于绝对值50.0
•  枚举值的定义(与绝对值的对应关系)为:
•  silent 0.0
•  x-soft 15.0
•  soft 25.0
•  medium 50.0
•  loud 75.0
•  x-loud 100.0
•  default 50.0
如果指定了错误的绝对值或相对值,系统自动将绝对值限制在[0.0, 100]之内
如果指定了错误的枚举值,系统自动采用默认音量
4.5 语速(Prosody-Rate)
非必填
分为相对值和枚举值两类
UniMRCP接口中没有定义语速绝对值这种类型
MRCP-TTS服务内部存在绝对值这个概念,相对值和枚举值都是在绝对值的基础上计算的
如果不指定本header,默认语速为绝对值50.0
相对值的取值范围为-50.0~+50.0,相对值指定了在绝对值50.0的基础上的变化量,相对值0.0等效于绝对值50.0
枚举值的定义(与绝对值的对应关系)为:
•  x-slow 10.0
•  slow 30.0
•  medium 50.0
•  fast 75.0
•  x-fast 100.0
•  default 50.0
如果指定了错误的相对值,系统自动将绝对值限制在[0.0, 100]之内
如果指定了错误的枚举值,系统自动采用默认语速
5、说话人音色
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
音色代号性别名称题材分类
linger灵儿童声
yaoyao妖妖童声
subo苏博新闻
mina米娜新闻
linghui灵慧新闻
lingyin灵隐新闻
youlan幽蓝言情小说
lingmeng绫梦言情小说
shanyu山雨玄幻小说
shenghun圣魂玄幻小说
hongmang鸿芒玄幻小说
yuzhang御彰玄幻小说
yizhou易周都市小说
chuanqi传奇游戏小说
mengjing梦静都市小说
jianming剑鸣玄幻小说
haohan浩翰都市小说
yunsong云颂玄幻小说
youran悠然玄幻小说
yanyan妍妍客服
nana娜娜客服
lulu璐璐客服
tiantian天天客服
ningning宁宁客服
xiaoyao逍遥客服
wenxi文熙客服
shuangshuang双双客服
ruirui瑞睿客服
nainai奈奈客服
qiqi麒麒客服
xiaoxiao筱筱客服
yurou羽柔客服
linglong玲珑客服
qiulian秋莲客服
luyao露瑶客服
lingfeng灵凤客服
lingyu凌宇客服
bufan步凡客服
xintong馨彤客服
yiyi伊依客服
zhentian振天客服
xiaocheng晓诚客服
chenchen晨晨客服
zhengcheng征程客服
siqi思绮客服
chenyu晨雨客服
zili子黎客服
wenhui文慧客服
xiaofang小芳客服
xiaoai小艾客服
SSML使用说明
更新时间:2020-12-21
1、简介
SSML(Speech Synthesis Markup Language)是一种基于XML的语音合成标记语言。 用户可以利用SSML精确控制数字符号的读法、词汇的发音、韵律的停顿等特征。 本系统基于W3C SSML v1.1实现,支持SSML v1.1中的一部分常用的标签类型。
2、使用说明
XML的version字段必须为"1.0"。 XML的encoding字段表示编码,目前只支持"utf-8"编码,没有encoding字段的情况下默认为"utf-8"。 待合成的文本需要放在<speak>标签内。 其中,version字段必须为"1.1"。 无论待合成内容是中文还是英文,xml:lang字段必须为"cn"。 每个语音合成任务中有且仅有一个<speak>标签。 示例:
<?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 这是一辆<phoneme ph="xiao3">大</phoneme>卡车。 <break time="200ms"/> 今天是<say-as interpret-as="date">2018-01-22</say-as>。 <w>天气</w>阴。 </speak>
3、标签说明
3.1 概述
本系统支持的SSML标签包括:<speak>、<w>、<say-as>、<phoneme>和<break>
<speak>标签是SSML的根节点。 待合成的文本需要放在<speak>标签内。 每个语音合成任务中有且仅有一个<speak>标签。
<w>标签是词汇标志。 TTS算法会将<w>标签内部的文本当做一个完整词汇来处理。 使用<w>标签可以提高词汇朗读的流畅度,避免词汇内部出现异常停顿。
<say-as>标签是读法标志。 待合成文本中常有一些需要根据特殊规则来朗读的内容,如时间、数字、姓名、地址等等。 用户可以通过<say-as>标签指定本系统提供的特定读法规则。
<phoneme>标签是注音标志。 待合成文本中汉字的读音可以通过<phoneme>标签来指定。 本系统支持用汉语拼音对汉字注音,不支持对英文单词注音。
<break>标签是停顿标志。 用户可以通过<break>标签在合成结果中插入停顿,使合成语音的韵律更加自然。
3.2 标签嵌套关系
标签嵌套基于以下规则:
  • <speak>是根节点,其他标签全部在此标签内部;
  • <speak>内部可以包含纯文本,以及被其他标签修饰的文本;
  • <w>、<say-as>、<phoneme>和<break>都是可选标签;
  • <w>内部可以包含<say-as>和<phoneme>;
  • <say-as>和<phoneme>不强制要求在<w>内部,可以单独使用;
  • <say-as>和<phoneme>不可以互相嵌套;
  • <say-as>和<phoneme>内部不能包含任何标签;
  • <break>不可出现在<w>、<say-as>和<phoneme>内部。
例1 <speak>内部包含纯文本 <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 这是一辆大卡车。 </speak> 例2 <speak>内部包含<w> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 这是一辆<w>大卡车</w>。 </speak> 例3 <speak>内部包含<w>,<w>内部包含<phoneme>和<say-as> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 今天是<w><say-as interpret-as="code">61<say-as><phoneme ph="e2">儿<phoneme>童节</w>。 </speak> 例4 <speak>内部包含<say-as> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 请欣赏<say-as interpret-as="name">单田芳</say-as>先生播讲的评书。 </speak> 例5 <speak>内部包含<phoneme> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 这是一辆<phoneme ph="xiao3">大</phoneme>卡车。 </speak> 例6 <speak>内部包含<break>和<phoneme> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 请大家往前看。 <break time="200ms"/> 这是一辆<phoneme ph="xiao3">大</phoneme>卡车。 </speak>
3.3 <speak>标签
1. 说明:
<speak>标签是SSML的根节点。 待合成的文本需要放在<speak>标签内。 每个语音合成任务中只能存在一个<speak>标签。
2. 语法:
<speak version="1.1" xml:lang="cn">待合成文本</speak>
3. 属性:
字段名称:version
字段功能:指定SSML的版本
是否必填:是
字段说明:字段的值必须为"1.1"
字段名称:xml:lang
字段功能:指定合成的语言
是否必填:是
字段说明:无论待合成内容是中文还是英文,字段的值必须为"cn"
3.4 <w>标签
1. 说明:
<w>标签是词汇标志。 TTS会将<w>标签内部的文本当做一个完整词汇来处理。 使用<w>标签可以提高词汇朗读的流畅度,避免词汇内部出现异常停顿。
2. 语法:
<w>待合成文本</w>
3. 属性:
4. 示例:
例1 <w>内部包含纯文本 <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 这是一辆<w>大卡车</w>。 </speak> 例2 同时出现多个<w> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> <w>南京市</w><w>长江大桥</w> </speak> 例3 <w>内部包含<phoneme>和纯文本 <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 南京市<w><phoneme ph="chang2">长</phoneme>江大桥</w> </speak> 例4 <speak>内部包含<say-as> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 今天是<w><say-as interpret-as="code">61儿童节</w>。 </speak> 例5 <w>内部包含<phoneme>和<say-as> <?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 今天是<w><say-as interpret-as="code">61</say-as> <phoneme ph="e2">儿</phoneme>童节</w>。 </speak>
3.5 <say-as>标签
1. 说明:
<say-as>标签是读法标志。 待合成文本中常有一些需要根据特殊规则来朗读的内容,如时间、数字、姓名、地址等等。 用户可以通过<say-as>标签指定本系统提供的特定读法规则。
2. 语法:
<say-as interpret-as="读法代码">待合成文本</say-as>
3. 属性:
字段名称:interpret-as
字段功能:指定读法的类型
是否必填:是
4. 读法类型:
数值类
读法类型:数读
读法代码:num
说明:按数值方式朗读的整数或小数
示例:
123(一百二十三) 
123.33(一百二十三点三三)
读法类型:数读(两)
读法代码:num_liang
说明:按数值方式朗读的整数或小数,其中“2”读作“两”,用于后接量词的情况
示例:
 2(两) 
 123(一百二十三) 
 123.33(一百二十三点三三)
编码类
读法类型:码读
读法代码:code
说明:按编码方式朗读的数字和英文字母的组合
示例:
123X(一二三X) 
ISO9001(ISO九零零一)
读法类型:码读(幺)
读法代码:code_yao
说明:按编码方式朗读的数字和英文字母的组合,其中“1”读作“幺”
示例:
123X(幺二三X) 
ISO9001(ISO九零零幺)
时间类
读法类型:日期
读法代码:date
说明:支持由“-”或“/”分隔的年月日,年要求用4位数字表示,月日要求用2位数字表示
示例:
2001-01-01(二零零一年一月一日)
2001/01/01(二零零一年一月一日)
读法类型:日期(年月)
读法代码:date_ym
说明:支持由“-”或“/”分隔的年月,年要求用4位或2位数字表示,月要求用2位或1位数字表示
示例:
2001-01(二零零一年一月)
2001/01(二零零一年一月)
2001-1(二零零一年一月)
2001/1(二零零一年一月)
20-01(二零年一月)
20/01(二零年一月)
20-1(二零年一月)
20/1(二零年一月)
读法类型:时间
读法代码:time
说明:支持由“:”分隔的时间,时分秒都要求用2位数字表示
示例:
21:01:30(二十一点零一分三十秒)
21:01(二十一点零一分)
其他类
读法类型:汉语人名
读法代码:name
说明:汉语人名或姓氏,其中姓氏采用作为姓氏时的常见读音,名字中的多音字采用高频读音
示例:
  单田芳(shan4 tian2 fang1)
  查(zha1)
读法类型:电话号码
读法代码:tel
说明:支持常见电话号码格式
示例:
 13812345678(幺三八,幺二三四,五六七八)
 010-6606100(零幺零,六六零,六幺零零)
 010-66061001(零幺零,六六零六,幺零零幺)
 (010)6606100(零幺零,六六零,六幺零零)
 (010)66061001(零幺零,六六零六,幺零零幺)
 95588(九五五八八)
 4008801234(四零零,八八零,幺二三四)
读法类型:地址
读法代码:address
说明:支持常见地址格式
示例:
 通州区孙各庄303#(北京市通州区孙各庄三百零三号)
 通州区孙各庄3-2-1(北京市通州区孙各庄三杠二杠幺)
读法类型:车牌
读法代码:plate
说明:支持国内车牌,停顿规则为2-2-3或2-3-3
示例:
 京A12345(京A,幺二,三四五)
 京A12345E(京A,幺二三,四五E)
读法类型:航班号
读法代码:flight_number
说明:支持国内外航班号,停顿规则为2-3或2-4
示例:
  CA901(CA,九零幺)
  MU5173(MU,五幺七三)
5. 示例:
3.6 <phoneme>标签
1. 说明:
<phoneme>标签是注音标志。 待合成文本中汉字的读音可以通过<phoneme>标签来指定。 本系统支持用汉语拼音对汉字注音,不支持对英文单词注音。
2. 语法:
<phoneme ph="dai4 he2 cheng2 wen2 ben3">待合成文本</phoneme>
3. 属性:
字段名称:ph
字段功能:指定待合成文本的拼音
是否必填:是
特殊说明:
拼音由发音和声调组成,拼音之间由空格隔开,如pin1 yin1;
声调包括1~4声,5代表轻声;
女的拼音是nv3,铝的拼音是lv3,虐的拼音是nve4;
拼音的数量和待合成文本中的字数必须相同;

<phoneme>标签内部最多包含20个汉字。
4. 示例:
3.7 <break>标签
1. 说明:
<break>标签是停顿标志。 用户可以通过<break>标签在合成结果中插入停顿,使合成语音的韵律更加自然。
2. 语法:
<break time="停顿毫秒数ms"/>
3. 属性:
字段名称:time
字段功能:指定停顿的时长,取值范围为25ms~5000ms
是否必填:是
特殊说明:
  此功能主要面向语音流中的短时间的停顿,建议停顿时长保持在300ms以内。
4. 示例:
<?xml version="1.0" encoding="utf-8"?> <speak version="1.1" xml:lang="cn"> 你好。 <break time="200ms"/> 再见。 </speak>
MRCP接口说明
更新时间:2019-11-26
此文档适用于使用freeswitch v1.8.7作为mrcp客户端,调用灵伴mrcp服务端的asr接口,完成语音识别。
IP白名单说明:
•  IP白名单为全局白名单,填写后,能力开放平台内所有接口的调用,都需要从白名单中的IP进行发起。
•  若须调用ASR-MRCP接口,则IP白名单为必填。
•  IP白名单的添加、编辑在能力开放平台首页-企业信息中进行(paas.lingban.cn)。
1、配置freeswitch中的mod_unimrcp模块:
安装mod_unimrcp模块
cd /项目源码地址/freeswitch
vim modules.conf
# 取消掉asr_tts/mod_unimrcp的注释
asr_tts/mod_unimrcp
# 安装mod_unimrcp模块
make mod_unimrcp-install
# 编辑/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml,添加或者去掉注释mod_unimrcp,让模块启动默认加载
vim /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
2、设置profile文件与conf文件
在mrcp_profiles目录下新建lingban-asr-Normal-mrcp-v2.xml配置文件:
vim /usr/local/freeswitch/conf/mrcp_profiles/lingban-asr-Normal-mrcp-v2.xml
然后输入以下内容:
接下来修改unimrcp默认使用的ASR驱动,vim/usr/local/freeswitch/conf/autoload_configs/unimrcp.conf.xml:default-asr-profile为新创建的lingban-asr:
3、使用lua脚本集成灵伴ASR-MRCP接口
在/usr/local/freeswitch/scripts目录下新增lingban.lua脚本:
local asr_model_id = argv[1];  --获取语音检测模型名
local _loopcnt = 0;
if (asr_model_id == nil) then
  asr_model_id = "Normal"
end
local calld_id = session:getVariable("uuid");
local action = 0;
local _loopcnt = 0;
session:answer()
session:sleep(200);
function onInput(s, type, obj)
freeswitch.consoleLog("info", "Get callback with type: " .. type .. "\n");
if (type == "event") then
local event = obj:getHeader("Speech-Type");
freeswitch.consoleLog("info", "Get event: " .. event .. "\n");
if (event == "begin-speaking") then
freeswitch.consoleLog("info", "Get begin-speaking-obj: " .. obj:serialize() .. "\n");
end
if (event == "detected-speech") then
freeswitch.consoleLog("info", "Get detected-speech-obj: " .. obj:serialize() .. "\n");
ret = obj:getHeader("ASR-Completion-Cause");
if(ret ~= nill and (ret == "0" or ret == "2" or ret == "3")) then
action = 1;
end
if (obj:getBody()) then
asr_res = obj:getBody()
freeswitch.consoleLog("INFO","Get result: \n" .. asr_res .. "\n") --- 输出语音检测结果
if (string.find(asr_res, "00") ~= nil or string.find(asr_res, "001") ~= nil) then
action = 1
end
end
end
end
end
freeswitch.consoleLog("INFO","Enter Lua-script-name: " ..getFileName(debug.getinfo(1).short_src).. "\n") --- 输出语音检测结果

session:setVariable("fire_asr_events", "true");

-- Register the input callback
session:setInputCallback("onInput");
session:execute("detect_speech", "unimrcp:".."lingban-asr-"..asr_model_id.." {recognition-timeout=60000,Sensitivity-Level=0.85,Start-Input-Timers=true,no-input-timeout=10000,call-id=" .. calld_id:gsub("%-", "") .."}" .. "normal" .. " " .. asr_model_id);
while (session:ready() == true) do
_loopcnt = _loopcnt + 1;
if (_loopcnt > 300) then  -- about 1 minute;
freeswitch.consoleLog("ERR", "session:"..calld_id.. " spend too long time!")
break;
end
if (action == 1) then
session:execute("detect_speech", "unimrcp:".."lingban-asr-"..asr_model_id.." {recognition-timeout=60000,Sensitivity-Level=0.85,Start-Input-Timers=true,no-input-timeout=10000,call-id=" .. calld_id:gsub("%-", "") .."}" .. "normal" .. " " .. asr_model_id);
end
action = 0
session:sleep(200)
end
session:execute("detect_speech", "stop"); --释放资源
session:hangup()
在/usr/local/freeswitch/grammar目录新增normal.gram语法文件,可以为空语法文件须满足语音识别语法规范1.0标准(简称SRGS1.0),该语法文件ASR引擎在进行识别时可以使用。
4、使用python脚本监听DETECTED_SPEECH事件并打印
apt-get install python-dev swig
pip install python-ESL
vim events.py
#!/usr/bin/env python

events.py - subscribe to DETECTED_SPEECH events and print them to stdout

import ESL
import logging

logging.basicConfig(filename='esl.log',level=logging.DEBUG)

#/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml中配置的listen-ip、listen-port、password

con = ESL.ESLconnection('localhost', '8021', 'ClueCon')

if con.connected():
con.events('plain', 'DETECTED_SPEECH')
while 1:
e = con.recvEvent()
if e:
print e.serialize()
logging.info(e.serialize())
python events.py 启动脚本
5、拨打软电话
在/usr/local/freeswitch/conf/dialplan/default.xml文件中创建拨号计划:
接下来用我们的软电话注册freeswitch,然后拨打5001即可看到events.py打印的识别结果。
6、拨打外网交流
拨打远程,需要转码和忽略前期声音 originate {ignore_early_media=true,absolute_codec_string=PCMA}sofia/gateway/sip线路/电话 &lua(lingban.lua)
语音通知接口说明
更新时间:2019-11-26
此接口用于创建语音通知请求。
1、鉴权-通用请求参数说明
HTTP请求方式:POST
数据编码: UTF-8
请求时,需要将鉴权参数放到请求头中,代码示例如下:
HttpRequest request = HttpRequest.post(url)
.header("accessKeyId", "10931")
.header("signType", "normal")

.header("signature", "f261ff0bf7c3472894c7da70113c552b")
.header("timestamp", "1571037860787");
                                     
参数是否必填说明
accessKeyId租户id,说明: accessKeyId在能力开放平台首页-企业信息中获得(paas.lingban.cn
timestamp时间戳(毫秒)
signType验证模式:密钥明文(normal)、数字签名(md5),默认为密钥明文
signature 密钥明文验证模式时,此字段直接传递 accessKeySecret 。 数字签名验证模式时,此字段为签名结果
签名方法: accessKeyId + timestamp + accessKeySecret )。

说明: accessKeySecret 在能力开放平台首页-企业信息中获得
IP白名单说明:
•  IP白名单为全局白名单,填写后,能力开放平台内所有接口的调用,都需要从白名单中的IP进行发起。
•  语音通知接口为http协议接口,IP白名单为选填。
•  对于http协议的接口,若填写IP白名单,则只允许白名单内IP调用接口;若不填写IP白名单,则对该账号调用接口的IP不进行限制。
•  IP白名单的添加、编辑在能力开放平台首页-企业信息中进行(paas.lingban.cn)。
1.1 通用响应参数说明
                      
参数说明
code返回码, 1为请求成功,其他均为请求失败
msg返回说明
data返回内容
1.2 通用接口调用成功示例
{
"code": 1,
"msg": "success",
"data": {}
}
1.3 通用接口调用失败示例
{
"code": -1,
"msg": "创建任务失败",
"data": {}
}
2、接口说明
接口地址:/open/v1/voice
HTTP请求方式:POST
POST请求参数格式:application/json;charset=UTF-8
3、请求参数
注意: 请求参数包括 [通用请求参数] 和下表中的参数
                                                               
参数类型 必填说明
phoneString 手机号
templateIdString模版ID
speakerString说话人音色编码
waitingTimeInteger等待时长,最长60秒
params集合模版参数
params.nameString参数名称
params.valueString参数值
4、请求样例
POST https://paas.lingban.cn/open/v1/voice Content-Type: application/json;charset=UTF-8
accessKeyId: 10931
timestamp: 1571037860787
signType: md5
signature: d4975f17500b0bada784fc87ac5ace1b
{
"phone": "153xxxxxx",
"templateId": 1,
"speaker": "yanyan",
"waitingTime": 30,
"params": [
{
"name":"phone",
"value":"153xxxxxx"
},
{
"name":"name",
"value":"张三"
}
]
}
5、响应参数
                
参数类型 说明
invokeIdString 调用唯一标识
6、响应样例
{
"code": "1",
"msg": "请求成功",
"data": {
"invokeId": "966820c2-c26f-4036-b94e-c8062324ed92"
}
}
7、语音通知回调
7.1 接口说明
接口地址:语音通知接口调用方提供语音通知回调地址
HTTP请求方式:POST
POST请求参数格式:application/json;charset=UTF-8
7.2 请求参数
注意: 请求参数包括 [通用请求参数] 和下表中的参数
                                                                                       
参数类型 必填说明
invokeIdString 调用唯一标识
callerString主叫号
calleeString被叫号
startCallTimeLong呼叫开始时间
startRingTimeLong振铃时间
calleeAcceptTimeLong接通时间
endCallTimeLong挂断时间
causeInteger通话结束原因编码
callEndReasonString通话结束原因
durationInteger通话时长
recordPathString录音文件地址
7.3 请求样例
POST http://xxx/callback
Content-Type: application/json;charset=UTF-8
{
"accessKeyId":"1001",
"callEndReason":"正常结束",
"callee":"13051350397",
"calleeAcceptTime":1563437680,
"caller":"95114",
"cause":0,
"duration":100,
"endCallTime":1563437780,
"invokeId":"b740047e-672d-41c8-a036-dc6c8731a313",
"recordPath":"",
"signType":"normal",
"signature":"pHryChFOPBEYYjGqjgZExkHAkXluQE",
"startCallTime":1563437480,
"startRingTime":1563437580,
"timestamp":1570702061083
}
7.4 响应样例
{
"code": "1",
"msg": "请求成功",
"data": null
}
8、说话人音色
•  音色是指语音合成引擎所能识别的音色清单列表,音色代号是在接口中传入的参数值
•  题材分类是指该音色推荐使用的场景
                                                          
音色代号性别名称题材分类
yanyan妍妍客服
nana娜娜客服
lulu璐璐客服
tiantian天天客服
9、状态码
                                                    
状态码说明
1请求成功
-1合成失败
1001IP不合法
1002账户余额不足
1003话术不可为空
1004说话人不合法
1005账户未开通
1006模版ID错误
1007验证参数错误
2001请求类型非法