AWS Pinpoint/SNS: 实现双向短信取消订阅/重新订阅

0

【以下的问题经过翻译处理】 我在使用AWS Pinpoint和SNS实现双向短信退订/重新订阅功能时遇到了一些问题。

使用案例: 在收集用户的手机号后,用户会收到一条确认短信。他可以回复YES关键字以选择加入短信列表。稍后,他可以通过回复STOP关键字来退出。在退出后,他仍然可以通过回复START关键字来重新订阅。此外,即使在重新订阅后,他仍然可以通过回复STOP关键字再次退订,以此类推。

当前实现: 类似于文档中提供的示例(https://docs.aws.amazon.com/pinpoint/latest/developerguide/tutorials-two-way-sms.html),我已经创建了一个Lambda函数并订阅到SNS主题,用于处理YES和START关键字。对于STOP(和HELP)关键字的响应由AWS Pinpoint处理。

  1. 在收集用户的手机号后,后端创建了一个Pinpoint端点以表示用户,发送了确认短信,并将端点的退订状态更新为ALL。
  2. 用户回复YES,Lambda函数处理他的回复并将端点的退订状态更新为NONE。
  3. 用户回复STOP,Pinpoint自动处理他的回复并将他退出。
  4. 用户回复START,Lambda函数处理他的回复并将端点的退订状态更新为NONE。

我需要解决以下问题:

  1. 在上述实现的第3步中,我注意到用户的手机号已添加到SNS的退订列表中(从AWS控制台检查),但他在Pinpoint中的端点退订状态(从aws-cli检查)仍然是NONE而不是ALL。如预期的那样,我无法向该用户发送SMS。Pinpoint和SNS是否如我观察到的那样维护两个独立的退订状态?如果是的话,是否有关于它们如何更新的详细文档?
  2. 在上述实现的第4步中,我注意到用户的手机号码没有从SNS退订列表中移除,而且Pinpoint端点的退订状态保持为NONE。与预期行为相反,我仍然无法向该用户发送SMS。我的重新订阅实现是否正确?

请回答我的问题,并指导我正确实现我的使用案例。

profile picture
专家
已提问 5 个月前33 查看次数
1 回答
0

【以下的回答经过翻译处理】 在进一步探索后,我发现了以下情况:

观察结果:

  1. 如果不使用Pinpoint,并且用户的号码显示在SNS退订列表中,通过SNS发布消息发送的消息将无法送达。
  2. 无论是否使用Pinpoint,来自用户的进入短信总是通过SNS传递,并检查退订关键词,如STOP、END、CANCEL等(https://docs.aws.amazon.com/pinpoint/latest/userguide/channels-sms-manage.html)。如果发现退订关键词,该号码将始终被添加到SNS退订列表中。(进一步阅读 - https://docs.aws.amazon.com/sns/latest/dg/sms_manage.html)
  3. 如果Pinpoint长代码的“Self-managed opt-outs”选项被禁用,并且用户的号码显示在SNS退订列表中 3.1. 无法为该号码创建新的Pinpoint端点 3.2. 通过现有Pinpoint端点为该号码发送的消息将无法送达 3.3. 通过SNS发布消息发送的消息也将无法送达。
  4. 如果Pinpoint长代码的“自管理退订”选项已启用,并且用户的号码显示在SNS退订列表中 4.1. 上述3.1和3.2点仍然成立 4.2. 通过SNS发布消息发送的消息将能够送达,因为启用了“Self-managed opt-outs”,尽管号码被添加到SNS退订列表中。

问题的原因 在我的案例中,“Self-managed opt-outs”选项被禁用了,这就是为什么Pinpoint端点退订状态不相关,SNS退订列表具有优先权。

解决方案:

  1. 如上所述,保持“Self-managed opt-outs”禁用并没有满足我的要求。所以我启用了它。
  2. 由于SNS退订列表始终具有优先级,因此无法使用Pinpoint端点。
  3. 最后,我只使用Pinpoint获取启用了双向SMS和“Self-managed opt-outs”的长代码。我使用SNS发布消息而不是Pinpoint端点来发送消息。
  4. 现在我正在使用“Self-managed opt-outs”,这里需要注意的一点是 - 我在后端为每个用户的号码维护退订状态,并在中间件级别处理传出消息的允许/拒绝。
profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则