我在 AWS Lambda 中开发了一个推送通知引擎,使用 One Signal over https,它工作得很好。我可以根据传入的 IoT 规则触发通知,并将它们近乎实时地发送出去。
async function sendNotification(data, api_key) {
console.log("Data to POST : " , data);
const response = await new Promise((resolve, reject) => {
var headers = {
"Content-Type": "application/json; charset=utf-8",
"Authorization": api_key
};
var options = {
host: "onesignal.com",
port: 443,
path: "/api/v1/notifications",
method: "POST",
headers: headers
};
const req = https.request(options, function(res){
console.log('statusCode:', res.statusCode);
console.log('headers:', res.headers);
res.on('data', (data) => {
var buff = Buffer.from(data, 'utf8');
console.log('data received: ', buff.toString());
});
});
req.on('error', (e) => {
console.error(e);
});
req.write(JSON.stringify(data));
req.end();
return;
});
return response;
}
导致此代码运行的条件每天可以触发多次。问题是,在某些情况下,我每天最多只需要发送一次通知,有时只有在之前的通知已发送给该用户的情况下。我想我的问题是存储状态的最佳位置在哪里?
有没有一种方法可以以幂等的方式安排通知,以便后续调用不会发送多个,而是会相互覆盖,并只导致一个调用?可以以某种方式使用 SNS 吗?
另一个想法是使用设备阴影。这是一种可能的解决方案,其中状态可以存储在那里并用于确保在需要时一次且仅一次发送第一个通知,并在需要时升级以发送更严重的通知?