외부 캘린더 앱용 캘린더 구독 URL

사용자 설정에 새로운 캘린더 탭을 추가하여 Google Calendar, Apple Calendar, Microsoft Outlook와 같은 외부 캘린더 앱에서 Discourse 피드를 구독할 수 있도록 했습니다.

:down_arrow:

작동 방식

설정 → 캘린더 탭으로 이동하여 구독 URL 생성을 클릭하세요. 다음 항목에 대한 원클릭 구독 버튼이 제공됩니다:

  • Google Calendar — 피드가 미리 입력된 상태로 Google Calendar를 엽니다
  • Microsoft Outlook — Outlook 웹 구독 대화 상자를 엽니다
  • Apple Calendarwebcal://를 통해 기본 제공 캘린더 앱을 실행합니다
  • URL 복사 — ICS 피드를 지원하는 기타 캘린더 앱용

사용 가능한 피드

항상 사용 가능:

  • 북마크 알림 — 알림 날짜가 있는 북마크

discourse-calendar 플러그인이 활성화된 경우:

  • 모든 이벤트 — 포럼의 모든 이벤트
  • 내 이벤트 — 참석하거나 관심 있는 이벤트

플러그인 개발자를 위한 안내

플러그인은 새로운 register_calendar_subscription_feed API를 사용하여 추가적인 ICS 피드를 등록할 수 있습니다. 이 방식으로 등록된 피드는 플러그인이 활성화되면 캘린더 설정 탭에 자동으로 표시됩니다.

보안

구독 URL은 읽기 전용 ICS 형식 액세스로 제한된 범위가 지정된 사용자 API 키를 사용합니다. 키에는 속도 제한이 적용되며, URL은 생성 시점에 한 번만 표시됩니다. 사용자는 언제든지 다시 생성할 수 있으며, 이를 통해 기존 URL은 폐기됩니다.

26개의 좋아요

감사합니다 @Falco, 하지만 기업용 옵션은 어떻게 제거하나요? 내 커뮤니티가 독점 서비스 광고를 계속 봐야 한다는 것이 불쾌합니다.

1개의 좋아요

CSS를 사용하여 이를 숨길 수 있습니다.

2개의 좋아요

이 구현을 제공해 주셔서 감사합니다! 이 기능은 많은 커뮤니티에서 캘린더/이벤트 플러그인의 사용성을 크게 높여줄 것입니다.

저도 @hellekin님과 같은 의견을 가지고 있습니다. Discourse 내부에서는 오픈 소스 환경입니다. 저희 커뮤니티에서는 Google Calendar이나 Microsoft를 사용하는 사람이 없습니다. 사용자가 이러한 비공개 서비스의 링크가 필요하다면, 애플리케이션이 아닌 사용자 스스로 결정해야 합니다. 따라서 구독 URL 생성 단계에서 외부 캘린더 서비스 유형을 선택할 수 있도록 하는 것(예: 체크박스 사용)을 선호하며, 이후 단계에서 선택하는 것보다는 이 방식이 더 좋다고 생각합니다.

1개의 좋아요

“filter” 개선

당신의 Discourse 인스턴스에는 여러 커뮤니티가 있습니다. 이들은 그룹 권한으로 분리되어 있으며, 일부 사용자는 두 개 이상의 커뮤니티에 속해 있습니다. “Discourse Calendar - All Events” URL을 필터링하여 특정 커뮤니티의 캘린더 항목만 표시할 수 있으면 편리할 것입니다. 샘플 URL

https://discourse.example.com/discourse-post-event/events.ics?user_api_key=c2aa22d800dd473b62d199d796742382&group=[groupname]

이 개선을 통해 특정(!) 커뮤니티의 Discourse 이벤트를 해당 커뮤니티의 자체 웹사이트에 공유할 수 있게 됩니다. 예를 들어 WordPress 플러그인 “ICS calendar”를 사용하여 공유할 수 있습니다.

2개의 좋아요

또 다른 작은 개선 제안입니다: 두 개의 다른 클라이언트(예: 두 기기에 설치된 Thunderbird)에서 Discourse 이벤트를 구독하려면 URL을 두 번 복사해야 합니다. 하지만 현재 URL은 한 번만 표시됩니다. 두 번째 클라이언트를 추가하면 URL을 다시 생성해야 하며, 이렇게 하면 첫 번째 URL을 잃어버리게 됩니다.

2개의 좋아요

해당 그룹 중 하나에 속한 사용자가 생성한 피드는 이미 그렇게 작동하지 않나요? 테스트해 보셨나요?

한 번만 복사한 후 필요한 두 클라이언트에 붙여넣으면 됩니다.

클라이언트를 하나 놓쳤다면, 클릭 한 번으로 재생성할 수 있습니다.

2개의 좋아요

이건 꽤 멋진데요. 피드 아이디어로 저장된 검색 플러그인도 좋을 것 같아요.

알겠습니다. 하지만 제 말씀은 URL이 처음 표시된 후에 필요한 재생성(regeneration)에 대한 것이었습니다.

두 개의 다른 기기에서 캘린더 링크를 사용하는 경우, 두 기기가 동시에 설정 가능하지 않을 가능성이 높습니다. 저는 첫 번째 기기에서 내 Discourse 프로필에 접근하고, 나중에 두 번째 기기에서 다시 접근하게 될 것입니다. 기존 URL을 다시 표시하고, 명시적인 요청에 의해서만 무효화하는 것이 더 나을 것입니다.

두 개의 서로 다른 커뮤니티(그리고 그들의 권한 그룹)에 가입되어 있는 경우, "https://discourse.example.com/discourse-post-event/events.ics"에는 커뮤니티의 이벤트가 모두 표시됩니다. 이 부분은 맞습니다. 하지만 두 커뮤니티는 각각 자체 웹사이트를 가질 수 있습니다. 저는 Discourse의 이벤트를 해당 웹사이트에서 공유할 때, "커뮤니티 A"의 이벤트만 보고 "커뮤니티 B"의 이벤트는 보고 싶지 않습니다. 그 반대 경우도 마찬가지입니다.

1개의 좋아요

구글 캘린더와 함께 이 기능을 사용해 왔는데, 정말 좋습니다!

다만, 이벤트에 대한 변경 사항(수정 또는 삭제)이 여기로 동기화되지 않는 것 같습니다.

구글과 동기화되지 않는 이유가 무엇일지 혹시 아는 분 있으신가요?

1개의 좋아요

구글 캘린더는 평균적으로 하루 두 번 업데이트를 가져오기 때문에, 변경 사항이 반영되는 데 몇 시간이 걸릴 수 있습니다.

2개의 좋아요

아, 그렇구나. 이제 동기화가 완료되었군요.

매우 좋은 정보입니다. 마지막 순간에 이루어지는 변경 사항이 자동으로 배포되거나 통보되지 않는다고 보셔야 합니다!

다른 서비스들도 비슷한가요?

1개의 좋아요

다른 공급자의 일정 서비스를 말씀하시는 거라면, 1일 1~2회 같은 원리입니다. 당시에는 동기화 횟수를 늘릴 수 있는 방법을 찾지 못했어요. 나중에 생각해보니, 전 세계적으로 동기화해야 할 일정 수가 워낙 많다 보니 그렇게 제한되어 있는 게 당연한 것 같더라고요 :rofl: 서버가 과부하되지 않도록 제한을 두는 것 같습니다!

아마 제가 틀렸을 수도 있겠네요

2개의 좋아요

실제 테스트 후 피드백:

배경: 저희 Discourse 인스턴스는 여러 사용자 그룹/커뮤니티가 함께 사용하며, 각 커뮤니티에는 별도의 권한 그룹이 있습니다. 각 그룹마다 메인 카테고리가 있습니다. 이 카테고리는 공개적으로 표시되며, 콘텐츠는 Fediverse(Discourse ActivityPub)로 연동됩니다. 또한 공개 캘린더도 표시됩니다. 예시 (https://forum.netzwissen.de/c/meshcore-str/84):

Pasted image 20260401075142.png

캘린더에는 메인 카테고리의 게시물과 하위 카테고리의 이벤트가 표시됩니다. 하위 카테고리(커뮤니티 권한 그룹에 속한 “로그인된” 사용자만 볼 수 있음)의 이벤트 게시물은 익명 사용자(로그인 안 된 상태)의 메인 캘린더에 표시되지 않습니다. 완벽합니다 - 이것이 기대하는 기능입니다!

ics 캘린더 링크를 "기능 완성"으로 만들기 위해 두 가지 요구사항을 확인했습니다. 저희는 새로운 ics 캘린더 링크를 사용하여 Discourse에서 생성된 이벤트를 커뮤니티의 공개 웹사이트(CMS: WordPress)에 공유하고 있습니다.

  1. ics 파일에 표시되는 이벤트는 커뮤니티/권한 그룹별로 “필터링” 가능해야 합니다. 제안하는 문법:
[ics_calendar url="https://discourse.example.com/discourse-post-event/events.ics?user_api_key=[xxxx];group=[discourse_group_id]"]

  1. ics 파일에는 상태가 "공개(public)"인 이벤트만 표시되어야 합니다. 상태가 “비공개(private)” 또는 "독립(standalone)"인 이벤트는 일반적으로 ics 파일에 게시되어서는 안 됩니다. 참고: 이것이 이미 구현되어 있는지 아직 테스트해 보지 않았습니다 …
1개의 좋아요

정말 훌륭한 추가 기능입니다! :clap:

불행히도 캘린더 플러그인은 활성화되어 있고(정기적으로 사용해 오고 있습니다) 제 사용자에 대한 URL을 생성할 때 북마크 구독만 생성됩니다. 이런 현상이 발생하는 이유가 무엇일까요? 아이디어가 있으신 분 계신가요?

또한 @Thomas_Rother 님의 의견에 동의합니다. 구독 URL은 폐기되거나 재생성될 때까지 표시되어야 합니다. 디바이스와 앱은 시간이 지나면서 바뀌기 때문에, 하나만 더 추가하고 싶을 뿐인데 모든 디바이스에서 다시 구독해야 하는 것은 번거롭고 불필요해 보입니다. 이벤트 데이터의 민감도에 따라 플러그인 설정 옵션으로 제공될 수 있을 것 같습니다.

2개의 좋아요

표시되려면 Discourse post event enabled 설정이 활성화되어 있어야 합니다.

1개의 좋아요

수년 동안 게시 이벤트(post events)를 사용해 왔습니다:

이전에 별도 플러그인을 사용하던 설치 환경에서 문제가 발생한 것일까요? 플러그인을 비활성화했다가 다시 활성화해 보았지만 문제가 해결되지 않았습니다.

수정: 확인 결과, 이제 게시물에 이벤트가 표시되지 않습니다. 따라서 구독 기능이 아니라 플러그인 마이그레이션 관련 문제인 것 같습니다. 무슨 일이 있었는지 알아볼 것입니다.

1개의 좋아요

이 기능을 찾기 위해 이곳에 왔는데, 구현되어 있어서 정말 기쁩니다!

@hellekin님과 @Thomas_Rother님의 기업 링크에 대한 피드백에 공감합니다. 이 링크를 선택적으로 설정할 수 있다면 좋겠습니다. 많은 사람들이 디지털 주권을 믿고 Discourse를 사용하는데, 이러한 로고가 표시되는 것은 적절하지 않습니다.

더 중요한 것은 이 기능의 발견 가능성입니다. 현재는 사용자 설정에 숨겨져 있지만, 캘린더 UI 내비게이션에 직접 표시된다면 정말 환영할 일입니다. "예정된 이벤트"를 클릭한 뒤 구독 링크를 볼 수 있다면 최고가 될 것입니다. :1st_place_medal:

2개의 좋아요

해결책이 여기에 있습니다

1개의 좋아요