Discourse as an LMS / Discourse integration with an LMS

물론이죠, 관심 가져 주셔서 감사합니다.

현재 저희는 자기 계발을 원하는 대학생 연령대의 젊은이들이 모이는 커뮤니티를 운영하고 있습니다. 여기서는 주로 과학과 철학에 대한 모듈, 주간 모임, 그리고 발표를 장려하는 활동을 진행합니다. 또한, 커뮤니티 구성원들이 보다 편안하고 장기적인 토론과 대화를 나눌 수 있도록 이 커뮤니티를 위한 포럼도 개설해 보았습니다. 현재는 커뮤니티 내부에서만 접근 가능한 비공개 상태이지만, 향후 인터넷 전체에 공개할 계획을 가지고 있습니다.

현재 일일 독서, 발표 세부 사항, 모임 세부 사항 등 대부분의 정보 흐름은 WhatsApp을 통해 이루어지고 있습니다. 포럼을 이용하는 참가자의 비율은 아직 낮은 편입니다. WhatsApp에서 하던 것들을 포럼으로 이전하여 사람들이 포럼에 더 많이 진입하도록 유도하는 동시에, 보다 기능적인 운영 체계를 구축하고 싶습니다.

  1. 모바일에서 프로그레시브 웹 앱(PWA)으로 사용될 때, 사람들에게 알림을 보낼 수 있는 방법이 있을까요?
  2. 참가자들이 일일 독서를 했는지 확인할 수 있고, 그에 따라 보상을 주거나 리마인드하는 시스템을 만들 수 있을까요? (이 부분에 대해 ChatGPT에게 물어본 결과, Discourse Automation 플러그인으로 새로운 시나리오를 생성하면 된다고 했으나, 실제로는 새로운 시나리오를 생성할 옵션이 없습니다.)
  3. 모듈별 주간 모임 출석률에 따라 참가자에게 자격증(디플로마)을 부여하는 인증 시스템을 만들 수 있을까요?

몇日间 이 기능들을 찾아보고 있었습니다. 유사한 시스템에서 유용할 것이라고 생각하는 기능이 있으시다면, 그것도 환영합니다.

2개의 좋아요

과제에 배지 시스템을 사용했습니다. 학생들이 과제를 위한 태그가 달린 주제를 생성하면, 제가 :heart: 이모지를 달아주면 배지(배지 SQL)를 받을 수 있었습니다. 학교 LMS에서 CSV 파일을 읽어와 업데이트한 뒤, 다시 학교 LMS에 업로드할 수 있도록 하는 스크립트도 작성했습니다.

6개의 좋아요

네, PWA에 대해 절대적으로 동의합니다.

이 부분에 대해 좀 더 자세히 설명해 주실 수 있나요? 관리자 대시보드를 통해 새로운 자동화를 추가해 보셨나요?

그리고 제이가 말했듯이, 배지는 이 작업을 수행하는 좋은 방법입니다.

3개의 좋아요

다시 확인해 보니, Discourse 설정에서 알림을 활성화해야 하는 것 같습니다. 감사합니다.

ChatGPT가 조금 잘못 안내했습니다. 이제 이해했지만, 알려준 그 방법은 작동하지 않는 것 같습니다.

답변 감사합니다.

말씀드린 대로, 일일 독서 게시물에 이모지를 남긴 사용자에게 보상할 수 있는 시스템을 BadgeSQL만으로 만들 수 있을까요? 배지를 부여하는 방식으로 해야 하나요, 아니면 리더보드 시스템이 더 많은 노력이 필요한가요? 그리고 BadgeSQL에 대한 가이드나 시작점을 제공해 주신다면 매우 감사하겠습니다.

1개의 좋아요

네, 가능합니다.

저가 이 작업을 수행했을 당시에는 리더보드 플러그인이 존재하지 않았으며, 저는 리더보드에 대해 거의 (아니, 전혀?) 작업해 본 적이 없습니다.

https://meta.discourse.org/tag/sql-triggered-badge

배지 기능이 사용자에게 적합하다면, 해당 SQL과 연관된 배지를 자동으로 생성하는 플러그인(또는 API를 호출하는 것?)이 좋은 아이디어일 것입니다.

만약 일일적인 것이라면, 어제의 이모지 게시에 대해 배지를 부여하도록 배지 SQL을 구성할 수 있는 방법이 있을 수 있습니다. 또는 여러 번 수여될 수 있는 단일 배지를 가지고, 사용자가 이모지를 게시하는 매일마다 배지를 부여하는 방식도 가능합니다.

2개의 좋아요

이 스레드의 많은 분들처럼, 저는 Discourse를 LMS(학습 관리 시스템)로 가볍게 사용할 수 있는 방법을 찾고 있었습니다. 전용 LMS 플랫폼은 너무 무겁게 느껴졌고, Discourse의 기본 “알림 감쇠(notification decay)” 기능(새 사용자에게 오래된 토픽이 "읽지 않음"으로 표시되지 않는 현상)은 코스 진행 상황을 추적하는 데 어려움을 주었습니다.

이 문제를 해결하기 위해 카테고리 설정, 작은 백엔드 플러그인, 그리고 테마 컴포넌트를 조합한 간단한 솔루션을 만들었습니다.

아래는 설정 방법과 이를 재현할 수 있는 오픈소스 코드입니다!

기본 개념: Discourse를 LMS로 활용하기

이를 위해 표준 Discourse 기능과 공식 Discourse Doc Categories 플러그인을 조합하여 사용합니다:

  • 코스 = 카테고리: 각 코스는 자체 카테고리를 가집니다.
  • 레슨 = 토픽: 각 레슨은 해당 카테고리 내의 토픽입니다.
  • 권한: 회원은 레슨에 답변(질문)할 수 있지만, 새로운 토픽을 생성할 수 있는 권한은 스태프에게만 있습니다.
  • 순서: 레슨 순서는 생성 날짜로 고정됩니다. (팁: 레슨을 게시할 때 순서를 미리 고려해야 하거나, Rails 콘솔을 사용하여 토픽 생성 시간을 과거로 되돌려 올바른 정렬을 강제할 수 있습니다).
  • 강의 계획표(Syllabus): Discourse Doc Categories 플러그인을 사용하여 "인덱스 토픽(Index Topic)"을 지정합니다. 이 인덱스 토픽은 코스 강의 계획표/트래커 역할을 하며, 사용자가 코스에 진입하면 사이드바에 아름다운 개요(outline)가 렌더링됩니다.

빠진 조각: 진정한 진행 상황 추적

위 설정의 문제는 새로운 학생이 가입할 때 오래된 레슨 토픽이 "읽지 않음"으로 표시되지 않아 진행 상황을 시각적으로 추적할 방법이 없다는 것입니다.

이를 해결하기 위해 TopicUser 데이터베이스 테이블을 직접 조회하여 과거의 실제 읽기 상태를 확인하는 백엔드 플러그인을 만들었고, 표준 Discourse 사이드바를 실시간 LMS 진행 상황 트래커로 변환하는 프론트엔드 테마 컴포넌트를 개발했습니다.

1. 메인 사이드바 진행 상황 배지

테마 컴포넌트는 표준 파란색 알림 점을 코스 카테고리의 [ 읽은 수 / 전체 수 ] 진행 상황 표시자로 대체합니다.

2. 레슨 완료 체크마크

사용자가 코스를 클릭하면 Docs 플러그인이 강의 계획표를 렌더링합니다. 제 테마 컴포넌트는 사용자가 읽기를 완료한 특정 레슨 옆에 성공 체크마크(fa-check)를 삽입합니다.

3. 코스 완료

사용자가 카테고리 내의 모든 토픽을 읽으면, 사이드바의 진행 상황 배지가 자동으로 만족스러운 완료 틱(tick)으로 변환됩니다!

설치 방법

이는 표준 Discourse 알림 캐시를 우회해야 하므로, 백엔드 플러그인과 프론트엔드 테마 컴포넌트 모두를 설치해야 합니다.

1단계: 선행 조건 설치
공식 Discourse Doc Categories 플러그인이 설치되어 활성화되어 있는지 확인하십시오. 제 플러그인은 인덱스 토픽이 구성된 카테고리를 특별히 대상으로 합니다.

2단계: 백엔드 API 플러그인 설치
app.yml의 docker_manager 아래에 아래 내용을 추가하고 컨테이너를 다시 빌드하십시오. 이는 읽기 상태를 위한 빠른 API 엔드포인트를 제공합니다.
:hammer_and_wrench: 저장소 링크: https://github.com/zsviczian/discourse-course-progress

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/zsviczian/discourse-course-progress.git

3단계: UI 테마 컴포넌트 설치
웹 브라우저를 통해 관리자 > 사용자 지정 > 테마 > 설치 > Git 저장소에서 경로로 직접 설치하십시오.
:hammer_and_wrench: 저장소 링크: https://github.com/zsviczian/discourse-course-progress-theme

별도의 LMS 플랫폼의 부피를 줄이고 커뮤니티 주도 코스를 구축하려는 다른 분들에게 도움이 되기를 바랍니다. 사용하게 되면 알려주세요.

4개의 좋아요

프론트엔드 Theme 컴포넌트 코드를 플러그인에 포함시키는 대신 두 개의 별도 코드를 만든 데에는 특별한 이유가 있었나요?

하지만 코드를 잠시 살펴보니, 생각보다 훨씬 간단하게 구현할 수 있더군요. 정말 좋습니다!

3개의 좋아요

사람들이 자신의 코스 추적에 다른 스타일과 느낌을 원할 수 있다고 생각했고, 제 취향을 다른 사람에게 강요하고 싶지 않았기 때문입니다.

테마 컴포넌트에는 제 필요에 맞는 색상, 배지 및 세부 사항이 포함되어 있지만, 이는 다른 사람들의 필요에 반드시 부합하지는 않습니다.

이 플러그인은 Discourse 문서에 없는 작은 기능을 구현합니다. 이 기능을 기반으로 직접 테마 컴포넌트를 구축할 수 있으며, 제 코드는 예시나 영감의 출처로만 사용하시면 됩니다.

이 솔루션을 사용 시작한 지 1일밖에 되지 않았지만 :slight_smile: 전체 학생들의 코스 진행 상황을 확인할 수 있는 데이터 탐색기 그래프 몇 가지를 추가한 후, 그 위에 커스터마이징을 더하는 방안을 이미 생각하고 있습니다. 실제 환경에서 잠시 동안 사용해 본 후 플러그인에 해당 기능을 추가할지도 모릅니다.

3개의 좋아요

관리자 권한이 있다면 UI에서 토픽 타임스탬프를 변경할 수 있습니다.
토픽 액션 메뉴에 있습니다.
아쉽게도 토픽에만 적용되며, 개별 게시물에는 적용할 수 없습니다.

2개의 좋아요

어떤进展가 있었는지 궁금합니다. 저도 플러그인과 테마 컴포넌트를 함께 사용 중입니다. 공유해 주셔서 감사합니다!