Ideal AI Chatbot SDK
가이드
script 태그 하나로 어느 웹사이트에나 AI 챗봇을 붙이는 방법
관리자 패널에서 챗봇을 만들고, 문서를 업로드하면 AI가 자동으로 답변합니다. 완성된 챗봇은 script 태그 하나로 어느 웹사이트에나 붙일 수 있습니다.
봇 메뉴 구성
| 메뉴 | 설명 |
|---|---|
| 설정 | 봇 이름, 프롬프트, 위젯 색상·제목·인사말 변경 + 임베드 코드 |
| Q&A 관리 | 질문-답변 쌍 추가/수정/삭제 (Q&A 봇 전용) |
| 문서 관리 | 파일 업로드 및 폴더 구조 관리 |
| 테스트 | 실제 동작 확인, 참조 문서 및 유사도 표시 |
| 대화 기록 | 세션별 실제 사용자 대화 내역 열람 |
미리 등록한 질문-답변 쌍을 기반으로 응답합니다. 사용자 질문과 의미적으로 가장 가까운 답변을 자동으로 찾아 반환합니다.
문서를 업로드하면 AI가 내용을 읽고 사용자 질문에 맞는 답변을 생성합니다.
문서 업로드
| 방식 | 설명 |
|---|---|
| 파일 업로드 | 여러 파일 한번에 선택. ZIP은 내부 파일 자동 추출 |
| 폴더 업로드 | 폴더 전체를 선택하면 디렉토리 구조 그대로 저장 |
지원 파일 형식
.txt .md .pdf .docx .hwp .hwpx .html .csv .zip
시스템 프롬프트 예시
당신은 [회사명]의 친절한 고객지원 상담원입니다. - 항상 공손하고 간결하게 답변해주세요. - 모르는 내용은 솔직하게 모른다고 말하세요. - 업로드된 문서 내용을 기반으로 답변하세요. - 한국어로만 응답하세요.
봇 설정 페이지 하단의 임베드 코드를 복사해 웹사이트 </body> 태그 바로 위에 붙여넣으세요.
<script src="https://your-server.com/chatbot-widget.js" data-bot-id="여기에-봇-ID" data-endpoint="https://your-server.com"></script>
| 동작 | 설명 |
|---|---|
| 열기 / 닫기 | 우측 하단 플로팅 버튼 클릭 |
| 세션 초기화 | 위젯 닫을 때 자동으로 새 세션 시작 |
| 중복 방지 | 같은 코드 여러 번 삽입해도 위젯은 하나만 표시 |
그누보드는 PHP 기반이지만 위젯은 순수 JS이므로 script 태그만 추가하면 됩니다. 챗봇 서버(Next.js)는 별도로 운영되며 그누보드 서버에는 아무것도 설치하지 않아도 됩니다.
방법 1 — 그누보드 관리자에서 설정 권장
그누보드 관리자 → 환경설정 → 기본환경설정 → "공통 하단 스크립트" 항목에 임베드 코드를 붙여넣습니다. 파일을 직접 수정하지 않아도 됩니다.
방법 2 — tail.php 직접 수정
그누보드 루트의 tail.php 파일을 열고 </body> 바로 위에 임베드 코드를 추가합니다.
<!-- 챗봇 위젯 --> <script src="https://your-server.com/chatbot-widget.js" data-bot-id="봇-ID" data-endpoint="https://your-server.com"></script> </body> </html>
방법 3 — 특정 페이지에만 표시 (PHP 조건)
<?php if (is_member()) { ?> // 로그인 회원에게만 <script src="https://your-server.com/chatbot-widget.js" data-bot-id="봇-ID" data-endpoint="https://your-server.com"></script> <?php } ?>
| 조건 함수 | 의미 |
|---|---|
is_member() | 로그인한 회원 여부 |
is_admin() | 관리자 여부 (관리자에겐 숨기기: !is_admin()) |
$bo_table == 'notice' | 특정 게시판에서만 표시 |
카페24 쇼핑몰 또는 호스팅 서비스에서 챗봇 위젯을 추가하는 방법입니다. 마찬가지로 챗봇 서버에는 아무런 작업이 없으며, script 태그만 추가하면 됩니다.
방법 1 — 쇼핑몰 관리자 스크립트 설정 권장
카페24 쇼핑몰 관리자에서 코드 수정 없이 스크립트를 추가할 수 있습니다.
https://echosting.cafe24.com)에 로그인합니다.방법 2 — 디자인 편집 (HTML 직접 수정)
스킨 파일을 직접 수정하는 방법입니다. 특정 페이지에만 챗봇을 추가하거나 세밀한 제어가 필요할 때 사용합니다.
layout/basic/layout.html 또는 html/layout.html을 엽니다.</body> 태그를 찾아 바로 위에 임베드 코드를 붙여넣습니다.<!-- 챗봇 위젯 --> <script src="https://your-server.com/chatbot-widget.js" data-bot-id="봇-ID" data-endpoint="https://your-server.com"></script> </body> </html>
footer.php, bottom.php 등)의 </body> 위에 코드를 추가하면 됩니다.
React Native, Flutter, iOS(WKWebView), Android(WebView) 등 앱 내 웹뷰에서도 동일하게 동작합니다. 웹뷰가 일반 브라우저처럼 HTML을 렌더링하므로 별도 작업 없이 script 태그만 추가하면 됩니다.
방법 1 — 웹뷰로 관리자 페이지 URL 직접 로드
별도의 챗봇 전용 페이지를 만들어 웹뷰로 띄우는 방식입니다. 앱에서 챗봇 버튼을 누르면 웹뷰가 열리는 구조입니다.
import { WebView } from 'react-native-webview'; export default function ChatbotScreen() { return ( <WebView source={{ uri: 'https://your-server.com/chat/봇-ID' }} style={{ flex: 1 }} /> ); }
방법 2 — 기존 웹페이지에 위젯 임베드 후 웹뷰로 로드
이미 운영 중인 웹사이트에 챗봇 위젯을 추가했다면, 해당 URL을 웹뷰로 열면 앱에서도 위젯이 그대로 동작합니다.
방법 3 — HTML 문자열을 웹뷰에 직접 주입
외부 URL 없이 앱 내부에서 챗봇 화면을 직접 렌더링하는 방식입니다.
import { WebView } from 'react-native-webview'; const html = ` <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> body { margin: 0; height: 100vh; display: flex; flex-direction: column; } </style> </head> <body> <script src="https://your-server.com/chatbot-widget.js" data-bot-id="봇-ID" data-endpoint="https://your-server.com"> </script> </body> </html> `; export default function ChatbotScreen() { return ( <WebView source={{ html }} originWhitelist={['*']} style={{ flex: 1 }} /> ); }
webview_flutter 패키지를 사용합니다. WebViewController로 URL을 로드하거나 loadHtmlString()으로 HTML을 직접 주입하는 방식이 동일하게 적용됩니다.
webView.settings.javaScriptEnabled = true를 설정해야 위젯이 정상 동작합니다.
npm install 실행.env.local 파일 생성 후 아래 환경변수 섹션 참고npm run dev / 프로덕션: npm run build && npm start/admin 접속 후 업체(테넌트) 계정을 생성합니다. DB 스키마는 최초 요청 시 자동 생성됩니다.# OpenAI API 키 (필수) OPENAI_API_KEY=sk-proj-... # Neon PostgreSQL 연결 문자열 (필수) DATABASE_URL=postgresql://... # 서버 URL (임베드 코드 생성에 사용) NEXT_PUBLIC_BASE_URL=http://localhost:3000
OPENAI_API_KEY와 DATABASE_URL은 절대 클라이언트에 노출되면 안 됩니다. NEXT_PUBLIC_ 접두사를 붙이지 마세요.
커스텀 UI를 만들 때 직접 호출할 수 있습니다.
POST /api/chat/:botId
{
"message": "배송은 얼마나 걸리나요?",
"sessionId": "uuid-v4", // 세션 구분, 없으면 자동 생성
"history": [ // AI 봇 전용, 선택사항
{ "role": "user", "content": "안녕하세요" },
{ "role": "assistant", "content": "안녕하세요!" }
]
}
{
"reply": "평균 2~3 영업일 내에 배송됩니다.",
"usedDocs": [ // AI 봇 전용
{ "title": "배송 정책.pdf", "score": 82 }
]
}
AI 봇은 질문을 임베딩한 뒤 업로드된 문서들과 코사인 유사도를 비교해 관련 문서를 GPT 컨텍스트에 주입합니다.
| 파라미터 | 기본값 | 설명 |
|---|---|---|
DOC_THRESHOLD | 0.25 | 이 유사도 미만 문서 제외 |
DOC_TOP_K | 5 | 유사도 상위 K개 문서만 사용 |
| 임베딩 모델 | text-embedding-3-small | 질문 및 문서 임베딩 |
app/api/chat/[botId]/route.ts 상단의 상수를 수정해 조정할 수 있습니다.
Neon PostgreSQL을 사용합니다. 서버 최초 요청 시 스키마가 자동 생성됩니다.
| 테이블 | 설명 |
|---|---|
tenants | 테넌트(업체) 정보 |
bots | 챗봇 설정 (type, prompt, model, widget_color 등) |
qa_pairs | Q&A 쌍 + 임베딩 벡터 |
doc_folders | 문서 폴더 구조 (계층형) |
documents | 업로드된 문서 텍스트 + 임베딩 벡터 |
chat_logs | 세션별 대화 기록 |
chatbot/ ├── app/ │ ├── layout.tsx # 사이드바 레이아웃 │ ├── page.tsx # 챗봇 카드 목록 │ ├── Sidebar.tsx # LNB + 가이드 패널 트리거 │ ├── GuidePanel.tsx # 우측 슬라이드 가이드 패널 │ ├── admin/ # 슈퍼 어드민 (테넌트 관리) │ ├── bots/[id]/ │ │ ├── page.tsx # 봇 설정 + 임베드 코드 │ │ ├── qa/ # Q&A 관리 │ │ ├── docs/ # 문서 관리 │ │ ├── test/ # 테스트 채팅 │ │ └── logs/ # 대화 기록 │ └── api/ │ ├── chat/[botId]/route.ts # 채팅 (RAG 포함) │ ├── bots/[id]/docs/upload/ # 파일/폴더/ZIP 업로드 │ └── widget/[botId]/route.ts # 위젯 설정 조회 ├── lib/ │ ├── neon.ts # Neon PostgreSQL 클라이언트 │ ├── db.ts # 스키마 초기화 + 타입 │ └── embeddings.ts # 임베딩 + 코사인 유사도 ├── public/ │ └── chatbot-widget.js # 임베드 위젯 └── .env.local