首页 > 解决方案 > 有没有办法将来自 LEX 的输入记录转换为 lambda,然后允许连接获取该记录并将其设置为联系人属性?

问题描述

我在下面有这个 lambda,它从 DynamoDB 获取项目并返回它以很好地连接......但是,我似乎无法让 inputTranscript 结束。有没有办法在我当前的 lambda 中实现它,以便 Connect 可以访问它?我对此感到非常困惑,因为我在文档中尝试的所有内容都对我不起作用。

const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB();
exports.handler = function(event, context, callback) {
  console.log(`DEBUG:\t Event`, JSON.stringify(event, null, 4));

  var params = {
    Key: {
      "name": {
        "S": '"' + event.slots.list + '"'
      }
    },
    TableName: 'ServiceOfferings'
  };

  dynamodb.getItem(params, function(err, data) {
    if (err) { 
        console.log("ERROR:\t", err);
        callback(err);
    } else { 
        console.log(data);
        if (data.Item) {
          console.log('data returned from DynamoDB ', JSON.stringify(data));
          callback(null, {
            ServiceOffering: data.Item.name.S.slice(1, -1)
          });
        }
        else {
          console.log("no callback number found for intent");
          callback(new Error("no callback number found for intent"));
        }
    }
  });
};

我用来确保 lambda 正常工作的测试实例如下:

{
  "dialog-state": "ReadyForFulfillment",
  "input-transcript": "my printer is not working",
  "slots": {
    "list": "Re-IP Project - Printers"
  },
  "intent-name": "getServiceOffering"
}

测试后的响应是:

{
  "ServiceOffering": "Re-IP Project - Printers"
}

标签: amazon-web-servicesaws-lambdaamazon-dynamodbamazon-lexamazon-connect

解决方案


当您记录事件时,您应该能够看到inputTranscript正在传递给您的 Lambda。所以你只需要把它从活动中拿出来,然后做你想做的事。

const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB();
exports.handler = function(event, context, callback) {
  console.log(`DEBUG:\t Event`, JSON.stringify(event, null, 4));
  var inputTranscript = event.inputTranscript

     ...

      callback(null, {
        ServiceOffering: data.Item.name.S.slice(1, -1),
        inputTranscript: inputTranscript   
      });

这包括您对 Connect 的回调中的 inputTranscript(我假设),并且您可以使用 Set Attribute 块来保存和处理 Connect 中的输入。


推荐阅读