Amazon Connect - вызвать лямбду

get_customer_input ReasonForCalling_Play_prompt

Лямбда-функция корректно возвращается при тестировании лекс чата. Вызов функции через Amazon Connect приводит к ошибке. Любые идеи о том, как сохранить возврат из Lambda в Connect с правильным форматированием? * Обновлено, чтобы добавить обновленный лямбда-код и образ конфигурации 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 ответ

Решение

Ваш поток контактов Amazon Connect, по-видимому, ссылается на $.External.(Что-то) после соответствия намерению "ReasonForCalling". $.External используется только в том случае, если Amazon Connect напрямую вызывает функцию Lambda. В вашем случае Amazon Connect взаимодействует с Lex. Лекс звонит в Lambda, поэтому любой ответ, который вы получите от Amazon Connect, будет исходить от Лекса, а не от 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 вызывает напрямую, используя шаг "Invoke AWS Lambda Function" для выполнения поиска в базе данных. С помощью этого метода вы получите ответ непосредственно от Lambda и можете ссылаться на него как $.External.accountBalance.

РЕДАКТИРОВАНИЕ ----------

Ваш обратный вызов имеет тип DialogAction, установленный как "ConfirmIntent", поэтому Лекс, скорее всего, все еще ожидает некоторого ответа пользователя. Я сомневаюсь, что Amazon Connect даже что-то возвращает от Лекса. Попробуйте обновить функцию обратного вызова до следующего типа, чтобы 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 + "."

        }
    }

});

Другие вопросы по тегам