Невозможно вызвать лямбда-функцию 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;

Надеюсь это поможет.

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