我使用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秒的响应,但此时机器人实际上正在讲话,因此听众无法正确收听。
我想要一个解决方案,其中听众会等到机器人说出完整的响应,然后,听众再次继续听。
这样可以让机器人更具对话性,并且不会让用户每次都按下录制按钮。
答案 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();
}