尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗osw_chatbot_web)고객사 홈페이지(https://japan.onlytour.co.kr 등)에 1줄 스크립트로 탑재할 수 있고, 데스크톱 팝오버 및 모바일 풀스크린(100dvh) 환경에 완벽히 최적화된 웹 기반 RAG 챗봇입니다.
관리자 프로젝트(../osw_chatbot_admin)와 동일한 Supabase 데이터베이스(rag_documents, bot_settings, llm_providers, fallback_logs, Storage chatbot-images, Vault get_llm_api_key) 및 동일한 답변 규칙(rewrite_query → match_documents → filter_price_context → pick_image → handoff.buttons)으로 동작합니다.
#0F2942), 선셋 코랄(#FF5A36), 웜 아이보리(#FAF8F5), 카카오 옐로우(#FEE500) 컬러 시스템과 Pretendard / Noto Serif KR 타이포그래피 적용>= 768px)에서는 우측 하단 플로팅 팝오버(410×680px), 모바일(< 768px)에서는 화면 전체를 덮는 풀스크린 시트(100vw × 100dvh)로 자동 전환VisualViewport API 연동으로 모바일 키보드 올라옴 시 레이아웃 깨짐 방지, iOS 노치/홈 인디케이터 env(safe-area-inset-*) 적용, 입력창 16px 고정(iOS 자동 줌 방지)전체, 단독패키지, 스기노이호텔, 골프여행, 일일투어) 및 추천 질문 칩 가로 터치 스크롤, 최소 46px 터치 타겟 확보rewriteQuery)gemini-embedding-001 (1536차원, L2 정규화) + match_documents 하이브리드 검색filterPriceContext) 및 여행지 미지정 시 자동 되묻기(clarify)pickImage)buildHandoffButtons): 상품 보러가기, 구글 폼 미리채움 상담 요청서 남기기, 카카오톡으로 상담하기npm install
npm run dev
http://localhost:3000http://localhost:3000/widgetnpm run typecheck # 타입 검사
npm test # 답변 규칙 테스트 (관리자 앱과 같은 공통 케이스)
tests/parity_cases.json은 관리자 앱(osw_chatbot_admin)의 tools/build_parity_cases.py가 관리자 규칙으로 만든 기대값입니다. 두 저장소에 같은 파일을 두고 양쪽 테스트가 같은 케이스로 검사하므로, 한쪽만 규칙(말투·여행지 판정·가격표 거르기·상담 버튼 등)을 바꾸면 테스트가 실패합니다.python3 tools/build_parity_cases.py → 만들어진 파일을 이 저장소 tests/에 복사합니다..github/workflows/ci.yml)가 PR·main push마다 타입 검사·테스트·빌드를 돌립니다.npx vercel)를 실행합니다..env의 환경변수를 등록합니다:
SUPABASE_URL: https://kkdnirublmowoujklhus.supabase.coSUPABASE_service_role: (service_role 키 값)SUPABASE_annon: (anon 키 값 - 선택)icn1, vercel.json 설정됨)에서 서버리스 API가 즉시 동작합니다./api/chat)/widget)은 같은 배포 도메인의 /api/chat을 부르므로 다른 사이트에서의 브라우저 호출은 403으로 막습니다. 다른 도메인에서 API를 직접 불러야 할 때만 ALLOWED_ORIGINS(쉼표 구분, 예: https://japan.onlytour.co.kr)를 설정합니다.CHAT_RATE_PER_MINUTE(기본 10), 하루 CHAT_RATE_PER_DAY(기본 150)회. 초과하면 429와 카카오톡 상담 안내를 돌려줍니다.
osw_chatbot_admin/supabase/005_rate_limit.sql을 먼저 한 번 실행해야 동작합니다. 실행 전에는 제한 없이 통과하며 Vercel 로그에 [rate-limit] 경고가 남습니다.web으로 남습니다. Supabase에서 osw_chatbot_admin/supabase/006_web_channel.sql을 실행해야 하며, 실행 전에는 예전처럼 simulator로 남습니다.[api/chat], [fallback_logs])에만 남깁니다.폼 주소·항목 ID는 코드에 두지 않고 DB bot_settings.handoff.form을 따릅니다(관리자 앱 [챗봇 테스트]와 같은 규칙). 운영 폼으로 바꾸려면 osw_chatbot의 폼정의.xlsx '폼설정'에 운영 폼 응답 주소·항목 ID를 적고, 관리자 앱 **[챗봇 설정 → 폼정의·운영정보에서 가져오기]**를 누릅니다. 폼이 준비되지 않았으면(ready=false) 버튼을 숨깁니다.
embed.js)고객사 홈페이지 HTML의 </body> 직전에 아래 한 줄만 추가하면 데스크톱과 모바일 모두 자동으로 챗봇이 표시됩니다.
<script
src="https://배포된-도메인.vercel.app/embed.js"
data-brand="japan"
data-position="right"
data-mobile-bottom="20px"
defer
></script>
data-*)data-brand: 브랜드 코드 (기본값: "japan")data-position: "right" (기본값) 또는 "left"data-mobile-bottom: 모바일 하단 여백 (기본값: "20px", 고객사 하단 네비게이션 바가 있을 경우 "76px" 등으로 조절 가능)data-desktop-bottom: 데스크톱 하단 여백 (기본값: "28px")data-label: 런처 옆 안내 문구 (기본값: "AI 여행 상담")