HBEA300_메신저
(Hereby) 직원 앱 > 메신저
| 앱 | 직원 앱 Hereby Works (포트 4002) |
| 대상 사용자 | 조건1 [EMPLOYEE] (직원 인증 후 전원) |
| 프로토타입 | TBU |
| 관련 정책 | [[HBAD280_공지]] 게시 소비 |
| Status | review |
| Owner | 카나 |
개요
직원 앱 메신저 탭. 서브탭 3종: "대화" / "연락처" / "그룹 대화". 공지는 별도 서브탭이 아니라 "대화" 리스트 상단 "공지 n" 접이식 섹션으로 노출된다(구 "공지" 서브탭 대체). 대화 원천은 conversations / messages / conversation_members. "대화" 상단 "대화 검색..." 입력으로 대화를 검색한다. 공지는 조직 게시([[HBAD280_공지]] 게시 소비)를 수신 표시하며, 공지 상세에서 "확인했어요" 실행 시 "확인 완료 {상대시간}"으로 전환되고 GA/Admin 공지 "확인 내역"에 write-back된다. 메신저 탭에 AI 표면 없음 = greenfield — ESS AI는 신규 설계 영역이며 현재 챗봇/어시스턴트 핀 미존재.
문서 히스토리
| 날짜 | 작성자 | 팀 | 변경 내용 |
|---|---|---|---|
| 2026-07-06 | 카나 | PM | 최초 작성 |
| 2026-07-10 | 카나 | PM | 라이브 기능 검토 반영 (서브탭 개편·공지 섹션 이동) |
| 2026-07-13 | 카나 | PM | 버튼 행동 명세 보강 |
| 2026-07-21 | 카나 | PM | GC700 깊이 재작성 (공지 확인 cross-app write-back 반영) |
| 2026-07-21 | 카나 | PM | 셀 스타일 확정판 적용 (콸 승인) |
Data I/O
Server → Client
| 변수 | 엔티티.컬럼 | 값 없을 때 | 비고 |
|---|---|---|---|
| $ | conversations.lastMessageAt / lastMessageContent | Empty ("아직 대화가 없어요...") | "대화" 서브탭 대화 목록 |
| $ | employees (조직원) | 리스트 렌더 (조직원 상시 존재) | "연락처" 서브탭. "미배정 n명" 그룹 헤더 + 전 직원 리스트(이니셜 아바타) |
| $ | employees (팀 미배정 필터) count | "0명" (추정) | "미배정 270명" 그룹 헤더 관찰값 |
| $ | 조직 게시 수신 ([[HBAD280]]) | 섹션 헤더 카운트 0 → 섹션 hide (추정) | "대화" 상단 "공지 n" 접이식 섹션. 항목 = 제목 + 날짜 |
| $ | 게시.category / date / title / body / 본인 확인상태 | — | 공지 상세(서브화면). 미확인 시 "확인했어요" 버튼, 확인 후 "확인 완료 {상대시간}" |
| $ | conversation_members.unreadCount | "0" | 하단 탭바 "메신저 0" 배지 |
Client → Server
| 액션 | 전달값 | tRPC procedure | 권한 토큰 |
|---|---|---|---|
| 대화 검색 | 클라이언트 필터 or sdk.conversation.search() (추정) | conversation:read.self (추정) | |
| 대화 시작 | sdk.conversation.create() (추정) | conversation:write.self (추정) | |
| 그룹 만들기 | { memberEmployeeIds[] } ("n명 선택") | sdk.conversation.createGroup() (추정) | conversation:write.self (추정) |
| 메시지 전송 | sdk.message.send() (추정) | message:write.self (추정) | |
| 공지 확인 | sdk.announcement.confirm() (추정) | announcement:confirm.self (추정) |
외부 통합
| 외부 시스템 | 데이터 | 동기/비동기 | polling 주기 |
|---|---|---|---|
| GA/Admin 공지 "확인 내역" | 공지 확인 이벤트 write-back (announcementId + employeeId + 확인시각) | cross-app write (즉시 반영) | [[HBAD280_공지]] "확인 내역" 소비 |
| [[HBAD280_공지]] 게시 | 조직 게시 → 메신저 공지 섹션 수신 표시 | 소비 (read) | TBU |
화면 플로우
메신저 탭에 AI 어시스턴트/챗봇 핀 미존재 = greenfield. ESS AI 진입 표면은 신규 설계 영역이며 self scope RBAC 자동 반영 컨셉(OQ).
메신저 메인 사양표
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 화면 진입 조건 | - | 조건1 [EMPLOYEE] 인증 후 하단 탭바 "메신저" 선택 시 진입 | [[HBEA110]] Shell | |
| 01 | 초기 상태 | Output | "대화" 서브탭 활성 상태로 대화 목록 렌더 | conversations | |
| ㄴ01-E | ㄴ 대화 없음 | Output | conversations 0건 시 Empty 노출 (문구는 -E 행) | conversations | |
| 10 | 서브탭 | Tab | • "대화" / "연락처" / "그룹 대화" 3서브탭 간 전환 기능. 구 "공지" 서브탭 제거 → "대화" 상단 섹션으로 이동 • 클릭 → 해당 서브 리스트 전환 | 구 공지 → 대화 섹션 | |
| 20 | 대화 (서브탭) | List | • 대화 목록을 보여주는 서브탭. "대화 검색..." 입력 + "공지 n" 접이식 섹션 + 대화 리스트(예: "test 6월 30일") 구성 • 클릭 → "대화" 리스트 전환 | conversations / messages | |
| ㄴ21 | ㄴ 대화 검색 | Input | • 대화 리스트를 텍스트로 거르는 입력 필드. "대화 검색..." placeholder • 입력 → 대화 리스트 필터. 빈 입력 시 전체 표시 | conversations | TBU: 결과 0건 문구 |
| ㄴ22 | ㄴ 공지 섹션 | Section | • 전 직원 수신 공지를 접이식으로 노출하는 섹션. "공지 n"(관찰값 "공지 1"), 구 "공지" 서브탭 대체 • 헤더 클릭 → 섹션 접기/펼치기 토글 | [[HBAD280_공지]] 게시 소비 | TBU: 공지 0건 시 섹션 hide (추정) |
| ㄴㄴ22-1 | ㄴㄴ 공지 항목 | ListItem | • 개별 공지 1건. 항목 = 제목 + 날짜 • 클릭 → 공지 상세(50) 전환 | 게시 | |
| 30 | 연락처 (서브탭) | List | • 조직원을 열람하고 대화를 시작하는 서브탭. "미배정 n명" 그룹 헤더 + 전 직원 리스트(이니셜 아바타) • 클릭 → "연락처" 리스트 전환 | employees | "미배정 270명" 관찰 |
| ㄴ31 | ㄴ 미배정 그룹 헤더 | Text | 팀 미배정 직원을 묶는 그룹 헤더. "미배정 270명" 표기(count = 미배정 필터) | employees | |
| ㄴ32 | ㄴ 직원 항목 | ListItem | • 연락처 리스트의 개별 직원 행 • 클릭 → 해당 직원과 대화 시작("대화" 서브탭 전환) | conversations | TBU: self scope 열람 범위 |
| 40 | 그룹 대화 (서브탭) | Flow | • 다중 멤버 그룹 대화를 생성하는 서브탭. 상세 흐름은 서브화면 표 참조 • 클릭 → 멤버 다중 선택 모드 전환 | [[HBEA310_그룹 만들기]] (분리 권고) | 신규 서브탭 |
| 50 | 공지 상세 진입 | Detail | • 공지 항목을 상세 서브화면으로 여는 진입점(아래 H3) • 클릭 → 공지 상세 서브화면 전환 | [[HBAD280_공지]] | 서브화면 표 분리 |
| 60 | 하단 탭바 | Tab | • 앱 최상위 탭 전환 바. "근무" / "메신저" / "결재" / "더보기" + "메신저 0" 배지 • 클릭 → 해당 탭 전환 | [[HBEA110]] | Shell 공통 |
| -E | 대화 Empty | Text | 대화 0건 시 "아직 대화가 없어요 연락처에서 대화를 시작해보세요" 노출, 연락처로 유도 | conversations | Empty 원문 |
공지 상세 사양표 (서브화면)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 진입 조건 | - | "대화" 서브탭 "공지 n" 섹션 항목 클릭 시 진입 | 메신저(50) | |
| 10 | 헤더 | Text | "공지사항" 표기 | ||
| 20 | 카테고리 배지 | Badge | 게시 category 값 배지 | [[HBAD280]] | TBU: 카테고리 문구(데이터 의존) |
| 30 | 날짜 | Text | 게시 날짜 표기 | 게시.date | |
| 40 | 제목/본문 | Text | 공지 제목 + 본문 표기 | 게시 | TBU: 본문 미존재 공지 처리 미관찰 |
| 50 | 확인 버튼 | Button | • 본인 공지 확인 상태를 기록하는 버튼. 조건1 [EMPLOYEE] 본인 확인• 클릭 → 즉시 실행(컨펌 없음), 성공: "확인 완료 {상대시간}"(예: "확인 완료 방금") 전환 + GA/Admin 공지 "확인 내역" write-back - CASE01 [미확인]: "확인했어요" 노출 - CASE02 [확인 완료]: "확인 완료 {상대시간}" 노출(상대시간 원천 = 확인시각) | [[HBAD280]] "확인 내역" cross-app | 검증 완료. TBU: confirm 실패 UX(무반응이면 버그 후보) |
그룹 만들기 플로우 사양표 (서브화면)
| 번호 | 항목/기능명 | 타입 | 사양 및 기능 설명 | 연관/영향 범위 | 비고 |
|---|---|---|---|---|---|
| 00 | 진입 조건 | - | 메신저 "그룹 대화" 서브탭 진입 시 멤버 다중 선택 모드 | 메신저(40) | |
| 10 | 멤버 선택 | List | • 그룹에 넣을 조직원을 고르는 리스트. 원천 = employees • 항목 클릭 → 멤버 선택 토글 | employees | TBU: 선택 가능 범위(전 직원 vs 팀) |
| 20 | 선택 카운트 | Text | 선택 인원 실시간 "n명 선택" 표기 | ||
| 30 | 그룹 만들기 | Button | • 선택한 멤버로 그룹 대화를 생성하는 버튼 • 클릭 → 그룹 conversations 생성 후 대화로 전환 | 그룹 conversations | TBU: 0명 시 비활성 여부·생성 실패 UX·멤버 상한 |
| 40 | 취소 | Button | • 선택 모드를 종료하는 버튼 • 클릭 → 선택 모드 종료(대화 서브탭 복귀) |
AI 표면 보조표
| 항목 | 현황 | 비고 |
|---|---|---|
| AI 챗봇/어시스턴트 핀 | 미존재 (0) | greenfield — 신규 설계 영역 |
| ESS AI 진입 후보 | 메신저 탭 단체방 영구 핀 / 별도 AI 탭 (OQ) | self scope RBAC 자동 반영 컨셉 |
권한·상태 분기 요약
| 시나리오 | 트리거 | 결과 화면 | 비고 |
|---|---|---|---|
CASE01 [대화 없음] | "대화" 서브탭 진입, conversations 0건 | Empty "아직 대화가 없어요..." | 연락처 유도 |
CASE02 [대화 있음] | 대화 존재 | 대화 리스트 + "공지 n" 섹션 | |
CASE03 [공지 미확인] | 공지 상세 진입 | "확인했어요" 버튼 | |
CASE04 [공지 확인 완료] | "확인했어요" 클릭 | "확인 완료 {상대시간}" + GA/Admin "확인 내역" write-back | cross-app |
조건1 [EMPLOYEE] | 전 직원 인증 | 메신저 전 기능 (연락처 열람 범위·그룹 생성 권한은 OQ) | 역할 세분 미관찰 |
Open Question
- 대화 검색 결과 0건 Empty 문구 = TBU (별도 카피 미관찰)
- 그룹 대화 생성 권한 범위 및 멤버 상한 = TBU/OQ
- 연락처 열람 범위(전 직원 vs 본인 팀만 — self scope 반영 여부) = TBU/OQ
- 공지 상세 카테고리 배지 문구·본문 Empty 처리 = TBU (데이터 의존)
- 공지 "확인했어요" confirm 실패 시 UX(토스트·롤백) = TBU (무반응이면 버그 후보)
- ESS AI 핀 배치 (메신저 단체방 영구 핀 / 별도 AI 탭) = TBU/OQ — 메신저 탭 AI 표면 greenfield 유지
- "미배정 n명" 외 팀별 그룹 헤더 존재 여부 = TBU (캡처에 미배정 그룹만 관찰)