跳转至

语音对话

语音对话人机交互

语音对话功能是 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内部播放处理的相关的方法时(即调用startChatWithRecorderAndSpeakactionChatAndPlayinitChatStreamAndPlay方法时),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(Object) 语义理解结果的提示语和播放内容集合

NlpResponse-Intent

参数 类型 说明
code Intent(Object) 此次请求命中的技能Code
具体参考API技能说明
operateState int 此次技能的状态值,可参考OperateState说明

注意:该对象内不包含其他字段值,开发者需要根据不同的技能返回的JSON来编写解析不同的实体类,TuringSDKSample已经给出大部分技能的解析实体类,仅供参考,以实际返回的JSON数据为主。

通用operateState

code 说明
1000 主动退出
1010 无上下文结束
1100 启动
1200 暂停
1300 继续
1400 等待重启

NlpResponse-List-Results

参数 类型 说明
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-Results中;

语义理解的技能实体内容主要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:返回诗词技能的详细信息。