Amazon Connect получает данные JSON от Lambda Function и PHP - PullRequest
0 голосов
/ 05 октября 2018

У меня Amazon Connect, использующий лямбда-функцию AWS для получения данных с PHP-сервера.Я прочитал эти документы на Использование лямбда-функций AWS с Amazon Connect

У меня Lambda настроена так:

exports.handler = (event, context, callback) => {
    https.get(url, (httpsResult) => {
        httpsResult.setEncoding('utf8');
        httpsResult.on('data', function gotResult (body) {
            console.log("PHP RETURNED= "+body);
            callback(null, body);
        });
    });
};

PHP возвращает в лямбду тестовый JSONобъект:

$testArray=array("test"=>"test string value");
echo json_encode($testArray); exit;

Журналы Lambda Cloudwatch показывают PHP RETURNED= {"test": "test string value"}

Но когда body возвращается в AWS Connect, он регистрирует только это:

{
    "Results": "The Lambda Function Returned An Error.",
    "ContactFlowModuleType": "InvokeExternalResource",
    ...
}

IЯ пробовал несколько способов в Lambda для создания ответа объекта JSON на Connect.В случае ошибки регистрируется единственная ошибка, как указано выше:

Функция лямбда-оператора возвращает ошибку

, но не то, что это за ошибка.Но в лямбде нет ошибок, только в коннекте.

Единственный способ успешно передать данные - это когда я игнорирую данные PHP и устанавливаю Lambda на callback(null, {"test": "test string value"});

Так что же такоечто-то не так с передачей объекта JSON из PHP через Lambda?

1 Ответ

0 голосов
/ 06 октября 2018

Оказывается, вы не должны передавать ему объект JSON , потому что, хотя в документах об этом не упоминается, функция обратного вызова должна сама выполнять кодировку JSON.Обычно вы видите свидетельство этого, в котором журнал показывает, что он дважды экранирован, но по любой причине, которая здесь не произошла.

Я использовал Node.js в Lambda, поэтому обратный вызов долженполучить обычный объект Javascript .

. Более внимательное рассмотрение примеров помогло выявить разницу:

var resultMap = {Name: 'CustomerName', Address: '1234 MainRoad ', CallerType:' Patient '}

обратный вызов (null, resultMap);

Выходные данные, возвращаемые функцией, должны быть плоским объектом пар ключ / значение, значения которого включают только буквы, цифры, тире и символы подчеркивания.Вложенные и сложные объекты не поддерживаются.Размер возвращаемых данных должен быть меньше 32 Кбайт данных UTF-8.

В следующем примере показан вывод JSON из этих функций Lambda:

{"Name": "CustomerName", "Адрес": "1234 Main Road", "CallerType": "Пациент"}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...