【问题标题】:Sending SMS to phone numbers via Amazon's SNS in Meteor在 Meteor 中通过 Amazon 的 SNS 向电话号码发送 SMS
【发布时间】:2015-10-10 22:41:29
【问题描述】:

我目前正在使用peerlibrary:aws-sdk 与一些亚马逊服务进行交互。我现在正在寻找使用相同的 SDK 包装器向电话号码发送 SMS 消息。

我要弄清楚的是所涉及的 API 调用序列。这是 SDK 的link,但我还没有找到全面的指南。

我知道如何进行这些 API 调用,但我发现您必须调用一些才能正确处理。另外,我只想向手机发送短信,而不是电子邮件。

我已经通过 AWS 控制台进行了测试。我可以创建一个主题,并使用 SMS 协议订阅该主题。我可以通过这种方式向电话号码发送 SMS 消息。但是 API 调用订阅电话号码到我创建的现有主题,然后发布到该主题有点令人困惑。

有没有人通过 SNS 和 peerlibrary:aws-sdk 的 SDK 包装器发送消息?有哪些 API 调用可以实现这一点?

据我可以通过 API 文档了解,在 AWS SNS 中手动创建主题后,我需要执行以下操作:

1) 为主题订阅电话号码(主题必须有 ARN#):

sns.subscribe(params, function(err, data) {...});

1a) 用户必须通过手机接受订阅。

2) 发布 SMS 消息:

sns.publish(params, function(err, data) {...});

3) 用户可以随时通过手机取消订阅。

但就是这样吗?

我已经有设置密钥的代码,我是否需要这样做才能调用 sub/pub API?

AWS.config.update({
   accessKeyId: Meteor.settings.awsAccessKeyId,
   secretAccessKey: Meteor.settings.awsSecretKey
});

更新 1:

我设置了以下代码

  broadcaseSms: function () {
    AWS.config.update({
       accessKeyId: Meteor.settings.awsAccessKeyId,
       secretAccessKey: Meteor.settings.awsSecretKey,
       region: "us-east-1"
    });

    var sns = new AWS.SNS();
    var params = {
      Message: 'test 5', /* required */
      MessageAttributes: {
        someKey: {
          DataType: String//, /* required */
          // BinaryValue: new Buffer('...') || 'STRING_VALUE',
          // StringValue: 'STRING_VALUE'
        },
        /* anotherKey: ... */
      },
      // MessageStructure: 'STRING_VALUE',
      // Subject: 'STRING_VALUE',
      // TargetArn: 'STRING_VALUE',
      TopicArn: 'arn:aws:sns:us-east-1:34523452345:test'
    };

    sns.publish(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });
  }

但是得到一个例外:

'无效参数类型:预期 params.MessageAttributes[\'someKey\'].DataType 为字符串\n

我得到了印象属性,'someKey' 是错误的,应该是一个实际的键......

更新 2:

我是这样工作的

    AWS.config.update({
       accessKeyId: Meteor.settings.awsAccessKeyId,
       secretAccessKey: Meteor.settings.awsSecretKey,
       region: "us-east-1"
    });

    var sns = new AWS.SNS({params: {TopicArn: 'arn:aws:sns:us-east-1:2353452345:test'}});

    sns.publish({Message: 'THE MESSAGE TO PUBLISH'}, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });

【问题讨论】:

    标签: javascript amazon-web-services meteor sms amazon-sns


    【解决方案1】:

    对于未来查看此问题的人:Amazon's SDK documentation 解释了 MessageAttributes 是什么。查看下面的 sn-p 以获取示例声明。正如 OP 在第一个代码 sn-p 中发布的那样,它位于 params 变量中。

    MessageAttributes: { "AWS.SNS.SMS.SenderID" : { DataType: "String", StringValue : "MyID" }, "AWS.SNS.SMS.MaxPrice" : { DataType: "Number", StringValue : "0.01" }, "AWS.SNS.SMS.SMSType" : { DataType: "String", StringValue : "Transactional" }, },

    【讨论】:

      【解决方案2】:

      你需要使用节点的aws-sdk

      meteor 包装器不支持 SNS。 来自文档:

      适用于 node.js 和浏览器包的 AWS SDK Meteor 智能包, 提供有助于消除编码复杂性的 SDK 为 AWS 服务提供 JavaScript 对象,包括 Amazon S3Amazon EC2、DynamoDB 和 Amazon SWF

      【讨论】:

        猜你喜欢
        • 2021-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-30
        • 2019-12-20
        • 2017-04-11
        • 1970-01-01
        相关资源
        最近更新 更多