通过执行以下操作,我能够让我的 FAQ 机器人在示例应用程序的文本部分工作:
我按照 KevinR 的建议将 ConversationBotTextFragment.java 中的 promptUserToRespond 更新为以下内容(重写以便完整答案在一个地方):
public void promptUserToRespond(Response response,
LexServiceContinuation continuation) {
if(!DialogState.ReadyForFulfillment.toString().equals(response.getDialogState())
&& !DialogState.Fulfilled.toString().equals(response.getDialogState())) {
addMessage(new TextMessage(response.getTextResponse(), "rx", getCurrentTimeStamp()));
readUserText(continuation);
}
else if(DialogState.Fulfilled.toString().equals(response.getDialogState())) {
addMessage(new TextMessage(response.getTextResponse(), "rx", getCurrentTimeStamp()));
inConversation = false;
}
}
这样做之后,我成功地从我的机器人那里获得了回复,但是每次输入新的用户问题时,以前的文本都会消失。我认为我遇到此问题的原因是我的常见问题解答机器人会通过 Lambda 履行挂钩向用户发布关闭消息来为用户提供答案。当关闭消息发布时,会话结束并调用 startNewConversation() 方法,清除上一个会话中的所有消息。
为了解决这个问题,我做了以下事情:
我在 ConversationBotTextFragment.java 中创建了一个新方法(该方法与 startNewConversation() 方法相同,只是它不会清除对话)。这是说的方法:
private void ContinueConversationAfterFulfillment() {
Log.d(TAG, "Starting new conversation");
inConversation = false;
clearTextInput();
}
并将 textEntered() 中的 startNewConversation() 调用替换为 ContinueConversationAfterFulfillment() 的调用。