代码之家  ›  专栏  ›  技术社区  ›  brainygrunt

Amazon Connect-调用Lambda

  •  0
  • brainygrunt  · 技术社区  · 7 年前

    get_customer_input ReasonForCalling_Play_prompt

    测试Lex chatbot时,Lambda函数正确返回。 通过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 回复  |  直到 7 年前
        1
  •  0
  •   Parrett Apps    7 年前

    您的Amazon Connect联系人流似乎引用了$。外部的(某物)匹配“ReasonForCalling”意图后。$。仅当Amazon Connect直接调用Lambda函数时,才使用External。在您的案例中,Amazon Connect正在与Lex进行交互。Lex正在呼叫Lambda,因此您返回到Amazon Connect的任何响应都将来自Lex,而不是Lambda。为了让Amazon Connect从Lex读取内容,您需要在播放提示步骤中使用以下选项之一:

    • $.莱克斯。意向名称
    • $.莱克斯。插槽。(slotName)
    • $.莱克斯。会期贡献。(sessionAttributeKey)

    选项1:您可以配置Lex将帐户余额插入名为“AccountBal”的插槽,然后“将参数返回给客户端”。从那里,Amazon Connect可以以美元的形式访问该值。莱克斯。插槽。会计余额。

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

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

    您的回调将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 + "."
    
            }
        }
    
    });