Обнаружение, когда слабое эфемерное сообщение исчезает - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть командный бот Slack, который публикует эфемерные сообщения и позволяет пользователю решать, хотят ли они сделать сообщение видимым для всех остальных в канале («Отправить») или удалить сообщение («Отмена»).Поскольку Slack API не предоставляет исходное сообщение, когда пользователь взаимодействует с эфемерным сообщением, я должен сохранять оригинальные сообщения в Redis, извлекать их при взаимодействии пользователя с опубликованным сообщением и впоследствии удалять ключ из Redis.Единственное, что меня беспокоит, так это засорение Redis ключами, которые никогда не будут удалены, потому что пользователь никогда не взаимодействует с сообщением (другими словами, не нажимает ни на одну из кнопок, просто оставляет сообщение как есть и уходит)).

Предоставляет ли Slack API какой-либо способ узнать, когда эфемерные сообщения удаляются, чтобы я мог очистить Redis?Или есть лучший способ решить эту проблему в целом?

1 Ответ

0 голосов
/ 17 сентября 2018

Нет - Slack не имеет механизма для информирования вашего приложения о исчезновении эфемерного сообщения.Как правило, они будут жить до тех пор, пока пользователь не обновит страницу в своем браузере (в веб-версии).

Но я могу предложить альтернативное решение для хранения всех сообщений на Redis:

Поскольку вы создалиИсходное эфемерное сообщение, вы всегда сможете заново создать это же сообщение позже, если знаете точный функциональный контекст (например, идентификатор пользователя).

Все, что вам нужно сделать, это сохранить идентификатор, связанный с его контекстом, в кнопках вашего первого сообщения.Если пользователь нажимает на кнопки, запрос Slack будет включать эти идентификаторы, что позволит вам определить его контекст, например, предпринять соответствующие действия или заново создать одно и то же сообщение для отправки по всему каналу.

Вы можете использоватьname или value поле действия для хранения идентификаторов.(См. Также этот ответ .)

Этот идентификатор может либо представлять экземпляр объекта (например, клиента), поэтому вы можете снова извлечь этот объект из вашей БД или он может бытьИдентификатор сеанса вашего сервера, который позволяет вам работать с сеансом сервера и хранить все данные контекста в сеансе сервера.(см. также этот ответ ).

...