> For the complete documentation index, see [llms.txt](https://docs.digitalhumans.jp/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.digitalhumans.jp/dev/hosted-experience/hosted-experience-events-2.md).

# イベント

クライアントアプリケーションをさらに細かく制御したり、デジタルヒューマンの状態とウェブサイトを同期させたりしたい場合があります。そのために、デジタルヒューマンアプリケーションからのメッセージイベントを提供しており、これをウェブクライアントで利用することができます。そのためには、`window`イベント`UneeqMessage`をリッスンします。

## 例

以下のコード例では、セッションがライブになると`body`要素のクラスリストを更新するために、どのようにメッセージをリッスンできるかを示しています。リッスンすることができるその他のメッセージイベントについては、以下に記載されています。

```jsx
window.addEventListener( 'UneeqMessage', (event) => {
    const msg = event.detail;
    console.log('UneeQ Message: ', msg);

    switch( msg.uneeqMessageType ){

        case 'SessionStateUpdate':
            if( msg.live ) {
                document.body.classList.add('uneeq-session-live');
            } else {
                document.body.classList.remove('uneeq-session-live');
            }
            break;

        // Add additional event handlers here...

        default:
            break;

    }
});
```

以下に、リッスン可能なメッセージの完全なリストを定義しています：

### AvatarAnswer

アバターの応答メッセージ

### AvatarInterrupted

アバターの発話が中断されました。ユーザーの割り込みやシステムによる中断が発生した場合に発火します

### AvatarStartedSpeaking

デジタルヒューマンが発話を開始しました

### AvatarStoppedSpeaking

デジタルヒューマンの発話が終了しました

### AvatarUnavailable

利用可能なデジタルヒューマンがありません

### CallToActionDismissed

ユーザーによってコールトゥアクションボックスが閉じられました

### CreateSessionFailed

セッション作成（または再開）リクエストが失敗しました

### CustomData

NLPシステムから「instructions」フィールドで提供されたJSONデータ。このデータは、NLPシステムからフロントエンドアプリケーションにカスタム指示を渡すために使用できます。 例えば、ウェブサイトに表示したい製品のカスタムデータを設定するなどです。

### CustomerConcurrencyLimitReached

顧客のピーク同時接続数に達したため、ユーザーが待機列で順番を待っていることを示します。

### CustomMetadataUpdated

チャットメタデータが正常に更新されました。メッセージには新しく設定されたメタデータの値が含まれています

### DataProcessingWarning

データ処理に関する警告が発生しました。データの処理中に問題が検出された場合に通知されます

### DeviceError

デバイス関連のエラーが発生しました

### DigitalHumanMuted

デジタルヒューマンの音声出力がミュート状態になりました

### DigitalHumanPlayedInMutedModeSuccess

ブラウザの自動再生ポリシーにより、デジタルヒューマンの音声を再生できませんでした。デジタルヒューマンは音声がミュートされた状態で起動しました。ユーザーのインタラクション後にuneeqUnmuteDigitalHuman()を呼び出すとミュートが解除される場合があります

### DigitalHumanUnmuted

デジタルヒューマンの音声出力ミュートが解除されました

### DisplayContentUpdated

コンテンツ表示エリアでコンテンツが更新されました

### EnableMicrophoneUpdated

マイクの有効状態が更新されました。enabled値がtrueの場合はマイクが有効、falseの場合はマイクが解放されています

### FrameReady

アプリケーションがロードされ、設定が検証されました。セッションはuneeqInstance.startSession()を呼び出すことで開始できます

### FrameResize

iframeのサイズや位置の変更が要求されました。レイアウトモードやセッション状態の変化に応じて、iframeの表示領域を制御するために使用されます

### Instructions

指示ペイロードがNLPから送信されました。指示はNLP内でJSONとして設定されている場合があります

### LayoutModeUpdate

レイアウトモードが変更されました（overlay / fullScreen / contained）

### MicPermissionDenied

ユーザーがページにマイクの使用許可を与えていませんが、音声入力をプロンプトとして使用しようとしています

### NetworkQuality

ネットワーク品質インジケーターが有効な場合（[`networkIndicator`](/dev/hosted-experience/hosted-experience-configuration-options.md#networkindicator) 設定オプション、または対応するメソッドで有効化）に、収集間隔ごとに発火します。連続する2つの WebRTC 統計スナップショットから算出された品質メトリクスを含みます。

**ペイロード:**

| プロパティ                    | 型      | 説明                                   |
| ------------------------ | ------ | ------------------------------------ |
| `uneeqMessageType`       | string | 常に `"NetworkQuality"`                |
| `audioPacketLossPercent` | number | 音声パケットロス率（0〜100%）                    |
| `videoPacketLossPercent` | number | 映像パケットロス率（0〜100%）                    |
| `audioBitrateKbps`       | number | 音声ビットレート（kbps）                       |
| `videoBitrateKbps`       | number | 映像ビットレート（kbps）                       |
| `frameRate`              | number | 現在の映像フレームレート（fps）                    |
| `audioJitterMs`          | number | 音声の到着間隔ジッター（ミリ秒）                     |
| `videoJitterMs`          | number | 映像の到着間隔ジッター（ミリ秒）                     |
| `roundTripTimeMs`        | number | ネットワーク往復遅延（ミリ秒）                      |
| `audioMos`               | number | 音声の平均オピニオン評点（1.0〜5.0）                |
| `videoMos`               | number | 映像の平均オピニオン評点（1.0〜5.0）                |
| `qualityLevel`           | string | 総合品質: `"Good"` / `"Fair"` / `"Poor"` |

### Notification

通知がありました

### PromptRequest

会話プラットフォームに送信される、ユーザーの入力（テキスト／音声）および関連メタデータです。各リクエストには追跡用の一意な UUID（requestId）が含まれます。

**⚠️ セキュリティに関する重要な注意：**

書き起こしテキスト（transcript）はXSSに対してサニタイズされていません。このデータをHTMLに直接挿入すると、XSS（クロスサイトスクリプティング）攻撃を受ける可能性があります。

**安全な実装例：**

```jsx
// ❌ 危険：直接HTMLに挿入しない
element.innerHTML = promptResult.transcript;

// ✅ 安全：テキストとして挿入
element.textContent = promptResult.transcript;

// ✅ 安全：エスケープ処理を行ってから挿入
element.innerHTML = escapeHtml(promptResult.transcript);
```

### PromptResult

会話プラットフォームからの応答です。初期要求/userInputと応答メタデータが含まれています

### PromptUpdated

プロンプトが更新されました。会話プラットフォームへ送信されるプロンプト内容が変更された場合に発火します

### ReadyToStart

セッションの開始準備が完了しました。接続の初期化が終わり、セッションを開始できる状態になったことを示します

### RecordingStarted

音声認識のための録音が開始されました

### RecordingStopped

音声認識のための録音が終了しました

### RendererError

レンダラー（映像生成）側でエラーが発生しました。重大な場合は、レンダラーエラーによりセッションが終了することがあります。

### SceneReady

3Dシーンの準備が完了しました。アバターのレンダリング環境が整い、表示可能な状態になったことを示します

### ServiceUnavailable

問題が発生しました。詳細については含まれているメッセージを参照してください

### SessionBackendError

セッションに関するバックエンド側でのエラーが発生したことを通知します

### SessionConnecting

セッションの接続を開始しています。デジタルヒューマンとの通信を確立するための初期接続プロセスが進行中です。

### SessionDisconnected

セッションが再接続できなかった場合、SessionDisconnectedメッセージとともにセッションが終了します。

### SessionEnded

セッションが終了しました

### SessionError

セッション中に発生したエラーを含むメッセージです（例：TTS呼び出しの失敗、ネットワーク中断など）

### SessionLive

セッションがライブ状態になり、アバタービデオがアクティブになりました

### SessionReconnecting

ユーザーとバックエンド間で切断が発生し、セッションの再接続を試みています

### SessionReconnectingFinished

セッションの再接続が完了しました

### SessionStateUpdate

セッションの状態が更新されました

### SoftSwitchFinished

アバターのソフトスイッチ（切替）が完了しました。別のアバターへの切り替えが正常に終了したことを示します

### SoftSwitchStarting

アバターのソフトスイッチ（切替）が開始されました。別のアバターへの切り替え処理が進行中であることを示します

### SpeechEvent

ウェブページにトリガーを組み込んで、デジタルヒューマンに話すコマンドを送信できます。詳細はスピーチイベントを参照してください

### SpeechRecognitionTransientError

音声認識で一時的なエラーが発生しました。多くの場合、システムが自動的に回復を試みます。

### SpeechStarted

音声認識が開始されました。ユーザーの音声入力の受付が開始されたことを示します

### SpeechTranscription

ユーザーの音声の暫定的または最終的な書き起こしが受信されました

### UnhandledMessage

ストリーマーから受信したメッセージのうち、既知のハンドラーで処理されなかったメッセージです

### UserDismissedSession

ユーザーがセッションを閉じた（終了させた）ことを示します。

### UserStartedSpeaking

ユーザーの音声入力アクティビティの開始が検出されました

### UserStoppedSpeaking

ユーザーの音声入力アクティビティが停止または一定間隔で一時停止しました

### VadInterruptionAllowed

音声アクティビティ検出（VAD）による割込みが許可されました

### VideoAutoplayBlocked

ブラウザの自動再生ポリシーにより、映像の自動再生がブロックされました。ユーザーの操作後に再生を開始する必要があります。

### VideoInitialized

ビデオストリームの初期化が完了しました。アバターの映像表示の準備が整ったことを示します

### VideoLayoutConfiguring

ビデオレイアウトの設定処理中です。アバター映像の表示レイアウトが構成されている状態を示します

### WaitingForRenderer

レンダラーの割り当てを待機しています。セッション開始後、レンダリングサーバーの準備が完了するまでの待機状態です

### WaitingForStartRequest

開始リクエストの待機中です。セッションの開始指示を待っている状態を示します

### WaitingInQueue

ユーザーが待機列にいることを示します。ユーザーがデジタルヒューマンと対話できるようになるまでの待機状態を管理し、進行状況をカウントダウンします

### WaitingToStart

セッションの開始を待機しています。接続処理が進行中で、まもなくセッションが開始される状態を示します

### WebRtcConnected

WebRTC接続が確立されました。ブラウザとレンダリングサーバー間のリアルタイム通信が正常に接続されたことを示します

### WebRtcStats

WebRTC 接続やメディアストリームに関する統計情報（接続品質やパフォーマンス指標）を提供します
