WallpaperMachine
The wallpapers you love. A new home on your Mac.
일본 단독패키지, 벳푸 스기노이 호텔, 프리미엄 골프여행, 일일투어 실시간 AI 맞춤 여행 상담
Translation pending
LifestyleTypeScript · JavaScriptGitHub @JaewooLee-AIOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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 여행 상담")