Skip to content

イベント

イベント登録タイミング

コールバックは init() の前後いつでも登録できます。ただし、onStatusinit() 中の状態変更(CONNECTINGSOCKET_CONNECTED など)を受信するために、init() 呼び出し前に登録してください。

  • 各タイプにつきコールバックは1つのみ登録可能で、最後の登録が以前のものを上書きします。
  • destroy() 後もコールバックは保持されるため、再初期化時に再登録する必要はありません。

onSignal(callback)

サーバーから受信したシグナルを受け取ります。

js
SDK.onSignal((data) => {
  console.log(data.signal, data.payload);
});
jsx
useEffect(() => {
  window.KlleonSDK.onSignal((data) => {
    console.log(data.signal, data.payload);
  });
}, []);

コールバックパラメータ

フィールド必須説明
signalstringOシグナル種類
payloadobjectXシグナル別追加データ
idstringOシグナルUUID
typestringO"SESSION" | "INPUT" | "OUTPUT"

主要シグナル

会話フロー

シグナル説明payload
RESPONSE_TEXTアバター応答テキスト{ text: string, language: string }
STT_RESULT音声認識結果{ text: string }
RESPONSE_PREPARING応答準備中(LLMリクエスト直前)-
RESPONSE_STARTED応答開始-
RESPONSE_ENDED応答完了-
USER_SPEECH_STARTEDSTTセッション内の発話区間開始(マイクはすでにオン)-
USER_SPEECH_STOPPEDSTTセッション内の発話区間終了(マイクはまだオン)-
ERRORサーバーエラー(セッション維持){ type: "STT_ERROR" | "LLM_ERROR" | ... }
REJECTED入力拒否(セッション維持){ type: "STT_EMPTY" | "MODERATION" | ... }

セッション管理

シグナル説明payload
MATCH_WAITINGマッチング待機中(ローディングUI表示用)-
SESSION_ENDEDセッション正常終了-
SESSION_TIMED_OUTセッションタイムアウト-
TIME_EXHAUSTED使用時間消費-
QUOTA_EXCEEDED同接quota超過-
SUSPEND_WARNED長時間待機警告-

onStatus(callback)

SDK接続状態の変更を受け取ります。

js
SDK.onStatus((status) => {
  console.log('状態:', status);
  if (status === 'CONNECTED_FINISH') {
    console.log('アバター準備完了');
  }
});
jsx
const [status, setStatus] = useState('IDLE');

useEffect(() => {
  window.KlleonSDK.onStatus((s) => setStatus(s));
}, []);

onError(callback)

SDK内部エラー + サーバーエラーを受け取ります。

js
SDK.onError((error) => {
  console.error(error.code, error.message);
});
jsx
useEffect(() => {
  window.KlleonSDK.onError((error) => {
    console.error(error.code, error.message);
  });
}, []);

コールバックパラメータ

フィールド必須説明
codestringOエラーコード
messagestringX詳細メッセージ

エラーコード詳細

初期化エラー(init失敗時)

コード発生タイミングmessage例
SOCKET_FAILEDSDKキー検証失敗またはWebSocket接続失敗"Failed to connect: ..."
STREAMING_FAILEDストリーミング接続失敗"Failed to connect streaming: ..."

init失敗時、onError は呼び出されません。init()Error をthrowするため、try/catch で処理してください。

ランタイムエラー(接続中に発生)

コード発生タイミングmessage例
SOCKET_DISCONNECTED_UNEXPECTEDLYWebSocketエラー発生"WebSocket disconnected unexpectedly"
STREAMING_FAILEDリモートトラック購読失敗"Failed to subscribe to remote track"
STREAMING_DISCONNECTED_UNEXPECTEDLYストリーミング異常終了"Streaming disconnected: NETWORK_ERROR"

サーバーエラー

コード発生タイミングmessage例
SERVER_ERRORサーバーから SERVER_ERROR シグナル受信サーバーからのメッセージまたは "SERVER_ERROR"
WORKER_DISCONNECTEDサーバー接続終了シグナル受信"WORKER_DISCONNECTED"

イベント登録例

js
const SDK = window.KlleonSDK;

SDK.onStatus((status) => console.log('状態:', status));

SDK.onSignal((data) => {
  if (data.signal === 'RESPONSE_TEXT') {
    console.log('アバター:', data.payload.text);
  }
});

SDK.onError((error) => {
  console.error(`[${error.code}] ${error.message}`);
});

SDK.init({
  sdk_key: 'YOUR_SDK_KEY',
  avatar_id: 'YOUR_AVATAR_ID',
}).catch((e) => console.error(e.message));
jsx
import { useEffect, useRef } from 'react';

function App() {
  const initialized = useRef(false);

  useEffect(() => {
    const SDK = window.KlleonSDK;

    SDK.onStatus((status) => console.log('状態:', status));

    SDK.onSignal((data) => {
      if (data.signal === 'RESPONSE_TEXT') {
        console.log('アバター:', data.payload.text);
      }
    });

    SDK.onError((error) => {
      console.error(`[${error.code}] ${error.message}`);
    });

    SDK.init({
      sdk_key: 'YOUR_SDK_KEY',
      avatar_id: 'YOUR_AVATAR_ID',
    })
      .then(() => { initialized.current = true; })
      .catch((e) => console.error(e.message));

    return () => {
      if (initialized.current) SDK.destroy();
    };
  }, []);

  return <avatar-container style={{ width: 400, height: 600 }} />;
}