语音对话
语音对话人机交互
语音对话功能是 ASR + NLP + TTS 的串联,即完整的人机交互链路。外部输入语音或者文字,SDK返回语义理解后的文字和音频数据。
功能描述
- 语音对话模块支持输入音频和文字,对话请求结果支持SDK直接播放或者返回音频内容;
- 输入的音频与ASR模块一致,支持SDK内部录音器或者输入音频二进制数据;
- 该模块录音场景默认单句识别场景(识别到完整的一句话将停止录音,进入其他链路模块)。
支持的所有方式:
- 输入文字不播放音频:输入文字,返回对话结果的内容和音频链接,开发者自行实现播放;
- 输入文字并播放音频:输入文字,返回对话结果的内容,SDK直接进入播放,播放接受基本的暂停/停止等操作,但不返回具体的播放进度等信息;
- 录音不播放音频:打开SDK录音器识别,返回对话结果的内容和音频链接,开发者自行实现播放;
- 录音并播放音频:打开SDK录音器识别,返回对话结果的内容,SDK直接进入播放,播放接受基本的暂停/停止等操作,但不返回具体的播放进度等信息;
- 音频流输入不播放音频:输入音频二进制数据,返回对话结果的内容和音频链接,开发者自行实现播放;
- 音频流输入并播放音频:输入音频二进制数据,返回对话结果的内容,SDK直接进入播放,播放接受基本的暂停/停止等操作,但不返回具体的播放进度等信息;
备注
1.开发者可根据产品具体需求和不同场景自行选取合适的方式;
2.所有场景中,ASR通道同一时间只能开启一个,包括语音聊天、ASR识别、绘本内的录音交互。
参数说明
语音对话模块包含了ASR、NLP、TTS,所以所有相关参数与相应模块相同。
请求参数
-
AsrRequestConfig:此次语音对话指定的语音识别ASR参数,具体字段参考ASR模块参数说明;
-
NlpRequestConfig:此次语音对话指定的语义理解参数,具体字段参考NLP模块参数说明;
- TtsRequestConfig:此次语音对话指定的音频合成参数,具体字段参考TTS模块参数说明;
请求结果接口
- TuringOSClientListener:文字输入方式时,对话结果使用该接口回调,接口信息与其他模块一致,使用方式参考文字输入方式的方法说明;
public interface TuringOSClientListener {
/**
* 请求成功结果
* @param code 请求Code
* @param result 请求结果 JSON
* @param baseResp 请求结果 BaseResp,只包含基础字段
* @param extension 扩展信息
*/
void onResult(int code, String result, BaseResp baseResp, String extension);
/**
* 请求失败
* @param code 请求失败Code,参考错误码
* @param msg 请求失败信息
*/
void onError(int code, String msg);
}
- TuringOSClientAsrListener:录音或者音频流输入时,ASR通道状态、ASR识别结果以及对话结果都使用该接口回调,具体参考下面对应方法的示例说明;
public interface TuringOSClientAsrListener {
/**
* 当使用SDK录音器开启的识别,此方法会在录音开始后回调
* 一般用于UI显示开始录音,更新UI需要放到主线程,不能再此回调方法中更新
*/
void onRecorderStart();
/**
* asr识别停止,包括请求Error或者外部调用client.stopAsr都会回调
*/
void onStop();
/**
* 允许输入音频数据流,在该方法回调之后开始调用sendAudio
*/
void onStreamOpen();
/**
*
* 请求结果返回
*
* @param code 具体参考code说明
* @param result 返回的json字符串
* @param isLast Asr识别结果;last : 是否是最终结果
* @param baseResp 返回的json字符串转换的Java对象
*/
void onResult(int code, String result, boolean isLast, BaseResp baseResp);
/**
* Asr识别单论交互倒计时 最大值20s
* 单句语音识别场景下的倒计时限制,连续识别不受影响
*
* @param second
*/
void onTimer(int second);
/**
* 请求发生错误的信息
*
* @param code
* @param msg
*/
void onError(int code, String msg);
/**
* 使用内部录音时,返回声音音量变化,该方法的回调需要先设置参数enableVolume为true
*
*/
void onVoiceVolume(int i);
}
- TuringOSClientPlayListener:凡是涉及播放的方法都会使用该接口回调播放状态,具体参考下面对应方法说明;
public interface TuringOSClientPlayListener {
/**
* TTS开始播放
*/
void onPlayStart(String text);
/**
* TTS播放错误
*/
void onPlayError(String message);
/**
* TTS播放完成
*/
void onPlayComplete();
/**
* TTS播放暂停
*/
void onPlayPaused();
/**
* TTS继续播放
*/
void onPlayResumed();
}
- TuringOSClientPlayListener中onPlayStart方法回调的特殊说明:
在语音对话模块,凡是调用需要DK内部播放处理的相关的方法时(即调用startChatWithRecorderAndSpeak、actionChatAndPlay、initChatStreamAndPlay方法时),onPlayStart方法会回调开始播放某一个节点信息的内容,即聊天场景中,对话结果播放内容可能是多条播放数据,每一条开始播放时会回调准备开始播放的信息,具体参考如下示例:
场景举例:
输入文字/音频:谁在叫
调用方法:输入文字并播放音频actionChatAndPlay或者startChatWithRecorderAndSpeak
返回结果Json:
{
"code":200,
"globalId":"120336450868599001",
"message":"success",
"nlpResponse":{
"intent":{
"code":404003,
"operateState":12001
},
"results":[
{
"groupType":0,
"resultType":"text",
"values":{
"ttsStreamId":"007d5cf1420f45b59d2da267950924da",
"text":"小朋友,欢迎你进入‘谁在叫’闯关游戏。一会我会发出一个声音,你来猜猜它是什么声音吧,如果不想玩了,可以跟我说退出或不想玩了。准备好哦,开始闯关喽!第1关:"
}
},
{
"groupType":0,
"resultType":"voice",
"values":{
"voice":"http://download.turingapi.com/voice/125.mp3",
"identifier":"125"
}
},
{
"groupType":0,
"resultType":"text",
"values":{
"ttsStreamId":"aca5ba49415c44068b7321fdfb566d98",
"text":"听清楚了吗,是什么声音,想再听一遍就对我说:再来一次。不想玩了请对我说:退出。"
}
}
]
}
}
nlpResponse-results结果解释
results数组中的第一条数据:
{
"groupType":0,
"resultType":"text",
"values":{
"ttsStreamId":"007d5cf1420f45b59d2da267950924da",
"text":"小朋友,欢迎你进入‘谁在叫’闯关游戏。一会我会发出一个声音,你来猜猜它是什么声音吧,如果不想玩了,可以跟我说退出或不想玩了。准备好哦,开始闯关喽!第1关:"
}
}
语义结果,即谁在叫触发技能,云端给出此次对话结果的第一段文字和ttsStreamId(该参数SDK内部用于处理播放的数据的标识,可以忽略);
results数组中的第二条数据:
{
"groupType":0,
"resultType":"voice",
"values":{
"voice":"http://download.turingapi.com/voice/125.mp3",
"identifier":"125"
}
}
该技能会返回附加的音频mp3链接;
results数组中的第三条数据:
{
"groupType":0,
"resultType":"text",
"values":{
"ttsStreamId":"aca5ba49415c44068b7321fdfb566d98",
"text":"听清楚了吗,是什么声音,想再听一遍就对我说:再来一次。不想玩了请对我说:退出。"
}
}
语义结果,云端给出此次对话结果的第二段文字。
上述场景回调过程如下:
ChatActivity: SpeakListener onPlayStart小朋友,欢迎你进入‘谁在叫’闯关游戏。一会我会发出一个声音,你来猜猜它是什么声音吧,如果不想玩了,可以跟我说退出或不想玩了。准备好哦,开始闯关喽!第1关:
ChatActivity: SpeakListener onPlayStarthttp://download.turingapi.com/voice/125.mp3
ChatActivity: SpeakListener onPlayStart听清楚了吗,是什么声音,想再听一遍就对我说:再来一次。不想玩了请对我说:退出。
ChatActivity: SpeakListener onPlayComplete
onPlayStart方法会回调开始播放某一个节点信息的内容,如果为文字,则输出文字,如果时音频链接,则输出音频链接。
语音对话调用
一、输入文字不播放音频
-
该方式可以输入文字,返回对话结果的文本内容以及音频链接,可根据返回的音频链接自行实现播放的过程,播放过程由开发者控制;
-
文字输入的语音对话不包括ASR识别过程,所以回调接口需要使用TuringOSClientListener。
方法一:不指定nlp参数和tts参数,默认使用聊天技能
/**
* 方法说明
* @param text 对话输入的文字
* @param listener TuringOSClientAsrListener
*/
public void actionChat(String text, TuringOSClientListener listener)
//调用
turingOSClient.actionChat(text, listener);
方法二:输入NlpRequestConfig可以指定此次对话使用的技能参数
/**
* 方法说明
* @param text 对话输入的文字
* @param NlpRequestConfig 同NLP中的NlpRequestConfig
* @param TuringOSClientListener
*/
public void actionChat(String text,
NlpRequestConfig requestConfig,
TuringOSClientListener listener)
方法三:输入NlpRequestConfig和TtsRequestConfig参数,TtsRequestConfig可以指定此次对话合成的音频参数
/**
* 方法说明
* @param text 对话输入的文字
* @param NlpRequestConfig 同NLP中的NlpRequestConfig
* @param TtsRequestConfig 同TTS中的TtsRequestConfig
* @param TuringOSClientListener
*/
public void actionChat(@NonNull String text,
NlpRequestConfig requestConfig,
TtsRequestConfig ttsRequestConfig,
TuringOSClientListener listener)
输出说明
该方式的返回结果TuringOSClientListener接口中回调:
-
对话结果的文本内容和播放内容在BaseResp-NlpResponse-List
-Results 中,其他详细内容具体字段说明参考BaseResp说明; -
每一次独立的对话请求会返回onResult或onError;
- 请求成功的结果json字符串对应result;
- extension:扩展输出字段,该模块暂时没有输出。
二、输入文字并播放音频
- 该方式输入目标文字之后,会返回对话结果的文字,并且SDK会播放音频,回调播放状态;
-
播放状态将在TuringOSClientPlayListener回调;
-
该方式不输出音频相关的链接或者文件,请求后直接进入播放状态;
- NlpRequestConfig、TtsRequestConfigke可以为null。
方法说明
/**
*
* @param text
* @param requestConfig
* @param ttsRequestConfig
* @param listener
* @param playListener
*/
public void actionChatAndPlay(@NonNull String text,
NlpRequestConfig requestConfig,
TtsRequestConfig ttsRequestConfig,
TuringOSClientListener listener,
TuringOSClientPlayListener playListener);
输出说明
该方式的返回结果TuringOSClientListener接口中回调:
-
对话结果的文本内容在BaseResp-NlpResponse-List
-Results 中,不包含播放内容,其他详细内容具体字段说明参考BaseResp说明; -
每一次独立的对话请求会返回onResult或onError;
- 请求成功的结果json字符串对应result;
- extension:扩展输出字段,该模块暂时没有输出;
- 调用开启后直接进入播放状态,播放状态控制参考播放控制。
三、录音不播放音频
-
该方式包含ASR识别过程,所以整个过程有两次关键性的返回:1.ASR识别的最终识别结果(如果ASR参数打开了实时返回识别结果的开关,TuringOSClientAsrListener接口的onResult会实时回调识别结果;2.NLP+TTS处理之后的结果,即语音对话的结果;
-
enableTts参数可以指定此次对话是否需要返回音频,当为false时,不返回语义理解结果对应的音频,只返回语义理解的文字结果;
-
当使用场景中不需要音频时可以设置enableTts位false,这样可以降低请求耗时;
-
录音的控制参考ASR模块ASR的停止和释放。
方法一:enableTts可以指定此次对话是否需要返回音频,
/**
*
* @param enableTts 是否合成TTS
* @param listener
*/
public void startChatWithRecorder(boolean enableTts, final TuringOSClientAsrListener listener)
方法二:enableTts同上,可以指定AsrRequestConfig和NlpRequestConfig
/**
*
* @param enableTts 是否合成TTS
* @param asrRequestConfig 不能为null
* @param nlpRequestConfig 同NLP中的NlpRequestConfig,可以为null
* @param listener
*/
public void startChatWithRecorder(boolean enableTts, AsrRequestConfig asrRequestConfig, NlpRequestConfig nlpRequestConfig, TuringOSClientAsrListener listener)
方法三:enableTts同上,可以指定AsrRequestConfig、NlpRequestConfig、TtsRequestConfig
/**
*
* @param enableTts 是否合成TTS
* @param asrRequestConfig 不能为null
* @param nlpRequestConfig 同NLP中的NlpRequestConfig,可以为null
* @param ttsRequestConfig 同TTS中的TtsRequestConfig,可以为null
* @param listener
*/
public void startChatWithRecorder(boolean enableTts, AsrRequestConfig asrRequestConfig, NlpRequestConfig nlpRequestConfig, TtsRequestConfig ttsRequestConfig,TuringOSClientAsrListener listener)
输出说明
该方式的返回结果TuringOSClientAsrListener接口中回调:
-
ASR识别结果会在onResult中输出,具体过程与ASR模块ASR识别一致,当ASR识别结果完整,即isLast为true时,开始输出对话的结果;
-
对话结果也在onResult中输出,具体文本内容和播放内容在BaseResp-NlpResponse-List
-Results 中,其他详细内容具体字段说明参考BaseResp说明; -
请求成功的结果json字符串对应result;
-
extension:扩展输出字段,该模块暂时没有输出;
-
该方法需要开发者自行播放音频。
四、录音并播放音频
-
该方式包含ASR识别过程,所以整个过程有两次关键性的返回:1.ASR识别的最终识别结果(如果ASR参数打开了实时返回识别结果的开关,TuringOSClientAsrListener接口的onResult会实时回调识别结果;2.NLP+TTS处理之后的结果,即语音对话的结果;
-
该方式SDK会开启录音进行ASR识别,并将ASR结果请求NLP和TTS,成功获取结果后会直接播放音频;
-
播放状态由TuringOSClientPlayListener回调;
-
录音的控制参考ASR模块ASR的停止和释放。
方法说明
/**
*
* @param asrRequestConfig
* @param nlpRequestConfig
* @param ttsRequestConfig
* @param listener
* @param playListener
*/
public void startChatWithRecorderAndSpeak(AsrRequestConfig asrRequestConfig,
NlpRequestConfig nlpRequestConfig,
TtsRequestConfig ttsRequestConfig,
TuringOSClientAsrListener listener,
TuringOSClientPlayListener playListener);
输出说明
该方式的返回结果TuringOSClientAsrListener接口中回调:
-
ASR识别结果会在onResult中输出,具体过程与ASR模块ASR识别一致,当ASR识别结果完整,即isLast为true时,开始输出对话的结果;
-
对话结果也在onResult中输出,具体文本内容和播放内容在BaseResp-NlpResponse-List
-Results 中,其他详细内容具体字段说明参考BaseResp说明; -
请求成功的结果json字符串对应result;
- extension:扩展输出字段,该模块暂时没有输出;
- 调用开启后直接进入播放状态,播放状态控制参考播放控制。
五、音频流不播放音频
-
该方式包含ASR识别过程,所以整个过程有两次关键性的返回:1.ASR识别的最终识别结果(如果ASR参数打开了实时返回识别结果的开关,TuringOSClientAsrListener接口的onResult会实时回调识别结果;2.NLP+TTS处理之后的结果,即语音对话的结果;
-
该方式支持输入音频数据流进行聊天对话,返回音频播放地址,播放过程由开发者控制;
-
enableTts参数可以指定此次对话是否需要返回音频,当为false时,不返回语义理解结果对应的音频,只返回语义理解的文字结果;
-
当使用场景中不需要音频时可以设置enableTts位false,这样可以降低请求耗时。
方法说明
//开启调用
/**
*
* @param enableTts 是否合成TTS
* @param asrRequestConfig 不能为null
* @param nlpRequestConfig 同NLP中的NlpRequestConfig,可以为空
* @param listener
*/
public void initChatStream(boolean enableTts, AsrRequestConfig asrRequestConfig, NlpRequestConfig nlpRequestConfig, TuringOSClientAsrListener listener)
/**
*
* @param enableTts 是否合成TTS
* @param asrRequestConfig 不能为null
* @param nlpRequestConfig 同NLP中的NlpRequestConfig,可以为空
* @param listener
*/
public void initChatStream(boolean enableTts, final AsrRequestConfig asrRequestConfig, NlpRequestConfig nlpRequestConfig,
TtsRequestConfig ttsRequestConfig,
final TuringOSClientAsrListener listener)
//发送音频数据流
/**
*
* @param dataBuffer 音频数据,长度不得大于1280个byte,并且要求为320的整数倍
* @param length 音频数据长度
*/
public void sendAudio(byte[] dataBuffer, int length)
调用过程与流式输入ASR识别过程一样,具体参考ASR模块流式输入。
输出说明
该方式的返回结果TuringOSClientAsrListener接口中回调:
-
ASR识别结果会在onResult中输出,具体过程与ASR模块ASR识别一致,当ASR识别结果完整,即isLast为true时,开始输出对话的结果;
-
对话结果也在onResult中输出,具体文本内容和播放内容在BaseResp-NlpResponse-List
-Results 中,其他详细内容具体字段说明参考BaseResp说明; -
请求成功的结果json字符串对应result;
-
extension:扩展输出字段,该模块暂时没有输出。
六、音频流并播放音频
-
该方式包含ASR识别过程,所以整个过程有两次关键性的返回:1.ASR识别的最终识别结果(如果ASR参数打开了实时返回识别结果的开关,TuringOSClientAsrListener接口的onResult会实时回调识别结果;2.NLP+TTS处理之后的结果,即语音对话的结果;
-
该方式SDK会开启录音进行ASR识别,并将ASR结果请求NLP和TTS,成功获取结果后会直接播放音频;
-
播放状态由TuringOSClientPlayListener回调。
方法说明
/**
*
* @param asrRequestConfig
* @param nlpRequestConfig
* @param ttsRequestConfig
* @param listener
* @param playListener
*/
public void initChatStreamAndPlay(final AsrRequestConfig asrRequestConfig,
NlpRequestConfig nlpRequestConfig,
TtsRequestConfig ttsRequestConfig,
TuringOSClientAsrListener listener,
TuringOSClientPlayListener playListener);
//发送音频数据流
/**
*
* @param dataBuffer 音频数据,长度不得大于1280个byte,并且要求为320的整数倍
* @param length 音频数据长度
*/
public void sendAudio(byte[] dataBuffer, int length)
调用过程与流式输入ASR识别过程一样,具体参考ASR模块流式输入。
输出说明
该方式的返回结果TuringOSClientAsrListener接口中回调:
-
ASR识别结果会在onResult中输出,具体过程与ASR模块ASR识别一致,当ASR识别结果完整,即isLast为true时,开始输出对话的结果;
-
对话结果也在onResult中输出,具体文本内容和播放内容在BaseResp-NlpResponse-List
-Results 中,其他详细内容具体字段说明参考BaseResp说明; -
请求成功的结果json字符串对应result;
- extension:扩展输出字段,该模块暂时没有输出;
- 调用开启后直接进入播放状态,播放状态控制参考播放控制。
播放控制
语音对话模块调用了SDK内部播放的方法时,可以使用以下方法来控制播放。
停止播放:
client.actionStopPlay();
暂停播放:
client.actionPausePlay();
继续播放:
client.actionResumePlay();
注意:以上播放控制的方法对TTS合成模块同样有效,所以尽可能明确设备正在处理播放的模块。
语音对话输出
1.调用了音频输入的方法时,ASR结果和对话结果都在TuringOSClientAsrListener中回调,整个过程有两次关键性的返回。1.ASR识别的最终识别结果(如果ASR参数打开了实时返回识别结果的开关,TuringOSClientAsrListener接口的onResult会实时回调识别结果;2.NLP+TTS处理之后的结果,即语音对话的结果;
具体示例:
asr结果:
{
"asrResponse":{
"binarysId":"2d456834-d82c-491d-a92d-312a1a86c300",
"state":200,
"value":"您好"
},
"code":200,
"globalId":"98413305835000000",
"message":"success"
}
NLP+TTS处理之后的结果
{
"code":200,
"globalId":"98413305835000000",
"message":"success",
"nlpResponse":{
"intent":{
"code":100000,
"operateState":1010
},
"results":[
{
"groupType":0,
"resultType":"text",
"values":{
"ttsUrl":[
"http://turing-iot.oss-cn-beijing.aliyuncs.com/tts/tts-0b6c2dd6687a4c8cb73a3ca49ed9b3ca-c63480507c8844cca59e36d7859d63ef.mp3"
],
"emotionId":0,
"sentenceId":201,
"text":"恩恩,你也好,我好喜欢小主人哦!"
}
}
]
}
}
2.调用了含有播放的方法,此次对话的语音播放由SDK来处理,播放状态在TuringOSClientPlayListener中回调;
3.ASR是识别结果与ASR模块一致,具体请参考ASR识别输出说明。
BaseResp说明
在语音对话模块中,语音聊天会触发技能,每个技能的参数字段由所差异,所以BaseResp只解析基础字段,技能的实体内容字段需要自行实现实体类来解析,TuringSDKSample已经给出大部分技能的解析实体类;
大部分技能公用实体对象SkillParameters:
/**
* 部分技能字段
* 儿童聊天(100000) 英文对话(100102) 成语接龙(10005)
* 知识库(100302) 歌曲点播(200101) 故事点播(200201)
* 曲艺点播(200201) 十万个为什么(200205) 绕口令(200207)
* 维基百科(200209) 脑筋急转弯(200211) 顺口溜(200212)
* 动物叫声(200301) 大自然声音(200302) 乐器声音(200303)
* 诗词背诵(200401) 拍照(200501) 跳舞(200701)
* 日期查询(200702) 时间查询(200702) 闹钟(200710)
* 笑话(201204) 四则运算(201501) 中英互译(201711)
* 谁在叫(404003) 休眠(900101) 屏幕亮度(900110)
* 电量查询(900110) 音量控制(900110) 开机提示语(1000010)
* 主动交互(1000011)
*
*
**/
public class SkillParameters implements Serializable
天气技能实体WeatherParameters;
其他特殊技能可根据具体返回的Json自行实现具体的实体类。
BaseResp字段说明
| 参数 | 类型 | 说明 |
|---|---|---|
| code | int | 请求响应Code,具体可参考Code说明 |
| message | String | 请求响应的消息描述 |
| nlpResponse | NlpResponse(Object) | 语义请求结果 |
- 当code=200表示NLP成功;
- 其他code表示识别异常,参考Code说明。
NlpResponse
| 参数 | 类型 | 说明 |
|---|---|---|
| intent | Intent(Object) | 语义理解结果的实体内容 |
| results | List |
语义理解结果的提示语和播放内容集合 |
NlpResponse-Intent
| 参数 | 类型 | 说明 |
|---|---|---|
| code | Intent(Object) | 此次请求命中的技能Code 具体参考API技能说明 |
| operateState | int | 此次技能的状态值,可参考OperateState说明 |
注意:该对象内不包含其他字段值,开发者需要根据不同的技能返回的JSON来编写解析不同的实体类,TuringSDKSample已经给出大部分技能的解析实体类,仅供参考,以实际返回的JSON数据为主。
通用operateState
| code | 说明 |
|---|---|
| 1000 | 主动退出 |
| 1010 | 无上下文结束 |
| 1100 | 启动 |
| 1200 | 暂停 |
| 1300 | 继续 |
| 1400 | 等待重启 |
NlpResponse-List
| 参数 | 类型 | 说明 |
|---|---|---|
| groupType | int | 组类型(普通接入可忽略该参数): 0为独立输出; 大于0时可能包含同组相关内容 |
| resultType | String | 输出类型: 当 resultType=text 时:表示文本 当 resultType=voice 时:表示音频 url 当 resultType=image 时:表示图片 url 当 resultType=video 时:表示视频 url |
| values | Values(Object) | 输出内容(必会包含 resultType 对应的 key, 其他会根据具体应用场景进行字段扩充) |
例如:
当resultType="voice"时,values必会包含voice对应的key;
{
//其他字段省略
"groupType":0,
"resultType":"voice",
"values":{
"voice":{
"http://turing-iot.oss-cn-beijing.aliyuncs.com/tts/tts-c8162cf54ada46bf883c0c19c8eba0de-20fcbe842c4746949d8db99192c10d7e.mp3"
}
}
}
解析示例:
TuringSDKSample已经给出解析示例
Path:com.turing.sample.ai.chat.ChatActivity
Method:handlerResult
注意
语音对话中,语义理解输出的文字结果以及附加的播放内容集合主要在NlpResponse-List
语义理解的技能实体内容主要NlpResponse-Intent中,具体参考返回的Json;
{
"code":200,
"globalId":"130635831624483001",
"message":"success",
"nlpResponse":{
"intent":{
"code":200101,
"intentName":"play_music",
"operateState":1100,
"parameters":{
"singer":"周杰伦",
"name":"夜曲"
}
},
"results":[
{
"groupType":0,
"resultType":"text",
"values":{
"ttsUrl":[
"http://turing-iot.oss-cn-beijing.aliyuncs.com/tts/tts-c8162cf54ada46bf883c0c19c8eba0de-3b4770ca7db84f38a04a9637f77d717f.mp3"
],
"text":"好的,请听我唱周杰伦的夜曲。"
}
},
{
"groupType":0,
"resultType":"voice",
"values":{
"voice":"http://iot-cdn.turingapi.com/202012242027/292a437efe852f713c464197a401b553/media/audio/20180524/8930b3635cb04f0cbb769c9c277f9acc.mp3"
}
}
]
}
}
Results:返回了语义理解结果的文本等内容;
NlpResponse-Intent-parameters:返回诗词技能的详细信息。