Amazon Connect - 调用Lambda

时间:2018-02-14 22:00:59

标签: aws-lambda amazon-lex amazon-connect

this get_customer_input

Lambda函数在测试Lex chatbot时正确返回。 通过Amazon 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]

1 个答案:

答案 0 :(得分:0)

在匹配" ReasonForCalling"之后,您的Amazon Connect联系人流似乎引用了$ .External。(某事)。意图。 $ .External仅在Amazon Connect直接调用Lambda函数时使用。在您的情况下,Amazon Connect正在与Lex进行交互。 Lex打电话给Lambda,所以你回到Amazon Connect的任何回复都来自Lex,而不是Lambda。为了让Amazon Connect从Lex读回内容,您需要在Play提示步骤中使用以下其中一项:

  • $。Lex.IntentName
  • $。Lex.Slots。(广告位名称)
  • $。Lex.SessionAttributes。(sessionAttributeKey)

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

选项2:如果您希望Amazon Connect直接与Lambda交互,您可以使用Lex收集userSSN和secretWord,然后使用"调用AWS Lambda函数"直接构建Amazon Connect直接调用的单独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 + "."

        }
    }

});