SDK 레퍼런스는 위젯의 초기화 옵션, 런타임 API, 이벤트를 정리한 참조 문서입니다. 설치 코드 두 줄만으로 위젯은 동작하므로, 언어를 바꾸거나 특정 기능을 끄거나 사이트 코드에서 위젯 상태를 받아야 할 때 이 문서를 봅니다.
옵션은 전부 선택 사항입니다. 지정하지 않으면 아래 표의 기본값으로 동작합니다.
스크립트 주소
| 주소 | 성격 | 언제 쓰나 |
|---|---|---|
https://addon-cdn.voidx.ai/latest/voidx-ai-addon.standalone.js | 배포할 때마다 갱신됩니다 | 데모, 테스트 |
https://addon-cdn.voidx.ai/v{버전}/voidx-ai-addon.standalone.js | 한 번 발행되면 바뀌지 않습니다 | 운영 사이트 |
스크립트를 불러오면 window.VoidxAIAddon이 생기고, init(config)를 호출하면 위젯이 그려집니다. 위젯은 호스트 사이트 스타일에 영향을 주지 않고 영향을 받지도 않습니다.
초기화 옵션
const voidx = window.VoidxAIAddon.init({
apiKey: 'YOUR_API_KEY',
locale: 'en',
features: { voice: false, productPress: true },
contact: 'help@example.com',
});
| 옵션 | 타입 | 기본값 | 설명 |
|---|---|---|---|
apiKey | string | 없음 (필수) | 위젯 키. 없으면 init()이 오류를 던지고 아무것도 그리지 않습니다 |
locale | 'ko' | 'en' | 'ja' | 'zh' | 'ko' | 위젯 문구와 답변 언어. 방문자 브라우저 언어를 자동으로 읽지 않으므로 다국어 사이트에서는 페이지 언어에 맞춰 지정합니다 |
features | 객체 | 아래 표 | 기능별 켜기·끄기 |
theme | 객체 | 아래 표 | 색상·글꼴·모서리 |
hoverTargets | 객체 | 아래 표 | 호버 감지 대상 요소 규칙 |
productPress | 객체 | 아래 표 | 길게 누르기·길게 올려두기로 상품을 고르는 동작 |
contact | string | 없음 | 토큰 한도가 소진됐을 때 방문자에게 보여줄 문의처. 비우면 "사이트 운영자에게 문의해주세요"로 나갑니다 |
telemetry | false | 객체 | 활성 | false로 두면 위젯 자체 계측을 끕니다 |
onReady | () => void | 없음 | 위젯 준비 완료 콜백 |
onError | (error: Error) => void | 없음 | 오류 콜백 |
onMessage | (message) => void | 없음 | 메시지 수신 콜백 |
features
| 키 | 기본값 | 설명 |
|---|---|---|
chat | true | 대화창과 캐릭터 위 말풍선 |
cursor | true | 화면에 떠 있는 캐릭터 |
voice | false | 음성 대화. true는 요청이고 플랜이 허용할 때만 켜집니다. 구축형(Customize) 계약에서 제공합니다 |
hoverDetection | true | 커서 반응 트리거와 호버 감지 이벤트 |
productPress | false | 상품을 길게 누르거나 길게 올려두면 대화로 넘기는 동작 |
agentMode | '3d' | 캐릭터 렌더 방식 |
voice: false면 플랜과 무관하게 꺼집니다. 켰는데 음성 버튼이 보이지 않으면 코드가 아니라 계약을 확인합니다.
theme
| 키 | 기본값 |
|---|---|
primaryColor | #587efa |
gradientFrom | #3762f2 |
gradientTo | #31a9ff |
fontFamily | Pretendard, -apple-system, BlinkMacSystemFont, sans-serif |
borderRadius | 20 (px) |
hoverTargets
커서가 어떤 요소 위에 1.5초 머물렀을 때 voidx:hover:detected 이벤트를 낼지 정합니다. ids 정확 일치, classNames 정확 일치, idPatterns, classNamePatterns 순으로 판정합니다.
| 키 | 기본값 |
|---|---|
classNames | ['product-item', 'voidx-target'] |
ids | [] |
idPatterns | [/^product-[A-Za-z0-9]+$/, /product-\w+/] |
classNamePatterns | [/^voidx-/] |
productPress
features.productPress를 켰을 때의 세부 동작입니다.
| 키 | 기본값 | 설명 |
|---|---|---|
pressMs | 550 | 터치·펜에서 길게 누르기로 판정하는 시간(ms) |
hoverMs | 900 | 마우스에서 길게 올려두기로 판정하는 시간(ms) |
hoverEnabled | true | 마우스 길게 올려두기 사용 여부 |
cooldownMs | 6000 | 같은 상품을 다시 잡기까지의 간격(ms) |
mode | 'greet' | greet는 "{상품명}에 관심 있으신가요?" 말풍선 표시, send는 상품명을 방문자 메시지로 전송, prefill은 대화창을 열어 입력창에 상품명만 채움 |
suppressNativeMenu | true | 길게 누를 때 뜨는 브라우저 기본 메뉴와 텍스트 선택을 막습니다 |
urlPattern | 없음 | 상품 상세 주소를 판정할 정규식. 지정하면 기본 토큰 목록 대신 이 규칙을 씁니다. 잘못된 패턴은 무시되고 기본 목록으로 돌아갑니다 |
런타임 API
init()이 돌려주는 인스턴스로 위젯을 제어합니다.
const voidx = window.VoidxAIAddon.init({ apiKey: 'YOUR_API_KEY' });
voidx.show();
voidx.on('voidx:chat:open', () => console.log('opened'));
| 메서드 | 설명 |
|---|---|
show() | 대화창을 엽니다 |
hide() | 대화창을 닫습니다 |
sendMessage(text) | 방문자가 입력한 것처럼 메시지를 보냅니다 |
announceSystemEvent(context, { instruction?, openChat? }) | 방문자 말풍선 없이 에이전트 답변만 띄웁니다. 주문 완료 같은 사이트 이벤트를 알릴 때 씁니다. 아직 대화가 시작되지 않았으면 건너뜁니다 |
setTheme(partial) | 테마 일부를 바꿉니다 |
setLocale(locale) | 언어를 바꿉니다 |
on(event, handler) / off(event, handler) | 이벤트 구독·해제 |
destroy() | 위젯을 내리고 DOM과 상태를 정리합니다 |
이벤트
on()으로 받거나 같은 이름의 window CustomEvent로도 받을 수 있습니다.
| 이벤트 | 데이터 | 시점 |
|---|---|---|
voidx:ready | 없음 | 위젯 준비 완료 |
voidx:error | Error | 오류 발생 |
voidx:message | 메시지 객체 | 메시지 수신 |
voidx:auth:expired | { status } | 방문자 인증 만료. 위젯이 스스로 다시 받으므로 조치는 필요 없습니다 |
voidx:chat:open | 없음 | 대화창 열림 |
voidx:chat:close | 없음 | 대화창 닫힘 |
voidx:voice:start | 없음 | 음성 대화 시작 |
voidx:voice:end | 없음 | 음성 대화 종료 |
voidx:voice:error | { message } | 음성 오류 |
voidx:hover:detected | { element } | 호버 감지 대상 위에 1.5초 머묾 |
voidx:product:captured | { product, element } | 길게 누르기·올려두기로 상품이 잡힘 |
voidx:action:executed | { name, params, result } | 호스트 액션 실행 |
voidx:action:error | { name, params, error } | 호스트 액션 실패 |
voidx:destroy | 없음 | 위젯 정리 |
React 래퍼 @voidx-ai/react
npm install @voidx-ai/react
VoidxAddon 컴포넌트가 스크립트를 불러와 init()을 대신 호출하고, 언마운트될 때 destroy()까지 처리합니다. React 18 이상이 필요합니다.
| 속성 | 설명 |
|---|---|
apiKey | 위젯 키 (필수) |
features | 기능 설정 |
theme | 테마 |
locale | 언어. 값이 바뀌면 setLocale을 자동으로 호출합니다 |
scriptUrl | 스크립트 주소. 운영 사이트에서 버전을 고정할 때 /v{버전}/ 주소를 지정합니다 |
hoverTargets | 호버 감지 대상 규칙 |
onReady / onError / onMessage | 콜백 |
disabled | true면 스크립트를 불러오지 않습니다 |
children | 자식에서 useVoidx() 훅으로 인스턴스에 접근합니다 |
import { VoidxAddon, useVoidx } from '@voidx-ai/react';
function OpenChatButton() {
const voidx = useVoidx();
return <button onClick={() => voidx?.show()}>상담하기</button>;
}
래퍼의 features 타입에는 productPress 키가 없습니다. TypeScript에서 이 기능을 켜려면 객체를 단언해 전달합니다.
import type { VoidxFeatures } from '@voidx-ai/react';
const features = { chat: true, productPress: true } as VoidxFeatures;
<VoidxAddon apiKey={key} features={features} />;
apiKey나 disabled가 바뀔 때만 위젯을 다시 초기화합니다. 콜백은 처음 초기화 시점의 값을 씁니다.
다음 단계
- 설치 순서와 버전 고정은 위젯 설치를 참고하세요.
- 상품 판정 규칙은 설치 전 사이트 준비를 참고하세요.
- 화면에서 기능과 언어를 바꾸는 방법은 위젯 설정을 참고하세요.