# [요청] 짹 채팅 화면 이동(딥링크) 라우트 목록 > 클라이언트 팀에게 보내는 요청서. 그대로 전달하거나 클라 측 AI에 붙여 사용하세요. > 목적: AI 채팅 "짹"이 "예측 탭 가서 해" 같은 안내를 **탭하면 바로 그 화면으로 이동하는 버튼**으로 > 제공하려고 합니다. 이를 위해 **이동 가능한 화면 목록과 각 화면의 실제 이동 방법(딥링크/라우트)** > 을 클라이언트에서 확정해 주셔야 합니다. ## 1. 동작 흐름 (서버는 이미 구현됨) 1. 모델이 답변 끝에 화면 마커를 붙임 → 예: `... 예측 탭에서 제출하면 돼 [[NAV:prediction]]` 2. **서버**가 마커를 파싱·검증(아래 목록에 있는 route만 허용)하고, 마커는 본문에서 제거한 뒤 응답에 `actions` 배열을 실어 보냄: ```json { "messageId": "...", "reply": "예측 탭에서 제출하면 돼", "actions": [ { "type": "navigate", "route": "prediction", "label": "예측 탭으로" } ], "crisis": false, "remainingCount": 9 } ``` 3. **클라이언트**가 `actions`를 버튼으로 렌더하고, 사용자가 탭하면 `route`에 매핑된 화면으로 이동. → 이 "route → 실제 이동" 매핑이 **클라이언트가 정의해 줘야 하는 부분**입니다. ## 2. 클라이언트에 요청하는 것 짹이 안내할 수 있는 **모든 이동 가능 화면**에 대해 아래 항목을 채워 주세요. | 항목 | 설명 | 예시 | |---|---|---| | `route` | 마커·API에 쓰는 **안정적 영문 키**(snake_case, 변경 금지) | `prediction` | | `label` | 버튼 기본 텍스트(한국어) | `예측 탭으로` | | `target` | **실제 이동 방법** — 딥링크 URL(스킴 포함) / 인앱 라우트 경로 / 화면 식별자 중 하나로 | `panit://prediction` 또는 `/tabs/prediction` | | `params` | 필요한 파라미터와 형식(없으면 없음) | `gameId: string`, `date: YYYY-MM-DD` | | `auth` | 로그인 필요 여부 | 필요 / 불필요 | | `platform` | iOS/Android/Web에서 이동 방식이 다르면 명시 | 동일 / 플랫폼별 상이 | | `note` | 노출 조건·비고 | 경기 시작 전까지만 | ## 3. 응답 형식 (택1) **표**로 채워 주시거나, 아래 **JSON**으로 주시면 서버에 바로 반영하기 좋습니다: ```json { "routes": [ { "route": "prediction", "label": "예측 탭으로", "target": "panit://prediction", "params": null, "auth": true, "platform": "동일", "note": "경기 시작 전까지 제출·수정" } // ... 나머지 화면들 ], "deeplinkScheme": "panit://", // 공통 스킴이 있으면 "fallbackUrl": "https://..." // 웹/미설치 시 폴백이 있으면 } ``` ## 4. 최소 포함 화면 (짹이 현재 안내 중 — 우선 확정 요망) 서버 프롬프트(2-1 화면 안내) 기준으로 최소 아래 4개는 꼭 필요합니다. **route 키는 가능하면 그대로** 써주세요(서버가 임시로 이 키로 동작 중): | route(서버 임시) | 화면 | 우리가 아는 위치 | 필요 정보 | |---|---|---|---| | `prediction` | 승부예측 | 하단 "예측" 탭 | 이동 target | | `schedule` | 일정·결과 | 하단 "일정" 탭 | 이동 target (+ 경기 상세로도 갈 수 있으면 `gameId`/`date` params) | | `prediction_history` | 내 예측 기록 | 메뉴(더보기) "내 예측 기록" | 이동 target | | `attendance` | 출석체크 | 메뉴(더보기) "출석체크" | 이동 target | 추가로 짹이 안내하면 좋을 화면(예: 포인트/상점, 공지, 프로필 등)이 있으면 같은 형식으로 더 넣어 주세요. ## 5. 규칙·제약 - `route` 키는 **닫힌 집합**이고 **변경 불가**(마커·저장·이력에 박힘). 새 화면은 키를 추가로 알려주세요. - 서버는 목록에 **없는 route는 버립니다**(오안내 방지). 그래서 목록이 곧 "허용된 이동 전체"입니다. - `params`가 필요한 화면(예: 특정 경기 상세)은 **파라미터 이름·형식·필수여부**를 명확히. 서버가 그 값을 채워 보내려면 모델이 도구로 얻을 수 있는 값인지(예: gameId)도 함께 알려주시면 좋습니다. - 라벨은 서버 기본값을 두되, 클라가 `route`로 자체 라벨/아이콘을 매핑해도 됩니다(원하는 방식 알려주세요). ## 6. (참고) 서버가 보장하는 것 - 마커는 **서버에서만** 해석·제거 → 사용자에게 마커 텍스트는 절대 노출 안 됨. - 위기/필터로 교체된 응답에는 `actions`를 붙이지 않음. - `actions`는 응답과 대화 이력(`GET /chat/messages`) 양쪽에 동일하게 포함.