CLOSER에서는 웹사이트에 실시간 채팅을 연동할 수 있도록 다음 두 가지 연동 방식을 제공합니다.
1. 원하는 웹 페이지에 설치 스크립트 <script />
삽입
CLOSER가 제공하는 웹 채팅 위젯은 현재 색상이나 버튼 등의 간단한 커스터마이징을 지원하고 있습니다.
커스터마이징 지원은 추후 계속 확대될 예정입니다.
Embedded WebChat API (설치형 스크립트 API)
<script>
/* CLOSER webchat 시작 파라미터 사용자화 + control 객체 획득 */
function onLoad(init) {
// webchat을 설치합니다.
var webchat = init({
// 기본 theme를 변경합니다.
theme: {
position:'right',
pageMargin: [26,30], // 좌우 margin, 상하 margin
zIndex: 10000 // zIndex가 기존 UI와 겹칠 경우 이용하세요.
}
});
// userKey를 변경합니다.
// webchat.setUserKey('userKey');
// 파라미터를 수정합니다.
// webchat.setParams({ email: "user@email.com" });
// webchat을 활성화/비활성화합니다.
// webchat.setEnable(true);
// webchat.setEnable(false);
// webchat 대화창을 열고 닫습니다.
// webchat.setOpen(true);
// webchat.setOpen(false);
// 대화를 시작합니다.
// webchat.startConversation()
// webchat.changeView('chat')
}
/* CLOSER에서 제공된 설치 스크립트 (botId를 변경 후 사용해주세요.) */
(function (c, l, o, s, e, r) {
c[e] = c[e] || {}; r = l.createElement('script'); s && (o += '?botId=' + s); e && (o += ('&bind=' + e)); r.src = o; r.async = 1; l.head.appendChild(r);
})(window, document, 'https://app.closer.ai/webchat.js', '[botId]', onLoad)
</script>
type WebChatInitOptions = {
userKey?: string;
params?: any;
enable?: boolean;
defaultOpen?: boolean;
theme?: WebChatThemeOption;
}
type WebChatThemeOption = {
title?: string;
description?: string;
icon?: string; // url
position?: 'left' | 'right' | 'top-left' | 'top-right';
positionStrategy?: 'fixed' | 'absolute'; // css "position" strategy
textColor?: string; //hex code, e.g. #000000
primaryColor?: string; // hex code, e.g. #3b80e0
primaryContrastTextColor?: string; // ex code, e.g. #ffffff
pageMargin?: number | [number, number]; // [horizontal,vertical] margin if provided in array
zIndex?: number; // button z-index
defaultWindowSize?: {
width?: number;
height?: number;
};
greetingMessage?: string;
enableResize?: boolean;
buttonSize?: number;
buttonIconSize?: string; // percentage string e.g. '50%'
}
type WebChatControl = {
isOpen: boolean;
isEnabled: boolean;
params: Record<string, string | number | null | boolean>;
userKey: string;
theme: WebChatThemeOption;
view: {
current: 'chat' | 'welcome' | 'setting'
stack: ('chat' | 'welcome' | 'setting')[]
};
changeView: (view: 'chat' | 'welcome' | 'setting' | 'back', action?: 'push' | 'pop') => void;
setOpen: (open: boolean) => void;
setEnabled: (enable: boolean) => void;
setParams: (params: Record<string, string | number | null | boolean>) => void;
setUserKey: (userKey: string) => void;
setTheme: (theme: WebChatThemeOption) => void;
startConversation: (options?: {
navigation?: { flowId: number; nodeId?: number; };
params?: Params;
restart?: boolean;
}) => Promise<void>;
/* 대화 시작 이후 이용 가능한 메소드 일람 */
changeNavigation: (navigation: {
flowId: number;
nodeId?: number;
force?: boolean;
}) => Promise<void>;
sendMessage: (message: {
data: {
type: 'text';
text: string;
} | {
type: 'media';
media: {
type: 'image' | 'video';
uri: string;
}
}
}) => Promise<void>;
sendTypingEvent: () => Promise<void>;
}
type OnLoadCallback = (
init: (options?: WebChatInitOptions) => WebChatControl
);