0

get_customer_input ReasonForCalling_Play_prompt

测试 Lex 聊天机器人时,Lambda 函数正确返回。通过 Amazon Connect 调用函数会导致错误。关于如何以正确的格式在 Connect 中保存来自 Lambda 的返回的任何想法?* 更新以添加更新的 lambda 代码和 Lex 配置图像。

Lambda Code:

    console.log('Loading event');
    var AWS = require('aws-sdk');
    var db = new AWS.DynamoDB({ apiVersion: '2012-08-10' });


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

        var ssn = event.currentIntent.slots.userSSN;
        var mySecret = event.currentIntent.slots.secretWord;


        var params = {

            TableName: 'users',
            Key: {
                "fourDigSSN": {
                    "N": ssn
                },
                "mySecretWord": {
                    "S": mySecret
                }
            },
            AttributesToGet: ["accountBalance"]
        };

        db.getItem(params, function(err, data) {
            if (err) {
                console.log(" It didn't work and here is the error " + err); // an error occurred
            }
            else
                callback(null, {
                    "sessionAttributes":{
                        "accountBal": data.Item.accountBalance.N
                    },
                    "dialogAction": {
                        "type": "ConfirmIntent",
                        "message": {
                            "contentType": "PlainText",
                            "content": "Your account has been verified. Your account balance is " + data.Item.accountBalance.N + "."

                        },
                        "intentName": "ReasonForCalling",
                        "slots": {
                            "userSSN": ssn,
                            "secretWord": mySecret
                        }
                    }

                });
                // var accountBal = data.Item.accountBalance.N;
                // //console.log("GetDBItem succeeded:", JSON.stringify(data, null, 2));
                // callback(null, {accountBalance : accountBal});
        });



    };

[lex_configuration][1]
[connect_contact_flow][2]
[connect_lambda_Details][3]
4

1 回答 1

0

在匹配“ReasonForCalling”意图后,您的 Amazon Connect 联系流似乎正在引用 $.External.(something)。$.External 仅在 Amazon Connect 直接调用 Lambda 函数时使用。在您的情况下,Amazon Connect 正在与 Lex 交互。Lex 正在调用 Lambda,因此您返回到 Amazon Connect 的任何响应都将来自 Lex,而不是 Lambda。为了让 Amazon Connect 从 Lex 读回某些内容,您需要在 Play 提示步骤中使用以下选项之一:

  • $.Lex.IntentName
  • $.Lex.Slots.(slotName)
  • $.Lex.SessionAttributes.(sessionAttributeKey)

选项1:您可以配置 Lex 将账户余额插入一个名为“AccountBal”的插槽,然后“将参数返回给客户端”。从那里,Amazon Connect 可以将该值作为 $.Lex.Slots.AccountBal 访问。

选项 2:如果您希望 Amazon Connect 直接与 Lambda 交互,您可以使用 Lex 收集 userSSN 和 secretWord,然后构建一个单独的 Lambda 函数,Amazon Connect 使用“调用 AWS Lambda 函数”步骤直接调用该函数来执行数据库查找。使用此方法,您将直接从 Lambda 接收响应,并且可以将其引用为 $.External.accountBalance。

已编辑 ----------

您的回调将 DialogAction 类型设置为“ConfirmIntent”,因此 Lex 很可能仍期待一些用户响应。我怀疑 Amazon Connect 是否能从 Lex 获得任何回报。尝试将回调更新为以下内容,以便 Lex 完成履行并返回到 Amazon Connect:

callback(null, {
    "sessionAttributes":{
        "accountBal": data.Item.accountBalance.N
    },
    "dialogAction": {
        "type": "Close",
        "fulfillmentState": "Fulfilled",
        "message": {
            "contentType": "PlainText",
            "content": "Your account has been verified. Your account balance is " + data.Item.accountBalance.N + "."

        }
    }

});

于 2018-02-15T14:01:07.287 回答