본문으로 건너뛰기

알림

Libre WebUI는 영구적인 사용자별 알림 받은 편지함을 유지하므로, 관련 페이지가 닫혀 있어도 멘션, 다이렉트 메시지, 공유, 자동화 실패와 캘린더 미리 알림 같은 팀 활동이 사용자에게 전달됩니다.

받은 편지함

알림은 우선 데이터베이스 행입니다. 제목과 본문은 저장 시 암호화되고 사용자당 500개로 제한되며 가장 오래된 항목부터 정리됩니다. 선택적 소스 키로 중복 제거하므로 같은 게시가 반복되어도 벨을 도배하지 않고 한 항목으로 합쳐집니다. RESTful 표면에서는 목록 조회, 읽지 않은 수 계산, 하나 또는 전체를 읽음으로 표시, 삭제가 가능합니다.

실시간 전달은 GET /api/notifications/events(SSE)를 통해 사용자별 영구 이벤트 스트림 notify:<userId>을 사용합니다. 스트림 ID는 클라이언트 입력이 아니라 인증된 세션에서 가져옵니다. SQL 받은 편지함이 계속 기준 데이터이므로 놓친 이벤트는 스트림 재생이 아닌 목록 읽기로 복구합니다.

알림이 생성되는 상황

유형생성 시점
channel-dm다른 사람이 내게 다이렉트 메시지를 보냄
channel-mention채널에서 다른 사람이 나를 @mentions하거나 내 메시지에 답글을 남김
channel-invite채널에 추가됨
share다른 사람이 내게 리소스를 공유함
automation-failed알림을 끄지 않은 내 자동화 중 하나가 실패함
calendar-reminder미리 알림 오프셋이 있는 이벤트가 미리 알림 시각에 도달함
work-run-finished내가 고용한 Work 에이전트 중 하나가 실행을 완료함
work-run-attention고용한 에이전트가 입력을 기다리거나 오류로 중지됨
work-takeoverWork 에이전트가 화면 직접 조작을 요청함
work-approvalWork 실행이 부작용이 있는 작업의 승인을 기다림
system인스턴스 수준 공지

알림은 항상 영향을 받는 사용자에게만 게시됩니다. 채널 구성원이 아닌 사용자 이름을 멘션해도 아무것도 생성되지 않습니다.

외부 Webhook

관리자는 팀 이벤트를 수신하는 Webhook 대상을 등록할 수 있습니다.

  • 외부 통신 보호. 대상에는 도구 서버와 같은 목적지 정책이 적용됩니다. 정확한 URL이어야 하고 리디렉션을 허용하지 않으며, 관리자가 TOOLS_PRIVATE_NETWORK_ALLOWLIST로 호스트를 명시적으로 허용하지 않으면 비공개 또는 링크 로컬 주소를 사용할 수 없습니다. 전달할 때마다 호스트 이름을 다시 확인하고 검사합니다.
  • 서명됨. 비밀 값이 구성되어 있으면 모든 전달에 정확한 본문으로 계산한 X-Libre-Signature: sha256=<hmac>가 포함됩니다.
  • 민감 정보 제거. 봉투에는 이벤트 종류, 알림 유형, 제목, 식별자와 타임스탬프가 포함됩니다. 알림 본문, 메시지 콘텐츠, 프롬프트와 문서는 인스턴스 밖으로 절대 나가지 않습니다.
  • 영구적. 전달은 제한된 재시도를 갖춘 영구 작업으로 실행됩니다. 수신자의 5xx 응답은 재시도하고 4xx는 수신자의 최종 판단으로 간주해 종료합니다.
  • 범위 지정. 각 대상은 특정 알림 유형 또는 *를 구독합니다.

브라우저 푸시

설정 → 알림에서 이 브라우저를 Web Push에 등록하면 탭이 닫혀 있어도 멘션, 공유, 미리 알림과 완료된 작업이 기기에 전달됩니다. 구현은 표준을 따르며 자체 완결형입니다.

  • VAPID(RFC 8292). 서버는 한 번 생성해 암호화하여 저장하거나 VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEY로 고정한 ES256 키 쌍으로 각 전달에 서명합니다. VAPID_SUBJECT는 연락처 클레임을 설정합니다. 브라우저 공급자의 푸시 엔드포인트 외에는 타사 푸시 라이브러리나 서비스 계정이 관여하지 않습니다.
  • 암호화된 페이로드(RFC 8291). 모든 메시지는 인스턴스를 떠나기 전에 aes128gcm으로 기기 자체 키에 맞춰 암호화됩니다. 푸시 서비스는 읽을 수 없는 암호문을 전달합니다.
  • 기기별, 세션 바인딩. 구독은 구독을 만든 브라우저와 해당 브라우저의 인증 세션에 속합니다. 세션에서 로그아웃하거나 "다른 세션에서 로그아웃"하면 푸시 등록도 제거됩니다. 엔드포인트는 키 기반 조회 토큰과 함께 암호화되어 저장되며 Webhook과 같은 외부 통신 보호 정책에 따라 공개 HTTPS 대상이어야 합니다.
  • 영구적. 푸시 전달은 제한된 재시도를 갖춘 영구 작업으로 실행됩니다. 푸시 서비스에서 구독이 사라졌다고 보고하면(404/410) 이를 제거합니다.
  • 페이로드에는 알림 제목, 선택적 본문, 유형과 대상 링크가 포함되며 받은 편지함과 같은 민감 정보 제거 정책이 적용됩니다.

푸시에는 프로덕션 앱과 보안 출처가 필요합니다. 서비스 워커는 프로덕션에서만 등록됩니다. 오프라인 셸과 설치 가능성도 같은 서비스 워커에서 제공됩니다. 앱 매니페스트를 통해 Libre WebUI를 설치할 수 있고, 오프라인 탐색은 캐시된 셸로 대체되며, 해시가 지정된 빌드 자산은 변경 불가능하게 캐시됩니다. API 트래픽은 절대 캐시되지 않습니다.

경계

  • 사용자별 알림 유형 환경 설정은 아직 구현되지 않았습니다. 자동화는 자체 알림 설정을 따르고 채널을 나가면 해당 알림이 중지됩니다.