AWS Pinpoint / SNS: реализация двусторонней отмены / повторной подписки по SMS

У меня возникли проблемы при реализации двусторонней отмены / повторной подписки по SMS с помощью AWS Pinpoint и SNS.

Пример использования:
После сбора номера пользователя он получает подтверждающее SMS. Он отвечает ключевым словом YES, чтобы подписаться на список SMS. Позже он может отказаться, ответив с ключевым словом STOP. После отказа у него все еще есть возможность возобновить подписку, ответив с ключевым словом START. Более того, даже после повторной подписки у него есть возможность снова отказаться от подписки, ответив ключевым словом STOP и так далее.

Текущая реализация:
Подобно примеру, приведенному в документации (https://docs.aws.amazon.com/pinpoint/latest/developerguide/tutorials-two-way-sms.html), у меня есть лямбда-функция, подписанная на тему SNS, которая обрабатывает ключевые слова YES и START. Ответы на ключевые слова STOP (и HELP) обрабатываются AWS Pinpoint.

  1. После сбора номера пользователя серверная часть создает точную конечную точку для номера пользователя, отправляет ему подтверждающее SMS-сообщение и обновляет статус отказа конечной точки до ВСЕ.
  2. Пользователь отвечает YES, его ответ обрабатывается лямбда, который обновляет статус отказа конечной точки до NONE.
  3. Пользователь отвечает STOP, его ответ обрабатывается функцией pinpoint, которая автоматически отключает его.
  4. Пользователь отвечает START, его ответ обрабатывается лямбда, который обновляет статус отказа конечной точки до NONE.

Мне нужна помощь по следующим вопросам:

  1. На шаге 3 вышеупомянутой реализации я заметил, что номер пользователя добавляется в список отказа от участия в SNS (как проверено в Консоли AWS), но его статус отказа от точной конечной точки (как проверено с помощью aws-cli) по-прежнему установлено значение NONE вместо ALL. Как и ожидалось, я не могу отправить этому пользователю SMS. Как я заметил, поддерживаются ли два отдельных статуса отказа для Pinpoint и SNS? Если да, есть ли подробная документация о том, как они обновляются?
  2. На шаге 4 вышеупомянутой реализации я заметил, что номер пользователя НЕ удаляется из списка отказа SNS, а его статус отказа конечной точки остается НЕТ. В отличие от ожидаемого поведения, я все еще не могу отправить этому пользователю SMS. Правильно ли я выполняю повторную подписку?

Пожалуйста, ответьте на вопросы и подскажите, как правильно реализовать мой вариант использования.


person sspathare97    schedule 24.12.2020    source источник


Ответы (1)


После дальнейшего исследования я обнаружил вот что:

Наблюдения

  1. Если определение местоположения не используется и номер пользователя отображается в списке отказа от рассылки в SNS, сообщения, отправленные через сообщение публикации SNS, не будут доставлены.
  2. Независимо от того, используется ли точка доступа или нет, входящие SMS от пользователя всегда проходят через SNS и проверяются на ключевые слова отказа, такие как STOP, END, CANCEL и т. д.. Если найдено ключевое слово отказа, номер всегда добавляется в список отказа от рассылки в социальных сетях. (Дополнительная литература)
  3. If the 'Self-managed opt-outs' option for the pinpoint long code is disabled and the user's number is shown in the SNS opt-out list,
    1. A new pinpoint endpoint cannot be created for that number.
    2. Сообщения, отправленные через существующую оконечную точку для этого номера, не будут доставлены.
    3. Сообщения, отправленные через сообщение публикации в SNS, не будут доставлены.
  4. If the 'Self-managed opt-outs' option for the pinpoint long code is enabled and the user's number is shown in the SNS opt-out list,
    1. The previous points 3.1. and 3.2. still hold true.
    2. Сообщения, отправленные через сообщение публикации SNS, будут доставлены из-за включенного «Самостоятельного отказа», несмотря на то, что номер добавлен в список отказа SNS.

Причина проблемы

В моем случае опция «Самоуправляемый отказ» была отключена, поэтому статус отказа точной конечной точки не имел значения, а список отказов SNS имел приоритет.

Решение

  1. Как видно выше, отключение «Самостоятельного отключения» не удовлетворяло моим требованиям. Я включил это.
  2. Конечные точки Pinpoint не могут использоваться, потому что список отказа SNS всегда будет иметь приоритет.
  3. Наконец, я просто использую точку доступа для получения длинного кода с двусторонним SMS и включенным «Самостоятельным отключением». Я использую сообщение публикации SNS для отправки сообщений вместо точной конечной точки.
  4. Теперь, когда я использую «Самостоятельное отключение», следует отметить одну важную вещь: я поддерживаю статус отказа для каждого номера пользователя на моем сервере и обрабатываю разрешение / запрет доставки исходящих сообщений в уровень промежуточного программного обеспечения.
person sspathare97    schedule 12.01.2021