代码之家  ›  专栏  ›  技术社区  ›  KevinY

未收到AWS/Lamda的SMS文本,但没有错误

  •  0
  • KevinY  · 技术社区  · 7 年前

    将和EC2 LAMP堆栈迁移到无服务器架构中,使用Lambda处理SMS文本消息。 我的PHP代码也可以在控制台中正常工作:

    aws sns publish --phone-number 0044xxxxxxxxxx --message boo --region eu-west-1
    

    也有效

    当我从命令行在Lambda中运行NodeJS时,我得到“Status”:202,但没有文本。

    当我在AWS的内联代码编辑器中从测试按钮运行相同的代码时,我得到了“成功”,清除了日志,但没有文本。。

    失败的代码是:

    // dependencies
    var AWS = require('aws-sdk');
    var sns = new AWS.SNS();
    exports.handler = function(event, context) {
    var params = {
       MessageStructure: 'string',
       PhoneNumber: '0044xxxxxxxxxx',
       Message:'An error occurred'
    
    };
    sns.publish(params, function(err, data) {
    if (err) {
       console.log(err, err.stack); // an error occurred
       context.done(err, 'Finished with Errors!');  
       return;
    }
    else     console.log(data);           // successful response
    });
      context.done(null,'finished');
    };
    

    这也是我从中的另一个问题中得到的代码,它对其他用户有效。

    你知道会有什么问题吗?

    非常感谢

    凯文

    2 回复  |  直到 7 年前
        1
  •  1
  •   Khalid T.    7 年前

    您可能需要了解以下几点:

    您需要确保正在使用任一节点。js runtime v6.10或v4.3。(节点v0.10.42当前标记为不推荐使用。AWS建议尽快将现有功能迁移到较新的Node.js运行时版本)

    lambda函数的IAM角色需要具有 允许 的规则 sns:Publish 行动

    AWS建议使用E.164格式指定电话号码。例如:+44xxxxxxxxx。( more info )

    此外,AWS 强烈地 建议更新 context 方法并将其替换为 callback 进近( more info ). 例如:

    const AWS = require("aws-sdk");
    const sns = new AWS.SNS({apiVersion: "2010-03-31"});
    
    exports.handler = (event, context, callback) => {
      const params = {
        PhoneNumber: "+44xxxxxxxxxx", // E.164 format.
        Message: "STRING_VALUE",
        MessageStructure: "STRING_VALUE"
      }
      sns.publish(params, (err, data) => {
        if (err) {
          console.error(`Error ${err.message}`);
          callback(err);
        } else {
          console.log("Success");
          callback(null, data); // callback instead of context.
        }
      }
    };
    
        2
  •  0
  •   harishanth raveendren    5 年前

    请参考答案 SO Link ,这对我很有用。默认情况下,消息类型设置为促销类型,您必须将其覆盖为事务类型。