AWS Pinpoint/SNS:双向 SMS unsubscribe/resubscribe 实施

AWS Pinpoint/SNS: Two-way SMS unsubscribe/resubscribe implementation

我在使用 AWS Pinpoint 和 SNS 实施双向 SMS unsubscribe/resubscribe 时遇到了一些问题。

用例:
收集到用户号码后,他会收到一条确认短信。他用 YES 关键字回复以选择加入 SMS 列表。他稍后可以通过使用 STOP 关键字回复来选择退出。选择退出后,他仍然可以选择通过回复 START 关键字来重新订阅。此外,即使在重新订阅之后,他也可以选择通过回复 STOP 关键字等方式再次取消订阅。

当前实施:
类似于文档中给出的示例 (https://docs.aws.amazon.com/pinpoint/latest/developerguide/tutorials-two-way-sms.html),我有一个订阅 SNS 主题的 lambda 函数,它处理 YES 和 START 关键字。对 STOP(和 HELP)关键字的响应由 AWS Pinpoint 处理。

  1. 收集用户号码后,后端为用户号码创建一个精确定位端点,向他发送确认短信,并将端点退出状态更新为全部。
  2. 用户回复“是”,他的回复由 lambda 处理,将端点退出状态更新为 NONE。
  3. 用户回复停止,他的回复由 pinpoint 处理,自动将他退出。
  4. 用户回复 START,他的回复由 lambda 处理,lambda 将端点退出状态更新为 NONE。

我需要以下查询的帮助:

  1. 在上述实施的第 3 步中,我注意到用户的号码已添加到 SNS 选择退出列表(从 AWS 控制台检查),但他的精确端点选择退出状态(从检查aws-cli) 仍设置为 NONE 而不是 ALL。正如预期的那样,我无法向该用户发送短信。正如我观察到的那样,是否为 pinpoint 和 SNS 保留了两个单独的选择退出状态?如果是,是否有关于它们如何更新的深入文档?
  2. 在上述实施的第 4 步中,我注意到用户的号码没有从 SNS 退出列表中删除,并且他的精确端点退出状态保持 NONE。与预期的行为不同,我仍然无法向该用户发送短信。我是否正确执行重新订阅实施?

请回答问题并指导我正确实施我的用例。

经过进一步探索,这是我的发现-

观察

  1. 如果不使用 pinpoint 且用户号码显示在 SNS 退出列表中,则通过 SNS 发布消息发送的消息将不会送达。
  2. 无论是否使用精确定位,来自用户的传入短信总是通过 SNS 并检查退出关键字,例如 STOP, END, CANCEL, etc. If an opt-out keyword is found, the number is always added to the SNS opt-out list. (Further reading)
  3. 如果禁用精确定位长代码的 'Self-managed opt-outs' 选项并且用户号码显示在 SNS 选择退出列表中,
    1. 无法为该号码创建新的精确定位端点。
    2. 通过该号码的现有精确定位端点发送的消息将不会送达。
    3. 通过 SNS 发布消息发送的消息将不会送达。
  4. 如果启用了精确定位长代码的'Self-managed opt-outs'选项并且用户号码显示在SNS退出列表中,
    1. 前几点 3.1。和 3.2。仍然适用。
    2. 由于启用了 'Self-managed opt-outs',通过 SNS 发布消息发送的消息将被传递,尽管该号码已添加到 SNS 选择退出列表。

问题原因

在我的例子中,'Self-managed opt-outs' 选项被禁用,这就是为什么精确定位端点退出状态无关紧要,SNS 退出列表优先。

解决方案

  1. 如上所示,禁用'Self-managed opt-outs'不能满足我的要求。所以我启用了它。
  2. 无法使用 Pinpoint 端点,因为 SNS 退出列表始终优先。
  3. 最后,我只是使用 pinpoint 获取带有双向 SMS 和 'Self-managed opt-outs' 启用的长代码。我正在使用 SNS 发布消息而不是精确定位端点来发送消息。
  4. 现在我正在使用 'Self-managed opt-outs',这里要注意的一件重要事情是 - 我在后端维护每个用户号码的退出状态并处理外发消息传递 allow/deny 在中间件级别。