首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >增加DialogFlow (api.ai) Android SDK的监听超时时间

增加DialogFlow (api.ai) Android SDK的监听超时时间
EN

Stack Overflow用户
提问于 2018-05-18 15:13:00
回答 1查看 709关注 0票数 1

我做了什么?

我已经使用api.ai的Android SDK创建了一个聊天机器人,也就是DialogFlow。我的聊天机器人接受语音形式的输入,然后使用google TTS将响应从文本转换回语音。

我已经创建了一个始终监听模式,通过循环监听程序,如下所示:

代码语言:javascript
运行
复制
@Override
public void onListeningCanceled() {
   aiService.resume();
}

@Override
public void onListeningFinished() {
   aiService.resume();
}

@Override
public void onError(AIError error) {
   aiService.resume();
}

这可以很好地工作,因为在调用了这些方法中的任何一个之后,侦听会自动恢复。

实际问题

但是,当机器人正在说话(即将文本响应转换为语音)并且收听者已经开始收听来自用户的一些输入时,问题就出现了。

监听器等待响应大约5-6秒,但此时机器人实际上正在说话,因此监听器无法正确监听。

我需要什么?

我想要一个解决方案,其中监听器将等待,直到机器人说出完整的响应,然后,监听器再次恢复监听。

这将允许机器人更多地对话,并将消除用户每次都按下录制按钮的需要。

EN

回答 1

Stack Overflow用户

发布于 2018-07-27 22:30:54

代码语言:javascript
运行
复制
@Override
public void onResult(ai.api.model.AIResponse response) {


    final Result result = response.getResult();

    String message = result.getResolvedQuery();
    ChatMessage chatMessage0 = new ChatMessage(message, "user");
    ref.child("chat").push().setValue(chatMessage0);


     final String reply = result.getFulfillment().getSpeech();
    final ChatMessage chatMessage = new ChatMessage(reply, "bot");
    ref.child("chat").push().setValue(chatMessage);

    toSpeech.speak(String.valueOf(reply), TextToSpeech.QUEUE_FLUSH, null);


    // this is what you seek!!
    synchronized (aiService) {

        try {
            aiService.wait(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    //this is how i managed to make the bot listen any time! copy and paste all the 
    //method and you will see! 
    } aiService.startListening();


}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50405744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档