使用 AWS amplify 交互来结束 Lex 会话

问题描述 投票:0回答:1

我目前已经建立了一个使用 Amplify 交互结合 React 聊天机器人套件和 Lex V2 的系统。 我已将会话超时设置为 5 分钟。但如果我刷新页面,lex 仍然会从我上次离开的地方恢复对话。有没有办法可以在每次刷新页面或关闭聊天机器人窗口时结束 Lex 会话?

放大交互文档只有两种方法 - send 和 oncomplete,这两种方法都不符合我的要求。我可以遵循任何其他方法或系统来实现目标吗?

reactjs amazon-web-services amazon-lex aws-chatbot
1个回答
0
投票

注意

我不知道其他人是否会遇到与我相同的问题,但我确实找到了一种方法,可以让事情在我当前的设置下工作,我在这里发布了一个答案,以便其他人可能会发现它有用。

解决方案

对于我在 React 聊天机器人套件与 Lex 之间的设置,我使用“密钥”来触发一个意图,即 ki 将意图设置为仅在一个特定的话语上触发,并且聊天机器人在打开时自动将其发送给 lex,因此触发意图。

类似地,每次我切换聊天机器人窗口关闭时,我都会将其连接到异步函数以向 lex 发送另一个“secretkey”(这只是您想要的任何其他正常消息)。我已将我的 lex 连接到 lambda 函数,其中一个简单的 if else 子句将检查输入转录本是否等于密钥,如果是,那么我将发送此格式的响应。

 const response = {
  sessionState: {
    sessionAttributes: {},
    dialogAction: {
    type: 'Close',
    fulfillmentState: 'Fulfilled'
  },
   intent: 
    {
      confirmationState: "Confirmed",
      name: event.sessionState.intent.name,
      state: "Fulfilled",
    }
  },
  messages: [{
    contentType: 'PlainText',
    content: 'The conversation has been restarted.',
  }],
  requestAttributes: sessionState.requestAttributes, 
  shouldEndSession: true,
  
};
return response;

否则,它将继续执行其通常的功能,else 子句的示例代码:

const defaultResponse = {
      sessionState: {
        dialogAction: event.proposedNextState.dialogAction,
        intent: 
        {
          confirmationState: "Confirmed",
          name: event.sessionState.intent.name,
          state: "InProgress",
        }
      }
      
    };
    return defaultResponse;

附加信息

  • 我尝试使用对话动作类型作为“委托”,但机器人应该引出槽值,而委托根本没有满足。
  • 我没有使用密钥,而是尝试使用会话属性,但由于某种原因,只有输入文本传递给 lex,并且传递的会话属性始终为空。我也无法在文档中找到任何信息来帮助我解决这种情况,所以我求助于“密钥”。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.