Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 获取AWS SMS的交付状态_Node.js_Amazon Web Services_Sms_Aws Sdk_Amazon Sns - Fatal编程技术网

Node.js 获取AWS SMS的交付状态

Node.js 获取AWS SMS的交付状态,node.js,amazon-web-services,sms,aws-sdk,amazon-sns,Node.js,Amazon Web Services,Sms,Aws Sdk,Amazon Sns,我通过NodeSDK从AWS发送短信。短信发送得很好,我正在努力获取送货信息。显然,这并不是那么容易,我们必须设置SNS以向Cloudwatch发送日志,并解析Cloudwatch以获取传递信息,并查找MessageId: 如果我通过SNS web界面发送短信,我会在cloudwatch中看到日志,但在通过node SDK发送日志时不会看到。在从节点发送之前,我无法获取有关如何设置内容的信息 理想情况下,我希望实现以下目标: const sendSMS = async (message, num

我通过NodeSDK从AWS发送短信。短信发送得很好,我正在努力获取送货信息。显然,这并不是那么容易,我们必须设置SNS以向Cloudwatch发送日志,并解析Cloudwatch以获取传递信息,并查找MessageId:

如果我通过SNS web界面发送短信,我会在cloudwatch中看到日志,但在通过node SDK发送日志时不会看到。在从节点发送之前,我无法获取有关如何设置内容的信息

理想情况下,我希望实现以下目标:

const sendSMS = async (message, number) => {
    // send the SMS
    // wait to get delivery info
    // resolve with delivery info, or reject if failed
}
目前我有:

import AWS from 'aws-sdk';

AWS.config.update({
  accessKeyId: accessKey,
  secretAccessKey: secretKey,
  region: 'us-east-1',
});

const sns = new AWS.SNS();

const sendSMS = async (message, number) => {
  return await new Promise((resolve, reject) => {
    sns.publish({
      Message: message,
      MessageStructure: 'string',
      PhoneNumber: number,
    }, (err, res) => {
      if (err) { return reject(err); }
      resolve(res);
    });  
  });
}
它只向AWS发送SMS请求,并通过以下方式解决

{
  ResponseMetadata: { RequestId: '7e0999a3-xxxx-xxxx-xxxx-xxxxxxxxxxxx' },
  MessageId: 'f7f21871-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
}

我不确定是否必须设置SNS应用程序才能获取日志,我不想让事情变得简单。

通过更改导入语句(缺少ES5/6支持),您的代码似乎可以与nodejs v6配合使用。启用cloudwatch日志记录后,每个SMS(通过Web界面和此代码)都会在cloudwatch日志中创建一个日志流。我认为您应该重新安装AWS SDK,或者避免使用ES5/6来使SDK正常工作

对于第二个问题,如果邮件未送达,则会出现错误:

(err, res) => {
      if (err) { return reject(err); }
      resolve(res);
    }); 
如果消息已成功发送,您将收到如下响应:

{ ResponseMetadata: { RequestId: 'e31feda6-669c-5b13-XXX-bc25b07877b5' },
  MessageId: '53555115-6acb-5684-XXXX-0096bc2f6a22' }

您可能已经这样做了,但要为SMS传递配置cloudwatch日志,您必须配置SMS首选项。为此,您需要创建IAM角色以允许cloudwatch日志访问。通过AWS控制台执行此操作非常简单。步骤见

如果需要,您甚至可以控制记录成功交付和失败SMS的百分比。完成后,无论您以何种方式发送短信,都应该开始查看cloudwatch日志


我想添加此作为评论,但我没有足够的代表。如果此答案不起作用,我将删除它。

我认为ES6不是问题。如何从node SDK获取短信对应的CloudWatch日志?