Developer Reference

Perxona Widget SDK

把 AI avatar 嵌進你自己的網站 — 屬性、事件與方法

易讀的 HTML 版面 Audience: Engineers embedding the widget on their own site
藍色區塊 在 console 中要執行的具體操作。
琥珀色區塊 常見陷阱、限制與注意事項。
綠色區塊 用來確認運作正常的檢查。
紫色區塊 可交給 AI 工具的提示片段。

<sv-agent> 是一個 web component,把完整可用的 AI avatar 放進任何網頁。本指南涵蓋整個整合介面:設定屬性、生命週期事件,以及語音與自訂渲染的 JavaScript 方法。

以下所有名稱都經過對現行 widget build 的驗證。與後台相關的部分(取得 Agent Profile ID、產生嵌入程式碼),見 avatar 指南中「分享」對話框 → 嵌入程式碼卡片的說明。

事前準備

  1. API key 或 session token —— 兩者擇一,必要。 - API key 直接驗證你的 widget。以組織為單位發放;你同時要登記會載入 widget 的網域,僅列入允許清單的網域會被接受。 - session token 是由你自行簽發的 JWT,適合想自行控制效期與輪替的團隊。見下方Session token
  2. Agent Profile ID —— 識別要載入哪個 avatar 與設定的 ULID。可在後台的嵌入程式碼畫面複製。

快速開始

從 CDN 載入 SDK,然後放置元件:

<script
  type="module"
  src="https://cdn.perxona.ai/prod/latest/widget/entry/index.js"
></script>

<sv-agent
  apiKey="<YOUR_API_KEY>"
  agentProfileId="<YOUR_AGENT_PROFILE_ID>"
  conversationMode="inputText"
  displayMode="fullPresentation"
></sv-agent>

不要用自己的 CSS 去調整 sv-agent(定位/transform/尺寸覆寫)—— widget 自行管理版面,外部 CSS 會破壞它。

載入後也可以用 JavaScript 改設定:

const widget = document.querySelector('sv-agent');
widget.updateWidgetSetting({
  presentationMode: 'bubble',
  conversationMode: 'inputText',
  cameraAngle: 'fullBody',
});

屬性參考

驗證與識別:

屬性 說明
apiKey Perxona API key。務必保密。apiKeysessionToken 同時存在時,以 apiKey 優先。
sessionToken 自行管理的 JWT,API key 的替代方案(見Session token)。
agentProfileId 要載入的 Agent Profile ULID。必填。
customerRefId 選填的自由格式 ID,把這次工作階段連到你自己的使用者資料 —— 跨對話記憶靠它啟用,也讓你能在後台的對話紀錄裡找到這位訪客。

版面與外觀:

屬性 說明
displayMode fullPresentation(預設)/3DPresentation2DPresentation 完整 widget 含聊天介面;只渲染 3D avatar(介面自建);或只有對話視窗。
presentationMode bubbleembedded 浮動聊天泡泡按鈕,或嵌入頁面版面中。
cameraAngle fullBodyhalfBody 3D avatar 的預設取景。
initFov JSON,如 '{"distance": 1, "horizontal": 0, "vertical": 0}' 相機距離與位移。
appearanceMode lightdark widget 配色。
userBubbleColor CSS 色碼 聊天泡泡的主色。
bubbleSetting JSON,如 '{"icon": {"src": "…"}}' 泡泡按鈕細節,例如自訂圖示。
showHeader true(預設)/false 是否顯示 widget 頂欄。

行為:

屬性 說明
readyToShowPolicy showWhenAssetsLoading(預設)/showWhenAssetsReady 立即顯示並帶載入指示,或等資產下載完才顯示。
conversationMode inputText(預設)/microphone 文字輸入或語音互動。
muted truefalse(預設) 以靜音狀態啟動音訊輸出。
enableUserActivationCheck true(預設)/false 等真實的使用者手勢後才啟用語音播放(瀏覽器自動播放規則)。僅在已放寬自動播放的受控環境(如原生 WebView)設為 false —— iOS WKWebViewmediaTypesRequiringUserActionForPlayback = [];Android WebView:setMediaPlaybackRequiresUserGesture(false)
supportedFeatures JSON,如 '{"multimedia": true}' 選用功能開關;multimedia(預設開)在 widget 內顯示知識庫的媒體附件。

事件

sv-agent 元素上用 addEventListener 監聽。

life-status —— 連線生命週期。event.detail.statusdisconnectedagent-preparationdownloading-assetsconnection-startconnection-doneready 之一。

asset-download-status —— 下載進度。Payload:status(固定為 downloading-assets)、assetavatarmotionscene)、progress(0–100)。

conversation-status —— 對話生命週期。event.detail.statusidleuser-inputtinguser-input-doneawaiting-responseawaiting-response-donerendering-responsetimeout 之一;適用時 input 帶著使用者輸入的文字。

agent-response-message —— 訊息串流。Payload:eventuser-inputagent-answeragent-end)、messagemessageId(把問題與回答配對)、選用的 ssmlMessagecreatedAt

chat-attachment —— 多媒體顯示器呈現附件時觸發。Payload 為 attachments[],含 type(MIME:video/mp4image/pngimage/jpegapplication/pdf)與 source(URL)。可用來在 avatar 播放影片時暫停你網頁自己的影片。

widget.addEventListener('life-status', (e) => {
  if (e.detail.status === 'ready') console.log('avatar ready');
});

語音控制方法

widget 就緒後可用;皆為元素上的方法。

方法 回傳 說明
startRecording() Promise<boolean> 開始語音辨識。麥克風被拒或語音服務不可用時 resolve false
stopRecording() void 立即停止目前的辨識工作階段;任何時候呼叫都安全。
getRecognitionStatus() 'idle''preparing''recognizing''unknown' 目前的辨識狀態。
isRecording() boolean 是否正在聆聽。
getMicrophoneVolume() number 目前麥克風音量,可做音量表。不可用時回 0

agentReply 自訂渲染

3DPresentation 模式下,對話介面由你自建,用 agentReply 讓 avatar 渲染文字與動作:

widget.agentReply({ event: 'user_input', message: 'Hi!' });
widget.agentReply({ event: 'agent_answer', message: 'Hello! How can I help?', motion_id: 'greeting' });
widget.agentReply({ event: 'agent_end' });

event 的值:user_input(加入問題與回答佔位)、agent_answer(渲染回覆並以 TTS 朗讀)、agent_end(結束這輪交流)。motion_id 指定動畫:idletalkinglisteninggreetingerror,或你故事板中的自訂動作。

Session token

Session token 是你用組織密鑰簽發的 HS256 JWT,帶標準的 iatexp —— 每個嵌入工作階段的有效期由決定:

{ "iat": 1516239022, "exp": 1758004103 }

透過 sessionToken 屬性或 updateWidgetSetting 設定。使用 session token 時請移除 apiKey 屬性 —— 兩者同時存在時 apiKey 優先。

與後台的對應

  • 嵌入程式碼片段、金鑰管理與 Agent Profile ID 都在 avatar 的「分享」對話框 → 嵌入程式碼卡片。
  • 多媒體顯示器播的附件在知識庫設定。
  • 嵌入 widget 產生的對話(含 customerRefId)出現在對話紀錄