我做了什么?
我已经使用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秒,但此时机器人实际上正在说话,因此监听器无法正确监听。
我需要什么?
我想要一个解决方案,其中监听器将等待,直到机器人说出完整的响应,然后,监听器再次恢复监听。
这将允许机器人更多地对话,并将消除用户每次都按下录制按钮的需要。
发布于 2018-07-27 22:30:54
@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();
}https://stackoverflow.com/questions/50405744
复制相似问题