Node.js 获取AWS SMS的交付状态
我通过NodeSDK从AWS发送短信。短信发送得很好,我正在努力获取送货信息。显然,这并不是那么容易,我们必须设置SNS以向Cloudwatch发送日志,并解析Cloudwatch以获取传递信息,并查找MessageId: 如果我通过SNS web界面发送短信,我会在cloudwatch中看到日志,但在通过node SDK发送日志时不会看到。在从节点发送之前,我无法获取有关如何设置内容的信息 理想情况下,我希望实现以下目标: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
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日志?