감시 중인 카테고리에서 이메일을 받지 못함

안녕하세요. 기존 사용자가 의도적으로 선택한 내용을 덮어쓸 수 있는 방법이 있을까요?

UserOption.update_all(default_categories_watching: <id>) 와 UserOption.update_all(watched_categories: <id>) 를 시도해 보았지만, 이들은 사용자 옵션이 아닙니다…

수정 및 해결 방법: User.all.each do |user| CategoryUser.batch_set(user, :watching, [<id>]) end

레일즈 콘솔(그리고 API)을 통해 이를 수행할 수는 있지만, 그렇게 해야 하는지 신중하게 고려해 보시는 것이 좋습니다. 사용자가 의도적으로 특정 카테고리(또는 태그나 토픽)를 '감시’하거나 '음소거’하도록 선택했다면, 그 선택을 무시하는 것은 바람직하지 않을 가능성이 큽니다. 또한 사용자가 원상태로 되돌릴 수 있으므로, 이를 통해 얻을 수 있는 이점이 없을 수도 있습니다.

답변해 주셔서 감사합니다. 전적으로 동의합니다. 다만 저희 경우, 제가 여기에 설명한 현재 문제를 해결하기 위한 것입니다: Favor activity summary posts from certain category.

아이디어는 새로운 기본 설정(특정 카테고리 관찰)을 되돌린 후, 사람들이 원하는 대로 설정을 변경할 수 있도록 하는 것입니다.

방금 위에서 언급한 User.all.each do |user| CategoryUser.batch_set(user, :watching, [<id>]) end 명령이 모든 사용자의 설정을 변경하는 데 제대로 작동하지 않는 것 같습니다. 이유가 무엇일까요? 더 나은 방법은 새로운 추적 설정을 기존 사용자 추적 설정에 추가하는 것입니다…

P.S. 저희는 작은 커뮤니티이고, 설정을 조정할 시간을 낸 사람은 그중에서도 훨씬 더 적은 비율이라는 것을 알고 있습니다 (:wink:

알림 수준에서 카테고리를 특별히 설정하지 않은 사용자에 대해, default category watching을 재설정하고 이를 과거 데이터에 적용하면 해당 설정이 정상 수준으로 리셋되어야 합니다.

사용자 수가 적다면, rails 콘솔보다 UI나 API를 사용하는 것이 더 안전한 방법일 수 있습니다. 얼마나 많은 사용자에 대해 이야기하고 있나요?

이해를 돕기 위해, 해당 카테고리는 Announcements이며 그 ID는 22입니다.

저도 명령어를 시도하기 전에 정확히 이렇게 해보았습니다. 하지만 두 가지를 모두 수행한 후에도 Announcements에 새 게시글이 올라가면 일부 사용자만 이메일을 받는 상태입니다.
이전에 링크된 관련 이슈에서 설명된 바와 같이 digest 이메일에 “사소한” 활동(즉, Announcements 게시글 없음)만 포함되어 있어, 사용자가 이메일 알림을 구독 해제했을 가능성이 있습니다.

60명

데이터 탐색기가 설치되어 있나요? 그렇다면, 올바른 추적 및/또는 이메일 설정이 없는 사용자가 몇 명인지 확인할 수 있는 쿼리가 있나요?

좋은 아이디어네요. 시간이 좀 더 나면 해볼게요!

즉각적인 노력은 적지만, 모든 사용자의 필요한 매개변수를 초기화하는 레일스 스크립트도 있으면 좋겠습니다.

해결책을 마련하기 전에 조금 더 자세한 정보가 필요합니다. category_users 테이블은 활성 카테고리 알림 수준에 대한 기록만 보관하므로, 사용자가 해당 설정을 가지고 있지 않으면 rails 콘솔을 통해 수정할 데이터가 테이블에 존재하지 않습니다. (예를 들어, default categories watching 관리자 설정에 #contribute:site-feedback을 추가하면 각 사용자에게 category_users 테이블에 기록이 추가되고, 설정을 초기화하면 해당 기록이 다시 삭제됩니다.)

확인해 보았는데, User.all.each do |user| CategoryUser.batch_set(user, :watching, [22]) 실행 후 모든 사용자의 추적 설정이 원하는 카테고리(22 | Announcements)를 관찰(watch)하도록 변경되었습니다. 해당 쿼리는 모든 사용자를 나열합니다:

SELECT *
FROM category_users 
WHERE category_id = '22' AND notification_level = '3'

그리고 이 쿼리는 사용자 1명만 나열합니다:

SELECT *
FROM user_options uo
WHERE uo.email_level = '2'

그런데 왜 카테고리 22 "Announcements"에 새 게시글이 올라와도 많은 사용자에게 이메일이 전송되지 않는지 궁금합니다. :thinking:

P.S. SQL 쿼리를 이것저것 시도해 보고 있지만, 두 쿼리를 어떻게 조인(join)해야 할지 모르겠습니다.

안녕하세요. 아직 해결책을 찾지 못했습니다. 관심 있는 주제의 게시글 알림 메일을 받기 위해 설정해야 할 사용자 환경 설정이 뭔지 이해가 되지 않습니다. 혹시 아이디어가 있으신가요? 감사합니다!

Hi @JammyDodger

혹시 모르니 말씀드리는데, 저는 여전히 이 문제를 조사하고 해결책을 찾고 있습니다. 특정 카테고리(‘Announcements’)를 기본 설정으로 구독하고 있지만 새 게시물에 대한 이메일 알림을 받지 않는 사용자 중 한 명의 설정을 분리(isolate)하여 확인해 보았습니다:

user mailing_list_mode email_digests external_links_in_new_tab enable_quoting dynamic_favicon automatically_unpin_topics digest_after_minutes auto_track_topics_after_msecs new_topic_duration_minutes last_redirected_to_top_at email_previous_replies email_in_reply_to like_notification_frequency mailing_list_mode_frequency include_tl0_in_digests notification_level_when_replying theme_key_seq allow_private_messages homepage theme_ids hide_profile_and_presence text_size_key text_size_seq email_level email_messages_level title_count_mode_key enable_defer timezone enable_allowed_pm_users dark_scheme skip_new_user_tips color_scheme default_calendar oldest_search_log_date chat_enabled only_chat_push_notifications chat_sound dismissed_channel_retention_reminder dismissed_dm_retention_reminder bookmark_auto_delete_preference ignore_channel_wide_mention chat_email_frequency enable_experimental_sidebar seen_popups chat_header_indicator_preference sidebar_link_to_filtered_list sidebar_show_count_of_new_items watched_precedence_over_muted chat_separate_sidebar_mode topics_unread_when_closed show_thread_title_prompts
JohnDoe false true true true false true 10080 240000 2880 2023-06-13T08:25:13.000Z 1 false 1 1 true 2 0 true NULL {} false 0 0 1 1 0 false Europe/Somwhere false NULL false NULL 0 NULL true NULL NULL NULL NULL 3 NULL 1 false {1,2,3,4,5} 0 false false NULL 0 true true

‘Announcements’ 카테고리를 구독하는 사용자를 조회했을 때 이 사용자의 레코드(row)가 다음과 같기 때문에, 왜 이런 문제가 발생하는지 정말로 이해가 가지 않습니다:

id category user notification_level last_seen_at
123 Announcements JohnDoe 3 NULL

제가 놓치고 있는 다른 설정이 있을까요? 혹시 사용자가 알림 이메일 중 하나에서 구독 취소(unsubscribe)를 클릭하여 이메일 설정이 변경된 것일까요?

감사합니다!

알림 이메일의 “구독 취소” 링크를 클릭하면 사용자가 알림 설정을 변경할 수 있는 페이지로 이동합니다. 예를 들면 다음과 같습니다:

사용자가 “<category_name> 카테고리의 모든 주제 보기 중지” 또는 “Discourse에서 이메일을 보내지 마세요” 옵션을 선택했다면, 사용자의 설정 페이지에서 해당 변경 사항을 확인할 수 있습니다. 카테고리 목록에서 해당 카테고리가 삭제되었거나, 이메일 페이지의 모든 설정이 "절대 보내지 않음"으로 변경되어 있을 것입니다.

사용자가 “이 주제 보기 중지” 옵션을 선택한 경우 변경 사항을 확인하기가 더 어렵습니다. 이 경우, 관리자 페이지에서 해당 사용자로 위장하여 주제를 방문한 후, 해당 주제에 대한 알림 수준이 "주시 중(watching)"에서 "추적(tracking)"으로 변경되었는지 확인해 보세요. 또한 Rails 콘솔을 통해 해당 주제에 대한 사용자의 알림 수준 정보도 가져올 수 있습니다:

이 부분에 너무 몰두하기 전에, 사이트의 “이메일 건너뜀 로그(Skipped Email Logs)” 페이지로 가세요. 관리자 사이드바에서 해당 페이지로 이동할 수 있습니다. 페이지 상단의 “수신 주소(To Address)” 필드에 사용자의 이메일 주소를 입력하면, 해당 이메일이 사용자에게 발송되지 않은 이유에 대한 세부 정보를 확인할 수 있습니다.

답변 감사합니다.

건너뜀 이메일 섹션을 확인해 보았습니다. 해당 섹션에는 “최근 사용자 활동 감지됨”, “사용자 자신의 게시물에 대한 메일링 리스트 알림 비활성화”, “바운스 점수 임계값 초과” 항목만 있습니다.

다음 중 하나의 방식으로 모든 사용자의 설정을 변경할 수 있는지 궁금합니다:

  • 모든 사용자의 설정을 마치 방금 가입한 것처럼 변경.
  • 또는: 새로운 테스트 사용자를 생성하고, 해당 설정을 복사하여 기존 모든 사용자에게 적용.

"기본 카테고리 구독"이라는 사이트 설정이 있습니다. 이 설정을 변경하면 과거 데이터에도 적용할지 묻는 옵션이 제공됩니다. 해당 옵션을 선택하면 해당 카테고리에 대해 설정 페이지에서 명시적으로 설정을 변경한 사용자를 제외한 모든 사용자의 환경설정이 업데이트됩니다. 이것이 바로 회피하려는 문제인 것 같습니다. Rails 콘솔을 통해 처리할 수도 있지만, 가능한 한 그 접근 방식을 피하는 것이 좋습니다.

대신 공지사항을 위한 새 카테고리를 생성하고, 이 카테고리를 사이트의 “기본 카테고리 구독” 설정에 추가할 수 있습니다. 그런 다음 기존 공지사항 카테고리에서 새 카테고리로 주제를 이동하여 사이트를 정리할 수 있습니다. 카테고리 이름을 "announcements"로 유지하려면, 먼저 원래의 “announcements” 카테고리를 다른 이름으로 변경하는 것부터 시작하세요. 이 방법은 다소 임시방편(hack)에 가깝지만, Rails 콘솔을 건드리지 않고 문제를 해결하는 방법입니다.