docs: Alexa TTS文書を30番に一本化しアーカイブ索引を追加

This commit is contained in:
Akira
2026-03-04 12:28:02 +09:00
parent be5fd5a75b
commit 70f842f00e
6 changed files with 2594 additions and 5 deletions

View File

@@ -0,0 +1,163 @@
# 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: '<speak>'+text+'</speak>'`
→ 英語も無音。`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エンドポイントが必要**(未探索のルートがある可能性)
---
## 試行ログ続き2026-03-03 午後)
#### Cookie 新規取得auth4.js 再実行)
→ 変化なし。Cookie は原因ではなかった。
#### ❌ `AlexaAnnouncement` ノードタイプ
→ 「えんえせんと」("AlexaAnnouncement" を日本語で読んだ)。コンテンツではなくノード名が読まれた。別用途のノード。
#### ✅ **解決!** `sequenceJson` の non-ASCII を `\uXXXX` エスケープに変換
```javascript
var rawSequenceJson = JSON.stringify(sequenceObj).replace(
/[\u0080-\uffff]/g,
function(c) { return '\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4); }
);
```
→ 「これは日本語のテストです」が完璧に発話された!
---
## ✅ 解決済み2026-03-03
**根本原因**: `sequenceJson` 内の日本語文字を raw UTF-8 のまま Amazon に送ると、Amazon 側のパーサーがそれをフィルタリングして無視する。
**解決策**: `JSON.stringify(sequenceObj)` 後に non-ASCII 文字(`\u0080` 以上)を `\uXXXX` 形式のJSONエスケープシーケンスに変換してから `sequenceJson` として送る。
**修正箇所**: `alexa-api/server.js``alexa-api/test_tts.js`
**確定したパラメータ**:
- `type: 'Alexa.Speak'`
- `locale: 'ja-JP'`
- `textToSpeak: <日本語テキスト>`
- `sequenceJson` は non-ASCII を `\uXXXX` エスケープして送る
---
## 参考
- 実装記録: `docs/alexa-api/10_Alexa TTS API 実装記録 (2026-03-02).md`