我做了什么?
我使用 api.ai 的 Android SDK(又名 DialogFlow)创建了一个聊天机器人。我的聊天机器人以语音形式接收输入,然后使用 Google TTS 将响应从文本转换回语音。
我通过像这样循环监听器创建了一个始终监听模式:-
@Override
public void onListeningCanceled() {
aiService.resume();
}
@Override
public void onListeningFinished() {
aiService.resume();
}
@Override
public void onError(AIError error) {
aiService.resume();
}
这工作得很好,因为在调用任何这些方法后监听会自动恢复。
实际问题
但是当机器人说话(即将文本响应转换为语音)并且监听器已经开始监听用户的一些输入时,就会出现问题。
听者等待响应大约 5-6 秒,但此时机器人实际上正在说话,因此听者无法正确收听。
我需要什么?
我想要一个解决方案,其中监听器将等到机器人说出完整的响应,然后监听器再次恢复监听。
这将使机器人更具对话性,并且用户无需每次都按录制按钮。
最佳答案
@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();
}
关于java - 增加 DialogFlow (api.ai) Android SDK 中的监听超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50405744/