<!-- https://unlockos.io/ja/manual/space-speaker -->

# スピーカー通知チャネル ヘルプ

## 概要

**スピーカー** は、[通知ワークフロー](notification-workflow.md)のチャネルの1つで、専用デバイス（M5Stackベースのハードウェア）を使って**空間内に音声アナウンスを流す**通知手段です。「チェックアウト予定の5分前にお片付けをお願いする放送を流す」「入室を検知したらウェルカムメッセージを流す」といった運用に使います。LINE・Email・SMSのように個人に通知するのではなく、部屋やスペースそのものに向けて音声を再生する点が他チャネルと異なります。

サイドバーの「🔔 通知ワークフロー」→ **チャネル** タブのスピーカーカードから `/notifications/channels/speaker` を開きます。この画面で行うのは**スピーカーデバイスの登録**だけです。読み上げ原稿の作成・音声生成・テスト配信は**メッセージタブ**（[通知ワークフロー](notification-workflow.md)）で、鳴らすタイミングは**ワークフロータブ**で設定します。

| 設定内容 | 画面 |
|---|---|
| いつ鳴らすか（タイミング） | 通知ワークフロー画面の **ワークフロー** タブ |
| 何を鳴らすか（読み上げ原稿・音声生成・テスト配信） | 通知ワークフロー画面の **メッセージ** タブ |
| どのデバイスに鳴らすか（デバイス登録） | このページ（`/notifications/channels/speaker`） |

管理・編集ができるのは施設オーナー・組織オーナーです（一般メンバーは閲覧のみ、または非表示）。

---

## 詳細機能

## 機能1: スピーカーデバイスの登録

`/notifications/channels/speaker` で、施設に設置した物理デバイスを登録します。

| 項目 | 説明 |
|------|------|
| デバイスID | M5本体のシリアルログに表示される `[SYS] Device ID` と**同じ値**を入力する（英数字と `. _ -` のみ、128文字以内） |
| 表示名 | 画面上での呼び名（例:「1Fエントランス」） |
| 説明（任意） | 設置場所のメモなど |
| 有効 | OFFにすると、このデバイス宛の配信が一時的に止まる（登録情報は残る） |

デバイスIDは**作成後も編集可能な項目ではなく**、編集画面では読み取り専用として表示されます（値を変えたい場合は削除して登録し直します）。

### 部屋の割り当て

自動配信は「**その予約に割り当てられた部屋のスピーカー**」で鳴ります。部屋を割り当てていないスピーカーは、配信設定のルールで選択できません（テスト配信には使えます）。

割り当ては **設定 → 部屋 → 「スピーカー割り当て」タブ**（`/settings?tab=rooms`）で行います。部屋の一覧が並ぶので、各部屋にどのスピーカーを置くかを選びます。ロックの割り当てと同じ画面構成です。

- 1部屋につき1台まで。すでに他の部屋にいるスピーカーを選ぶと、その部屋から移動します
- 配信設定のルールで使用中のスピーカーは、部屋から外したり削除したりできません。先にルール側で選択を解除してください

---

## 機能2: 音声スクリプト（読み上げ原稿）の作成と生成

読み上げ原稿の作成・音声生成・プレビュー・テスト配信は、すべて[通知ワークフロー](notification-workflow.md)の**メッセージタブ**で行います。手順は以下のとおりです。

1. 通知ワークフロー画面の**ワークフロータブ**で、チャネルが「スピーカー」のワークフロー（または新規ワークフロー）に対象デバイスを紐づける
2. **メッセージタブ**で、そのワークフローに紐づくメッセージを開く（未作成なら新規作成し、ワークフローに紐づける）
3. 「音声スクリプト」欄に読み上げさせたい原稿を入力する
4. ワークフローがスピーカーチャネルの場合、原稿欄の下に音声生成用のブロックが表示される。ここで**ボイス**を選ぶ（UnlockOS があらかじめ用意した ElevenLabs のボイスカタログから選択。施設オーナー自身が ElevenLabs の契約を持つ必要はありません）
5. 「音声を生成」をクリックすると ElevenLabs で音声（MP3）が生成される

生成が終わると再生プレビューが表示され、その場で聞いて確認できます。原稿またはボイスを変更すると再生成が必要になる旨の警告が表示されます。生成に失敗した場合はエラー内容が表示されます（[トラブルシューティング](#トラブルシューティング)参照）。

初めて音声を生成したときに、生成された音声は自動的にそのワークフローに紐づきます（別画面で ID を選び直す操作は不要です）。

> **音声スクリプトに `{{guest_name}}` のような変数は使えません。** 音声は原稿から事前に生成され、実際の再生時には展開されず文字通り読み上げられてしまうため、変数を含む原稿は生成できないようになっています。固定の文言のみ入力してください。

### テスト配信

音声生成ブロックの「テスト配信」ボタンから、生成済みの音声をワークフローに紐づくデバイスへ**即時再生**できます。実際の予約に連動した自動配信とは独立した操作で、送信後にデバイスからの応答（再生済み・スキップ・失敗など）を最大30秒間待って結果を表示します。**テスト配信は課金の対象になりません。**

---

## 機能3: 鳴らすタイミングの設定

「どのタイミングで」再生するかは、[通知ワークフロー](notification-workflow.md)の**ワークフロータブ**で、他のチャネル（LINE・Email・SMS）と同じ**アンカーイベント＋オフセット**の仕組みで設定します（予約開始／終了・実チェックイン／チェックアウトを基準に前後の分数を指定）。アンカーの詳細は[通知ワークフローのヘルプ](notification-workflow.md#ワークフロータブ)を参照してください。

### スピーカーの選択は「対象にする部屋」の指定です

選んだ台が全部鳴るわけではありません。予約ごとに、**その予約の部屋のスピーカー1台だけ**が鳴ります。101・102・103 を選んだルールなら、102号室の予約では102だけが鳴ります。

- 対象にしたい部屋のスピーカーをまとめて選びます。部屋ごとにルールを分ける必要はありません
- スタッフルームなど対象にしたくない部屋は、選択から外してください
- 部屋を追加したときは、対象にするルールで選択を追加してください（自動では入りません）

### 配信結果の確認

配信履歴（再生済み／スキップ／失敗などの状況）は、[通知ワークフロー](notification-workflow.md)の**履歴タブ**で「スピーカー」チャネルとして課金情報つきで確認できます。

配信しなかった予約は「**対象外**」として記録されます（エラーではなく、課金もされません）。理由は履歴の各行に表示されます。

| 表示 | 意味 | 対処 |
|---|---|---|
| 対象外 | その予約の部屋が、このルールで選んだ部屋に入っていない | 意図どおりなら対処不要。鳴らしたいならルールのスピーカー選択に追加する |
| 部屋未割当 | 予約に部屋が割り当てられないまま配信時刻を迎えた | 予約に部屋を割り当てる |

### 再生条件（在室検知との組み合わせ）

チャネルが「スピーカー」のワークフローでは、アンカーイベント＋オフセットに加えて**再生条件**を選べます。設定した時刻になったときに実際に再生するかどうかを、その部屋に人がいるかどうか（デバイスの在室検知）で絞り込む設定です。

| 再生条件 | 動作 |
|---|---|
| 常に | 在室状況に関わらず、設定時刻になったら無条件に再生する（従来の動作） |
| 在室時のみ | 設定時刻の時点で在室していれば再生し、不在であれば鳴らさずスキップする |
| 最初の在室時 | 設定時刻以降、実際に人の入室を検知した最初のタイミングで1回だけ再生する（不在の間は再生を待機し、予約終了時刻までに入室が検知されなければ再生されずに終了する） |

**使い分けの例:**
- チェックアウト前のお片付け依頼 → アンカー「予約終了」＋オフセット「前」＋再生条件「在室時のみ」（既に退室済みの無人の部屋に向けて放送しない）
- 入室時のウェルカムメッセージ → アンカー「予約開始」＋再生条件「最初の在室時」（チェックイン手続きをした場所と実際に部屋に入るタイミングが異なっても、実際に入室したタイミングで再生される）

再生条件を選ばなかった場合は「常に」と同じ動作になります。

---

## 機能4: 課金

スピーカーチャネルは **¥3／回**（再生1回あたり）の従量課金です。ElevenLabsでの音声生成やMQTT配信にかかる実費はUnlockOS側が負担し、顧客への請求は再生1回あたりの単価に統一されています。テスト配信は課金されません。

**1つの予約につき、1つのルールで課金されるのは最大1回（¥3）です。** ルールで選んだスピーカーの台数では増えません。「対象外」となった予約は課金されません。

---

## トラブルシューティング

### 音声が再生されない

1. [通知ワークフロー](notification-workflow.md)の**履歴タブ**で状態を確認する。「対象外」なら原因は部屋の設定です（上記「配信結果の確認」の表を参照）
2. 対象デバイスの「有効」がONになっているか確認する（OFFだとコマンドは送られても再生されない）
3. スクリプトの生成状態が「生成済み」になっているか確認する（未生成・生成失敗の音声は再生できない）
4. 同じ**履歴タブ**でエラー内容を確認する。よくあるものは以下のとおり。

| エラー内容（画面表示） | 考えられる原因 |
|---|---|
| スピーカーに接続できませんでした | デバイスの電源・ネットワーク接続を確認する |
| スピーカーへの接続が拒否されました | デバイスの登録状況（デバイスID）を確認する |
| スピーカーへの配信に失敗しました | 時間をおいて再度お試しください |
| 音声ファイルを取得できませんでした | スクリプトの音声を再生成する |
| スピーカーの認証情報を取得できませんでした | デバイスのプロビジョニング状況をサポートに確認する |
| 再生予定時刻を過ぎたため配信を中止しました | 配信の遅延。頻発する場合はサポートに連絡 |

### 音声の生成に失敗する

読み上げ原稿の内容やボイス選択に問題がある場合、生成エラーがメッセージ編集画面の音声生成ブロックに表示されます。原稿を短くする・特殊な記号を減らす等の見直しをしてから再度「音声を生成」を試してください。一時的なタイムアウトの場合は時間をおいて再試行してください。原稿に `{{guest_name}}` のような変数プレースホルダーが含まれている場合は生成自体がブロックされます。固定の文言に置き換えてください。

### スピーカーの声を変えたい

メッセージ編集画面の音声生成ブロックでボイスを選び直し、「音声を生成」で再生成してください。

---

## よくある質問

### Q: 1つのルールで複数のスピーカーを同時に鳴らせますか？
A: できません。1つの予約で鳴るのは、その予約の部屋のスピーカー1台だけです。複数台を選ぶのは対象にする部屋を指定するためで、同時再生のためではありません。館内一斉放送には現在対応していません。

### Q: 登録したスピーカーがルールの選択肢に出てきません
A: そのスピーカーに部屋が割り当てられていません。設定 → 部屋 → 「スピーカー割り当て」タブで、設置した部屋にこのスピーカーを割り当ててください。

### Q: 施設に「スピーカー」カードやメニューが表示されません
A: 通知ワークフロー機能自体のフィーチャーフラグ、またはスピーカー機能のフィーチャーフラグが無効になっている可能性があります。サポートにご確認ください。

### Q: テスト配信は課金されますか？
A: されません。実際の予約に連動する自動配信のみ課金対象です。

### Q: 音声スクリプトに変数を使いたいのですが
A: スピーカー音声は事前生成のため使用できません。変数はゲストごとに実行時展開されますが、スピーカーの読み上げ音声は原稿から一度だけ生成され、以降はそのまま再生されるため展開が反映されません。固定の文言のみご利用ください。

### Q: デバイスIDを間違えて登録しました
A: デバイスIDは編集画面では変更できません。削除してから正しいデバイスIDで登録し直してください。

---

## 関連ページ

- [通知ワークフロー](notification-workflow.md)
- [Webhook 通知チャネル](webhook-channel.md)
