我查看了AWS pinpoint文档,以检查已发送SMS消息的发送状态。但是,我找不到比将短信事件流式传输到亚马逊Kinesis数据流或亚马逊Kinesis数据防火墙,然后将数据发送到亚马逊S3存储桶或亚马逊Redshift数据库,然后再发送到应用程序的更好的方法。
在这里,我的要求是只发送验证码,并获得短信的投递状态。有没有更好的方法来实现这一点?因为我上面提到的方式太过冗长和昂贵。任何帮助都将不胜感激。
发布于 2021-09-01 17:08:01
sendMessages()接口返回短信的状态。假设此接口可能不会立即返回send状态,因为SMS可能不会立即送达。
但由于“回调”,它需要时间来返回,异步工作。
返回的状态是什么?请参阅: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Pinpoint.html#sendMessages-property
在回调中,json "data“返回的"MessageResponse”字段的Result字段的字段"DeliveryStatus“,可能的取值如下:
为什么先通过Kinesis更新状态,然后更新S3存储桶,然后再更新分析?实际上并不需要。使用Kinesis,您可以获得更详细的信息。
关于更简单的方法,AWS专家提到使用Lamda服务直接发送到某个“队列”(可能是另一个AMZ产品)或通过Lamda服务调用HTTP端点。所有这些服务都很昂贵,而且还会消耗其他资源。“总拥有成本”只是增长,或者这些家伙正在“向上销售”更多的产品。
我想发送交易短信。就这样。我需要知道短信是不是已经送达了。就这样。但你结束了Kinesis的支出(无论成本是大是小),S3,分析服务,相关的EC2,EBS的一切。
我与AMZ Architect进行了艰苦的讨论,他决定使用Kinesis,如果您使用Kinesis配置Pinpoint,您可以直接轮询并获取状态。所以我也通过Kinesis获得短信事件更新,这与你通过调用getMessages() API得到的“相似”。
在直接通过Kinesis的短信事件流中,您将获得"event_type“值,如下所示
参考: https://docs.aws.amazon.com/pinpoint/latest/developerguide/event-streams-data-sms.html
和"record_status“字段的值
其中一些状态代码可能与您的案例无关。例如:如果您发送的是“延迟”短信,则"TTL_EXPIRED“是可能的值。
Kinesis,提供了更详细的内容,但可能没有实际用处。
如果您使用Kinesis超过了最大SMS费用配额,您会得到原因。使用sendMessages()接口就不需要了,但是你可以通过API来查看短信配额。
请参阅: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ServiceQuotas.html#getServiceQuota-property
我坚信,如果发送"Transactional“短信,这是自然优先交付,你不需要Kinesis。
在某些情况下,亚马逊通过将服务纠缠到组合解决方案中而过度销售。无论如何,他们没有错,精准是“营销”产品做活动,用户之旅和转化分析。对于亚马逊来说,更大的商业案例是“只发送短信”。你可能没有得到关于你的用例的最佳建议,所以努力协商以节省你的$s。
https://stackoverflow.com/questions/60572136
复制相似问题