如何在Lex中使用sessionAttributes?

时间:2019-06-06 19:21:50

标签: amazon-web-services aws-lambda amazon-lex

我刚刚开始使用Amazon Lex创建聊天机器人。我想使用一些会话属性来保持会话状态。基本上,我的机器人首先从数据库中选择一个文件,例如文件“ abc123”,然后保持该文件的状态,以便用户在尝试从该文件中检索内容时无需保持指定文件的状态。如何在文件中保持流状态?

我创建了一个名为“ FileQuery”的Intent,并将sessionAttribute修改为“ file”:fileNo

fileNo通过聊天机器人中的用户输入传递并存储在变量中。这是我下面的lambda函数。

exports.handler = (event, context, callback) => {

    //storing users input for file into "file"
    var fileNo = event.currentIntent.slots.FileNumber;

    callback(null, {
      "sessionAttributes": { 
          "file": fileNo,
          "key": "value"
      },
        "dialogAction": {
            "type": "Close",
            "fulfillmentState": "Fulfilled",
            "message": {
                "contentType": "PlainText",
                "content": "File " + fileNo + " selected"
            }

        }

    });


}; //end

用户输入时: “选择文件abc123”

Lex: “文件abc123已选择”

用户: “给我名字和联系方式”

我希望Lex / Lambda在上下文中理解文件并检索有关该文件的信息。我该怎么办?

2 个答案:

答案 0 :(得分:0)

将会话属性存储在lex会话属性中后,可以使用-

从请求中在lambda函数中检索相同的内容。
input.sessionAttributes.attributeName

答案 1 :(得分:0)

这对我有用。将值保存到 sessionAttributes。

{
  "sessionAttributes": {
  "fileName": "budgetreport.doc"
},
"dialogAction": {
...

然后我可以从事件/输入访问它们。 名称具有会话属性的值。

exports.handler = async (event) => {

let message = firstMsg;
var attributes = event['sessionAttributes'];
console.log('attrs; ',attributes);
let name;
let type="Close";

if( attributes != null)
  name= attributes['fileName'];