edge-tts 403エラーの直し方|Synologyのopenai-edge-ttsで音声が作れなくなったら

机のノートパソコンと黒い箱(NAS)の前で、イヤホンをして首をかしげるスーツマン

自宅のNAS(Synology)で、英語のシャドーイング教材を自動で作る仕組みを動かしています。

英語のニュースを入れると、AIが要約して、アメリカ・イギリス・オーストラリアの3つのアクセントで読み上げた音声つきのAnkiカードにしてくれる、というものです。

その「読み上げ」を担当しているのが、Edge TTSです。Synologyのコンテナ(openai-edge-tts)として動かしています。

n8nで英語シャドーイング教材を自動生成してAnkiにストックする仕組みを作る──TTS3回詰まり編【PART2】

ところが、半年ぶりくらいに使ってみたら、音声だけ作れなくなっていました。エラーは403。

調べてみると、2026年10月から世界中で同じエラーが出ていて、原因はMicrosoft側の変更でした。

しかも、Synologyのコンテナの場合、イメージを新しくしても直らないという、ちょっとクセのある状態だったので、直し方をまとめておきます。

机のノートパソコンと黒い箱(NAS)の前で、イヤホンをして首をかしげるスーツマン

この記事でわかること
・edge-ttsで出る「403, Invalid response status」の原因
・Synologyのopenai-edge-ttsで、イメージ更新では直らないときの直し方
・コンテナの中でedge-ttsを7.3.1にする手順(ハッシュつきで安全に)
・ついでにやった、合言葉(APIキー)の変え方

スポンサーリンク

edge-ttsの403エラーの症状

音声を作っているのは、n8n(自動化のツール)からEdge TTSのコンテナを呼び出す部分です。n8nの実行の記録を見ると、そこだけ赤くなって止まっていました。

n8nの実行記録。音声を作るHTTP Requestだけ赤くなって止まっている

エラーの中身はこんな感じです。

500 - {"details":"403, message='Invalid response status', url='wss://speech.platform.bing.com/consumer/speech/synthesize/readaloud/edge/v1?...&Sec-MS-GEC-Version=1-143.0.3650.75'","error":"An internal server error occurred"}

コンテナ(openai-edge-tts)からは500が返ってきていますが、本当の原因はその中の403。コンテナの先にいるMicrosoftの読み上げサービスから、お断りされている状態です。

記録をさかのぼると、最後にちゃんと音声ができていたのは5月25日でした。

原因:Microsoftが10月に接続のしかたを変えた

CLAUDE君に調べてもらうと、Edge TTSの中で使われているedge-ttsという部品(Pythonのライブラリ)の開発ページに、2026年10月に入ってから「急に403が出るようになった」という報告がたくさん出ていました。英語だけじゃなく、中国語の報告もあります。

原因は、Microsoft側が10月に、接続するときの合言葉のしくみ(Sec-MS-GEC)を新しくしたこと。古い版のedge-ttsは、新しいしくみに対応していないので、門前払いされてしまうんですね。

edge-ttsのほうはすぐに対応していて、2026年10月13日に出た7.3.0で新しいしくみ(Sec-MS-GEC v2)に対応、同じ日に7.3.1も出ています。

イヤホンをして、音が出ずに首をかしげるスーツマン

古い版かどうかの見分け方

エラーのURLの最後にSec-MS-GEC-Version=1-143.0.3650.75のように「1-」で始まる番号が入っていたら、古い版のedge-ttsです。新しい版は「2-」になります。

あ、ちなみに、途中で「7.3.1でも直らない(1-のままだ)」という報告が出たんですが、作者さんが「それは違う、あなたの環境の問題です」と返して、報告した人が「確認したら私の間違いでした」と謝って閉じる、というやりとりもありました。同じエラーで調べていると、この報告を見て混乱するかもしれないので、気をつけてみてください。

Synologyのopenai-edge-ttsは、イメージを新しくしても直らない

ふつうなら、Container Manager(Dockerのアプリを管理する画面)でイメージを最新にすれば直りそうなところです。

ところが、私が使っているtravisvn/openai-edge-ttsというコンテナは、作者さんが2025年7月からGitHubを更新しておらず、Docker Hubに置いてある一番新しいイメージも2026年2月18日のものでした。中に入っているedge-ttsは7.2.7のまま。

つまり、イメージを新しくしても、中のedge-ttsは古いままなんです。

そこで、コンテナの中のedge-ttsだけを新しくすることにしました。

直し方:コンテナの中でedge-ttsを7.3.1にする

入れる前に、いつものように安全チェックをしました。

項目結果
出た日2026年10月13日(入れた日の19日前)
ダウンロード数週に約263万回
GitHubのスター約1.2万
知られている穴・乗っ取りの騒ぎなし

定番の部品なので、大丈夫そうです。

① コンテナの中に入る

Container Manager →「Container」→ openai-edge-tts を開く →「Terminal」タブ →「Create」→ 左に出た「bash」をクリックすると、黒い画面になります。

② 今の版を確認する

python3 -m pip show edge-tts | head -3
コンテナのターミナルでedge-ttsの版を確認。7.2.7と表示され、下にBrokenPipeErrorも出ている

Version: 7.2.7。やっぱり古い版でした。

その下にERROR: Pipe to stdout was brokenというエラーも出ていましたが、CLAUDE君いわく、これはhead -3(最初の3行だけ表示する)を付けたせいで、続きを出そうとしたpipが「出す先がもう閉じてるよ」と言っているだけだそうです。害はないとのこと。

③ 7.3.1に入れ替える

echo 'edge-tts==7.3.1 --hash=sha256:2a3c79d6235a7a736d681233823ce5492e829b43eb47beae49aa181237a8f9a4' > /tmp/edge-tts.txt && python3 -m pip install --no-deps --require-hashes -r /tmp/edge-tts.txt
  • --hash:ハッシュ(ファイルの指紋のようなもの)が一致しないと入らないので、確かめたのと同じファイルだけが入ります。ハッシュはPyPI(Pythonの部品の配布サイト)の7.3.1のページで確かめられます
  • --no-deps:ほかの部品には触らない、という意味です
edge-tts 7.3.1への入れ替えに成功した画面

Successfully installed edge-tts-7.3.1と出れば成功です。黄色の「rootで動かしている」という注意と、「pipの新しい版があります」というお知らせは、気にしなくて大丈夫です。

④ コンテナを再起動する

「Container」の一覧で openai-edge-tts を選んで、「Action」→「Restart」。

Container Managerでopenai-edge-ttsのコンテナを再起動した直後

⑤ n8nで、失敗したところからやり直す

n8nの実行の画面で、失敗した実行を開いて、右上のくるっと回る矢印 →「Retry with original workflow」。失敗したところ(音声づくり)からやり直してくれます。

途中で「Production Checklist」というポップアップが出てきたんですが、これはn8nのおすすめの案内でした。中の「Enable MCP access」は、外からn8nを操作できる入口が1つ増えるだけなので、使わないならオンにしなくて大丈夫です。

n8nで失敗した実行をやり直して成功した画面

緑になって、3つの音声ができました♪( ´θ`)ノ

イヤホンで音声を聴いて、ほっとするスーツマン

コンテナを作り直すと元に戻ります
コンテナの中で直接入れたものなので、Container Managerでコンテナを作り直したり(Duplicate・リセット)、イメージを更新したりすると、edge-ttsは元の7.2.7に戻ります。そのときは、もう一度②〜④をやってください。

ついでに合言葉(APIキー)も変えた

openai-edge-ttsには、呼び出すときの合言葉(API_KEY)を決めておけます。私のは、作ったときの試し用の簡単な合言葉のままだったので、この機会に変えました。

家の中とTailscale(自分の機器だけのネットワーク)からしか届かない場所なので急ぎではなかったんですが、気づいたときに直しておくのがよさそうです。

Container Managerの「Settings」では変えられない

コンテナを止めて「Settings」を開いてみると、変えられるのは名前とメモリ・CPUだけでした。

Container ManagerのSettings。名前とメモリ・CPUしか変えられない

上の案内にあるとおり、環境変数(API_KEYなど)を変えるには、「Duplicate」(複製)で作り直します。

「Duplicate」で、API_KEYだけ変えて作り直す

  1. 古いコンテナを止める(Action → Stop)
  2. 選んだまま「Duplicate」→ 途中の「Environment」で、API_KEYの値だけを新しい合言葉に変える(ポートの5050などはそのまま)
  3. 新しいコンテナが動き出したらOK
Duplicateで作り直した新しいコンテナが動いている。古いほうは止まっている

⚠️ 作り直したコンテナは、イメージから作られるので、edge-ttsが7.2.7に戻ります。新しいコンテナで、もう一度③と④をやります。

合言葉は、パスワード管理アプリで作りました(英字と数字だけ・32文字以上)。記号が入っていると、設定のときに崩れることがあるので。

n8nは、合言葉を直接書かずに「保管庫」に入れる

n8nのほうは、HTTP Requestの設定に合言葉を直接書いていたので、これも見直しました。

n8nの「Credential」(認証情報の保管庫)で「Header Auth」を作り、NameにAuthorization、ValueにBearer +合言葉を入れておきます。

n8nのHeader Authの保管庫(合言葉は伏せ字)

HTTP Requestのほうは、「Authentication」を「Generic Credential Type」→「Header Auth」にして、この保管庫を選ぶだけ。設定の画面やエクスポートしたファイルに合言葉が出なくなるので、こっちのほうが安心です。

最後に、自分で書いた短い英文で試して、3つの音声ができたのを確かめました。確認できたら、止めておいた古いコンテナは削除します。

Edge TTSを使うときの注意(商用利用)

あ、もう1つ。

Edge TTSは、Microsoft Edgeの「音声で読み上げ」の機能を、公式ではない方法で使わせてもらっている仕組みです。今回のように、Microsoftの都合で急に使えなくなることもあります。

それと、Googleの検索候補に「edge-tts 商用利用」と出てくるくらい気になる人が多いみたいなんですが、MicrosoftのQ&Aでは「Azure(Microsoftの有料のサービス)の契約なしに商用で使うと、規約違反になりうる」という回答が出ていました。

なので私は、作った音声は自分の勉強用だけにしています。ブログやYouTubeで音声を使いたい方は、公式のAzure AI Speechを検討してみてください。

まとめ

edge-ttsの403エラーの直し方
・原因はMicrosoftの10月の変更。古いedge-tts(7.2.x)は403で断られる
・edge-ttsを7.3.0以上(今回は7.3.1)にすれば直る
・Synologyのopenai-edge-ttsは、イメージを新しくしても中が古いまま → コンテナの中でpipで入れ替える
・コンテナを作り直すと元に戻るので、そのたびに入れ直す
・合言葉を変えるときは「Duplicate」で作り直す。n8nは保管庫(Header Auth)で

エラーが出たとき、何がいけないのかは、私にはちょっとわかりません。でも、AIがn8nもコンテナの中も一緒に見てくれるので、自然な言葉で頼むだけで直せるようになったのは、ほんとに心強いなと思っています。

同じ「edge-tts 403」で困っている方の参考になればうれしいです。

この仕組みで作っているシャドーイング教材の話は、こちらです。

n8nで英語シャドーイング教材を自動生成してAnkiにストックする仕組みを作る【PART1】
n8nで英語シャドーイング教材を自動生成してAnkiにストックする仕組みを作る──TTS3回詰まり編【PART2】

☕ この記事、お役に立てましたか?

35歳から8年間、英語学習を続けてきた記録をこのブログに書いています。
よかったら応援していただけると、次の記事を書く励みになります!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

ABOUT US
スーツマン
教育・製造・営業と3業界を経験したサラリーマン。35歳から英語学習をスタートし、8年間の継続で英検準1級を取得。VERSANT59点。仕事術・Excel・AI活用・英語・カメラについて、実体験をもとに発信しています。▶ 詳しいプロフィールはこちら