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

5.7 KiB
Raw Blame History

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.jsVPS上のDockerコンテナ
  • テストデバイス: オフィスの右エコー (serial: G0922H08525302K5, type: A4ZXE0RM7LQ7A)
  • Alexaアプリでデバイス言語設定: 日本語 に設定済み(確認済み)
  • VPS IP: 162.43.33.56大阪・Xserver Inc. = 日本国内

試行ログ(時系列)

【サーバー側での試行】ChatGPT との会話ログより、2026-03-02〜03

speakType: 'ssml'operationPayload に追加

"type": "Alexa.Speak",
"operationPayload": { ..., "speakType": "ssml" }

→ 変化なし。Alexa.Speak はSSML非対応のため無効。

type: 'Alexa.SpeakSsml' に変更 + textToSpeak にSSMLなし

"type": "Alexa.SpeakSsml",
"operationPayload": { ..., "textToSpeak": text }

→ 英語も含めて完全無音LEDも反応なし

Alexa.SpeakSsml + textToSpeak: '<speak>'+text+'</speak>'

→ 英語も無音。Alexa.SpeakSsmltextToSpeak ではなく別キーを要求する模様。

Alexa.SpeakSsml + ssml: ssml(キー名を変更)

→ 英語も発話せず。

ChatGPTの最終見解: /api/behaviors/preview では Alexa.SpeakSsml は動作しないAPIの癖Alexa.Speak に戻すしかない。


【ローカルPCでの試行】2026-03-03 午前)

locale: 'ja-JP' + 日本語テキストtest_tts.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構造

"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
  • 上記ファイルに記録されていた未解決事項がこのファイルに続く