docs(user-creator-chat): 클라이언트 WebSocket 연동 안내를 갱신한다
This commit is contained in:
@@ -201,8 +201,10 @@ CREATE TABLE user_creator_chat_message (
|
|||||||
- 모든 요청은 `Authorization: Bearer <accessToken>` 헤더를 포함한다.
|
- 모든 요청은 `Authorization: Bearer <accessToken>` 헤더를 포함한다.
|
||||||
- API prefix는 `/api/v2/user-creator-chat/rooms`를 사용한다.
|
- API prefix는 `/api/v2/user-creator-chat/rooms`를 사용한다.
|
||||||
- 메시지 타입은 `TEXT`, `VOICE`만 처리한다.
|
- 메시지 타입은 `TEXT`, `VOICE`만 처리한다.
|
||||||
- 앱이 백그라운드로 전환되거나 채팅방 화면에서 나가면 `POST /{roomId}/events/disconnect`를 호출하고 SSE 연결을 종료한다.
|
- 채팅방 화면 진입 시 `openRoom` REST 호출 후 WebSocket `/ws/v2/user-creator-chat`에 연결한다.
|
||||||
- SSE 연결이 끊기면 3초부터 재연결하고, 연속 실패 시 3초, 6초, 12초, 24초, 최대 30초까지 지수 백오프한다.
|
- WebSocket 연결 직후 `JOIN_ROOM`을 보내고, `JOINED` 수신 후 텍스트 전송을 허용한다.
|
||||||
|
- 앱이 백그라운드로 전환되거나 채팅방 화면에서 나가면 `LEAVE_ROOM`을 보낸 뒤 WebSocket을 close한다.
|
||||||
|
- 현재 채팅방 화면에 남아 있는 동안 WebSocket이 끊기면 지수 백오프로 재연결하고 `JOIN_ROOM`을 다시 보낸다.
|
||||||
|
|
||||||
연동할 API:
|
연동할 API:
|
||||||
0. 채팅방 리스트 조회
|
0. 채팅방 리스트 조회
|
||||||
@@ -225,16 +227,16 @@ CREATE TABLE user_creator_chat_message (
|
|||||||
- `GET /api/v2/user-creator-chat/rooms/{roomId}/messages?cursor={nextCursor}&limit=20`
|
- `GET /api/v2/user-creator-chat/rooms/{roomId}/messages?cursor={nextCursor}&limit=20`
|
||||||
- response data: `{ "messages", "hasMore", "nextCursor" }`
|
- response data: `{ "messages", "hasMore", "nextCursor" }`
|
||||||
|
|
||||||
4. SSE 연결
|
4. WebSocket 연결
|
||||||
- `GET /api/v2/user-creator-chat/rooms/{roomId}/events`
|
- endpoint: `/ws/v2/user-creator-chat`
|
||||||
- Accept: `text/event-stream`
|
- handshake header: `Authorization: Bearer <accessToken>`
|
||||||
- 이벤트 이름 `message`를 수신하면 payload를 현재 채팅방 메시지 목록에 append한다.
|
- 연결 직후 `{ "type": "JOIN_ROOM", "requestId": "client-request-id", "roomId": roomId, "payload": {} }`를 전송한다.
|
||||||
- 이벤트 이름 `connected`는 연결 확인용으로만 사용한다.
|
- `JOINED`를 수신하면 현재 방 실시간 수신 상태로 판단한다.
|
||||||
|
|
||||||
5. 텍스트 메시지 전송
|
5. 텍스트 메시지 전송(WebSocket)
|
||||||
- `POST /api/v2/user-creator-chat/rooms/{roomId}/messages/text`
|
- `{ "type": "SEND_TEXT", "requestId": "client-request-id", "roomId": roomId, "payload": { "textMessage": string } }`를 전송한다.
|
||||||
- body: `{ "textMessage": string }`
|
- `SEND_ACK` 수신 시 pending 메시지를 서버 응답의 `messageId`, `createdAt`, 프로필 정보 기준으로 확정한다.
|
||||||
- response data: `{ "message", "deliveredRealtime", "pushSent" }`
|
- `MESSAGE` 수신 시 현재 채팅방 `roomId`와 일치하면 메시지 목록에 append한다.
|
||||||
|
|
||||||
6. 음성 메시지 전송
|
6. 음성 메시지 전송
|
||||||
- `POST /api/v2/user-creator-chat/rooms/{roomId}/messages/voice`
|
- `POST /api/v2/user-creator-chat/rooms/{roomId}/messages/voice`
|
||||||
@@ -243,9 +245,15 @@ CREATE TABLE user_creator_chat_message (
|
|||||||
- part `request`: `{}` JSON 문자열
|
- part `request`: `{}` JSON 문자열
|
||||||
- response data: `{ "message", "deliveredRealtime", "pushSent" }`
|
- response data: `{ "message", "deliveredRealtime", "pushSent" }`
|
||||||
|
|
||||||
7. 실시간 연결 해제
|
7. 실시간 연결 해제(WebSocket)
|
||||||
- `POST /api/v2/user-creator-chat/rooms/{roomId}/events/disconnect`
|
- `{ "type": "LEAVE_ROOM", "requestId": "client-request-id", "roomId": roomId, "payload": {} }`를 전송한 뒤 WebSocket을 close한다.
|
||||||
- DB 참여자를 삭제하거나 비활성화하지 않고 SSE/presence 상태만 해제한다.
|
- DB 참여자를 삭제하거나 비활성화하지 않고 WebSocket presence 상태만 해제한다.
|
||||||
|
|
||||||
|
제거된 호출:
|
||||||
|
- `GET /api/v2/user-creator-chat/rooms/{roomId}/events`
|
||||||
|
- `POST /api/v2/user-creator-chat/rooms/{roomId}/events/disconnect`
|
||||||
|
- `POST /api/v2/user-creator-chat/rooms/{roomId}/messages/text`
|
||||||
|
- SSE reconnect/retry 처리 코드
|
||||||
|
|
||||||
메시지 DTO 필드:
|
메시지 DTO 필드:
|
||||||
- `messageId`: number
|
- `messageId`: number
|
||||||
|
|||||||
Reference in New Issue
Block a user