Files
windmill_workflow/docs/alexa-api/12_ローカルで試したこと.md

138 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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エンドポイントが必要**(未探索のルートがある可能性)
---
## 次に試すべきこと
- [ ] `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`
- 上記ファイルに記録されていた未解決事項がこのファイルに続く