# Alexa 日本語 TTS 問題 試行記録 最終更新: 2026-03-03 担当: akira + AI (Antigravity) --- ## 現在の問題 `/api/behaviors/preview` + `Alexa.Speak` を使って日本語テキストを TTSで発話させようとしているが、 **日本語Unicode文字だけが Amazon 側でフィルタリングされ、発話されない。** ASCII文字(英語)は正常に発話される。 --- ## 環境 - テスト用スクリプト: `alexa-api/test_tts.js`(ローカルPCから直接 alexa.amazon.co.jp を叩く) - 本番: `alexa-api/server.js`(VPS上のDockerコンテナ) - テストデバイス: オフィスの右エコー (serial: G0922H08525302K5, type: A4ZXE0RM7LQ7A) - Alexaアプリでデバイス言語設定: **日本語** に設定済み(確認済み) - VPS IP: 162.43.33.56(大阪・Xserver Inc. = 日本国内 ✅ ) --- ## 試行ログ(時系列) ### 【サーバー側での試行】(ChatGPT との会話ログより、2026-03-02〜03) #### ❌ `speakType: 'ssml'` を `operationPayload` に追加 ```json "type": "Alexa.Speak", "operationPayload": { ..., "speakType": "ssml" } ``` → 変化なし。`Alexa.Speak` はSSML非対応のため無効。 #### ❌ `type: 'Alexa.SpeakSsml'` に変更 + `textToSpeak` にSSMLなし ```json "type": "Alexa.SpeakSsml", "operationPayload": { ..., "textToSpeak": text } ``` → 英語も含めて完全無音(LEDも反応なし)。 #### ❌ `Alexa.SpeakSsml` + `textToSpeak: ''+text+''` → 英語も無音。`Alexa.SpeakSsml` は `textToSpeak` ではなく別キーを要求する模様。 #### ❌ `Alexa.SpeakSsml` + `ssml: ssml`(キー名を変更) → 英語も発話せず。 **ChatGPTの最終見解:** `/api/behaviors/preview` では `Alexa.SpeakSsml` は動作しない(APIの癖)。`Alexa.Speak` に戻すしかない。 --- ### 【ローカルPCでの試行】(2026-03-03 午前) #### ❌ `locale: 'ja-JP'` + 日本語テキスト(test_tts.js デフォルト) ```js locale: 'ja-JP', textToSpeak: 'テストです。聞こえますか' ``` → 「エ」だけ発話(最初の「テ」の母音のみ)。 #### ✅ `locale: ''` + ASCII: `'hello'` → 「ハロー」と正常発話。英語は問題なし。 #### ❌ `locale: ''` + 日本語: `'テストです。聞こえますか'` → 「エ」のみ。デバイス言語が英語設定ならこの動作になるが、日本語設定確認済みのため別原因。 #### ❌ `locale: 'ja-JP'` + 日本語: `'テストです。これは日本語のテストです'` → 「えんえ」のような音のみ(断片的な音)。 #### ❌ `locale: 'ja-JP'` + ひらがな: `'あいうえお'` → 無音(LEDは点滅 = 通知は届いている)。 #### 🔍 `locale: 'ja-JP'` + 混在: `'あいうえおThis is Testあいうえお'` → 「ディスイズテスタ」のみ発話。 **重要: 日本語部分は無音、ASCII部分のみ日本語アクセントで読まれる。** → Amazon側で日本語Unicodeを除去している証拠。 #### ❌ `locale: 'ja-JP'` + Unicodeエスケープ: `'\u3053\u308c\u306f\u30c6\u30b9\u30c8\u3067\u3059'` → 無音。ファイルエンコード問題ではない(Unicodeエスケープ = `これはテストです` と同一)。 **→ 文字コードの問題ではないことが確定。** #### ❌ `type: 'AlexaAnnouncement'` + locale:`'ja-JP'` + content[].speak構造 ```json "type": "AlexaAnnouncement", "operationPayload": { "content": [{ "locale": "ja-JP", "speak": { "type": "text", "value": "日本語のテストです" } }], "target": { "devices": [...] } } ``` → 「えんえせんと」("AlexaAnnouncement" を日本語発音で読んだもの)。 コンテンツではなくノード型名が読まれた → このノードタイプは別用途。 --- ## 確定した事実 | 事実 | 根拠 | |------|------| | 通知自体は届いている | LEDが点滅する | | 英語ASCIIは正常発話 | "hello" → 「ハロー」、"This is Test" → 「ディスイズテスタ」 | | 日本語Unicodeのみ除去される | 混在テキストで確認。Unicodeエスケープでも同じ | | デバイス言語設定は日本語 | Alexaアプリで確認済み | | サーバーIPは日本(大阪) | ipinfo.io で確認: Xserver Inc., JP | | 文字コードは問題なし | Unicodeエスケープテストで確定 | | `Alexa.SpeakSsml` 系は全て失敗 | 英語含め無音 | | `AlexaAnnouncement` は別用途 | ノード型名が読まれた | --- ## 仮説(現在) Amazon の `/api/behaviors/preview` エンドポイントが、 何らかの理由で `textToSpeak` 内の日本語Unicodeを除去している。 考えられる原因: 1. **セッション/Cookie が古くなりJapanese TTS権限が変わった**(Cookie の再生成で解消する可能性) 2. **Amazonが API の挙動を変更した**(非公開APIのためいつでも変更しうる) 3. **別のAPIエンドポイントが必要**(未探索のルートがある可能性) --- ## 次に試すべきこと - [ ] `auth4.js` で Cookie を新規取得してテスト(セッションリセット) - [ ] `/api/behaviors/preview` 以外のエンドポイントを探す(例: `/api/ap/d-notification`など) - [ ] `Alexa.TextCommand` ノードタイプ(「テキストで命令を送る」別ルート) - [ ] ローカルブリッジ方式(ローカルPCをプロキシにしてAmazonにリクエストを転送する) - [ ] alexa-cookie / alexa-remote2 のソースコードから別APIを調査する --- ## 参考 - 実装記録: `docs/alexa-api/10_Alexa TTS API 実装記録 (2026-03-02).md` - 上記ファイルに記録されていた未解決事項がこのファイルに続く