在DialogFlow(api.ai)Android SDK中增加监听超时

时间:2018-05-18 07:13:00

标签: java android chatbot dialogflow

我做了什么?

我使用api.ai a.k.a DialogFlow的Android SDK创建了一个聊天机器人。我的聊天机器人以语音形式接收输入,然后使用谷歌TTS将响应转换回来自文本的语音。

我通过循环监听器创建了一个始终监听模式: -

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

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

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

这是完全正常的,因为在调用任何这些方法后,监听会自动恢复。

实际问题

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

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

我需要什么?

我想要一个解决方案,其中听众会等到机器人说出完整的响应,然后,听众再次继续听。

这样可以让机器人更具对话性,并且不会让用户每次都按下录制按钮。

1 个答案:

答案 0 :(得分:0)

@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();


}