Невозможно вызвать лямбда-функцию AWS в потоке контактов Amazon Connect
Я пытаюсь интегрировать функцию AWS Lambda в поток контактов Amazon Connect. Функция AWS Lambda работает нормально и дает ответ. При вызове функции в потоке контактов Connect возвращается сообщение об ошибке, но я не могу выяснить, что это за ошибка и где хранится журнал ошибок.
Я пытаюсь получить номер телефона пользователя на Amazon Connect, а затем я хотел бы проверить, существует ли номер телефона в DynamoDB или нет. Для этого я пишу лямбда-функцию и пытаюсь вызвать ее из Amazon Connect.
const AWS=require('aws-sdk');
const doClient=new AWS.DynamoDB.DocumentClient({region: 'us-east-1'});
exports.handler = function(event, context, callback) {
var params={
TableName:'testdata',
Key: {
Address: event.Details.ContactData.CustomerEndpoint.Address
}
};
doClient.get(params,function(err,data){
if(err)
{
callback(err,null);
}
else
{
callback(null,data);
}
});
}
1 ответ
Во-первых, вы должны убедиться, что разрешения были предоставлены правильно. Из интерфейса командной строки AWS введите следующую команду со следующими изменениями.
- Замените функцию "Lambda_Function_Name" фактическим именем вашей лямбда-функции.
- Замените исходную учетную запись "111122223333" номером своей учетной записи AWS.
Замените строку source-arn строкой arn вашего экземпляра Amazon Connect.
aws lambda add-permission --function-name function:Lambda_Function_Name --statement-id 1 --principal connect.amazonaws.com --action lambda:InvokeFunction --source-account 111122223333 --source-arn arn:aws:connect:us-east-1:111122223333:instance/444555a7-abcd-4567-a555-654327abc87
После правильной настройки разрешений Amazon Connect сможет получить доступ к Lambda. Однако вы должны убедиться, что ваша функция Lambda возвращает правильно отформатированный ответ. Выходные данные, возвращаемые функцией, должны быть плоским объектом пар ключ / значение, значения которого включают только буквенно-цифровые символы, тире и символы подчеркивания. Вложенные и сложные объекты не поддерживаются. Размер возвращаемых данных должен быть не более 32 Кбайт данных UTF-8.
Даже с включенной регистрацией в вашем потоке вызовов Amazon Connect не предоставляет очень подробную информацию о том, почему не работает лямбда-функция. Я бы порекомендовал жестко кодировать простой ответ в вашей функции Lambda, такой как следующий ответ node.js, чтобы убедиться, что ваш формат ответа Lambda не вызывает вашу проблему, а затем работать оттуда.
callback(null, {test : "Here is a valid response"});
Когда вы используете шаг "Активировать функцию лямбда AWS", вам не нужно передавать номер телефона в Lambda в качестве отдельного параметра, как показано на вашем изображении. Amazon Connect уже передает объект JSON в Lambda, который содержит эту информацию. Ниже приведен пример того, что Amazon Connect отправляет в Lambda.
{
"Details": {
"ContactData": {
"Attributes": {
"Call_Center": "0"
},
"Channel": "VOICE",
"ContactId": "",
"CustomerEndpoint": {
"Address": "+13215551212",
"Type": "TELEPHONE_NUMBER"
},
"InitialContactId": "",
"InitiationMethod": "INBOUND",
"InstanceARN": "",
"PreviousContactId": "",
"Queue": null,
"SystemEndpoint": {
"Address": "+18005551212",
"Type": "TELEPHONE_NUMBER"
}
}
},
"Name": "ContactFlowEvent"
}
Вы можете использовать следующее в вашей лямбда-функции для ссылки на вызывающий номер для поиска в вашей DynamoDB.
var CallingNumber = event.Details.ContactData.CustomerEndpoint.Address;
Надеюсь это поможет.