gist_chatbot_flutter
GIST 챗봇 Flutter 패키지 - 웹 위젯과 동일한 채팅 경험을 앱에서 제공합니다.
앱 전용 API 명세에 맞춰 appId 기반 세션 발급, 스트리밍 질의, 답변 피드백/재생성을 지원합니다.
기능
- 웹 위젯과 동일한 채팅 UI (헤더, 자주 묻는 질문, 말풍선, 출처 배지/이미지)
- 마크다운 답변 렌더링 + SSE 스트리밍
- 스트리밍 중지 (중지 버튼)
- 로딩 단계 문구 (자료를 찾아보는 중 → 파일을 읽어보는 중 → 조금 더 생각 중)
- 답변 피드백 (도움이 됐어요/안 됐어요) + BAD 시 1회 재생성
- 세션당 질문 5회 제한 시 안내 배너 + 재시도 카운트다운
- 대화 세션 유지 (SharedPreferences)
- 출처 링크/이미지를 외부 브라우저로 열기
설치
dependencies:
gist_chatbot_flutter: ^0.1.0
사용법
패키지는 트리거 UI(플로팅 버튼 등)를 제공하지 않습니다.
GistChatbot 인스턴스를 만들고, 앱의 아무 위젯에서나 open()을 호출하세요.
import 'package:flutter/material.dart';
import 'package:gist_chatbot_flutter/gist_chatbot_flutter.dart';
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final _chatbot = GistChatbot(
config: const GistChatbotConfig(
widgetKey: 'wk_live_xxx',
// appId 생략 시 package_info_plus로 자동 획득 (Android applicationId / iOS Bundle ID)
),
);
@override
void dispose() {
_chatbot.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FloatingActionButton(
onPressed: () => _chatbot.open(context),
child: const Icon(Icons.chat_bubble_rounded),
),
);
}
}
open(context)— 챗봇 패널을 엽니다. 인스턴스가 살아 있는 동안 대화가 유지됩니다.close()— 패널을 닫습니다 (뒤로가기/배경 탭/헤더 ✕로도 닫힘).isOpen— 패널 표시 여부.dispose()— 대화와 리소스를 정리합니다.
설정 (GistChatbotConfig)
| 필드 | 필수 | 설명 |
|---|---|---|
widgetKey |
O | 위젯 키 (대시보드에서 발급, 예: wk_live_xxx) |
apiBaseUrl |
X | 백엔드 API 베이스 URL. 기본값은 운영 서버 (dev 환경에서만 지정) |
resourceCenterUrl |
X | 출처 리소스 베이스 URL. 기본값은 운영 리소스 센터 |
appId |
X | 앱 식별자. null이면 package_info_plus로 자동 획득 |
accessToken |
X | OAuth 등 인증 토큰 (선택) |
reportUrl |
X | 헤더 신고 버튼 URL (기본: cs.gistory.me) |
colors |
X | 색상 커스터마이징 (웹 위젯 CSS 변수와 동일한 팔레트) |
위젯 키만 넣으면 됩니다. 앱의 번들 ID(iOS) / applicationId(Android)가 챗봇 대시보드에 등록되어 있어야 하며, 미등록 시 채팅 화면에 안내 문구가 표시됩니다.
API (앱 전용 명세)
POST /api/v1/widget/auth/session— 세션 발급 (body: widgetKey, clientType: "app", appId)GET /api/v1/widget/messages— 대화 내역 조회 (스트림 완료 후 서버 메시지 ID 연결에 사용)POST /api/v1/widget/messages/chat/stream— 챗봇 질의 (SSE 스트리밍)POST /api/v1/widget/messages/{id}/regenerate/stream— 답변 재생성 (SSE 스트리밍)PUT /api/v1/widget/messages/{id}/feedback— 답변 피드백 (rating: GOOD | BAD)
세션당 user 질문은 최대 5회입니다. 초과 시 안내 배너와 함께 세션 만료까지 남은 시간이 표시됩니다.
라이선스
MIT