【问题标题】:AWS Lambda: SES not working when Lex Chatbot is published to SlackAWS Lambda:当 Lex Chatbot 发布到 Slack 时,SES 不起作用
【发布时间】:2017-05-26 11:21:23
【问题描述】:

AWS SES 可与 Lex 测试聊天机器人一起使用,但在使用 Slack 应用程序发布聊天机器人后它不起作用(不会触发电子邮件服务)。但是,Lambda 函数似乎没有任何问题,因为我将响应文本恢复为松弛状态。而且我认为没有办法检查为什么松弛会导致问题的错误。

Lambda功能:

var aws = require('aws-sdk');
var ses = new aws.SES({
  region: 'us-east-1'
});

exports.handler = function(event, context, callback) {

  var eParams = {
    Destination: {
      ToAddresses: [event.currentIntent.slots.Email]
    },
    Message: {
      Body: {
        Text: {
          Data: "Hi, How are you?"
        }
      },
      Subject: {
        Data: "Title"
      }
    },

    Source: "abc@gmail.com"
  };
  var email = ses.sendEmail(eParams, function(err, data) {
    if (err)
    else {

      context.succeed(event);

    }
  });

  callback(null, {
    "dialogAction": {
      "type": "ConfirmIntent",
      "fulfillmentState": "Fulfilled",
      "message": {
        "contentType": "PlainText",
        "content": "message to convey to the user, i.e. Are you sure you want a large pizza?"
      }
    }
  });
};

编辑 1:我认为问题是当我在 Slack 上发布我的 Lex 机器人时,我没有获得 [event.currentIntent.slots.Email] 中的值。

【问题讨论】:

  • 我认为有一种方法可以在您调用ses.sendEmail(...) 时检查错误,您应该在回调中记录错误,即if (err) { logError(err); } ...,这可以很好地解释为什么电子邮件没有发送.
  • @ARJMP 我认为问题是当我在 Slack 上发布我的 Lex 机器人时,我没有获得“[event.currentIntent.slots.Email]”中的值

标签: amazon-web-services aws-lambda slack-api


【解决方案1】:

尝试以下步骤找出根本原因:

  1. 通过this 分步教程,确保您已正确配置您的机器人与 Slack。

  2. 如果您的机器人在您的测试机器人(LEX 内部)中运行良好,但在 Slack 上却不能,请确保您已发布了机器人的最新版本

  3. 在您的 AWS Lambda 上尝试以下代码,看看您会得到什么回报。

    callback(null, { "dialogAction": { "type": "ConfirmIntent", "fulfillmentState": "Fulfilled", "message": { "contentType": "PlainText", "content": "Echo: " + JSON.stringify(event.currentIntent.slots) <-- This } } });

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我遇到了类似的问题,机器人在 lex 控制台中工作,但在松弛状态下没有。虽然与电子邮件无关,但这是我发现的。

    由于某种原因,一个空的会话属性 传递给 slack 时存储为 NULL。因此,您不能向其中添加变量。您希望它是{},所以如果它是NULL,则将其值更改为{}

    if(intentRequest.sessionAttributes == null){ 
        intentRequest.sessionAttributes = {};
    }
    

    【讨论】:

      【解决方案3】:

      根据上述评论,这就是让我的 slack 机器人与我的测试 lex 聊天正在做的事情一致的原因:

      session_attributes = intent_request['sessionAttributes'] if intent_request['sessionAttributes'] is not None else {}
      

      【讨论】:

        猜你喜欢
        • 2021-09-09
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        相关资源
        最近更新 更多