自宅のNAS(Synology)で、英語のシャドーイング教材を自動で作る仕組みを動かしています。
英語のニュースを入れると、AIが要約して、アメリカ・イギリス・オーストラリアの3つのアクセントで読み上げた音声つきのAnkiカードにしてくれる、というものです。
その「読み上げ」を担当しているのが、Edge TTSです。Synologyのコンテナ(openai-edge-tts)として動かしています。
ところが、半年ぶりくらいに使ってみたら、音声だけ作れなくなっていました。エラーは403。
調べてみると、2026年10月から世界中で同じエラーが出ていて、原因はMicrosoft側の変更でした。
しかも、Synologyのコンテナの場合、イメージを新しくしても直らないという、ちょっとクセのある状態だったので、直し方をまとめておきます。

この記事でわかること
・edge-ttsで出る「403, Invalid response status」の原因
・Synologyのopenai-edge-ttsで、イメージ更新では直らないときの直し方
・コンテナの中でedge-ttsを7.3.1にする手順(ハッシュつきで安全に)
・ついでにやった、合言葉(APIキー)の変え方
edge-ttsの403エラーの症状
音声を作っているのは、n8n(自動化のツール)からEdge TTSのコンテナを呼び出す部分です。n8nの実行の記録を見ると、そこだけ赤くなって止まっていました。

エラーの中身はこんな感じです。
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
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:ほかの部品には触らない、という意味です

Successfully installed edge-tts-7.3.1と出れば成功です。黄色の「rootで動かしている」という注意と、「pipの新しい版があります」というお知らせは、気にしなくて大丈夫です。
④ コンテナを再起動する
「Container」の一覧で openai-edge-tts を選んで、「Action」→「Restart」。

⑤ n8nで、失敗したところからやり直す
n8nの実行の画面で、失敗した実行を開いて、右上のくるっと回る矢印 →「Retry with original workflow」。失敗したところ(音声づくり)からやり直してくれます。
途中で「Production Checklist」というポップアップが出てきたんですが、これはn8nのおすすめの案内でした。中の「Enable MCP access」は、外からn8nを操作できる入口が1つ増えるだけなので、使わないならオンにしなくて大丈夫です。

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

コンテナを作り直すと元に戻ります
コンテナの中で直接入れたものなので、Container Managerでコンテナを作り直したり(Duplicate・リセット)、イメージを更新したりすると、edge-ttsは元の7.2.7に戻ります。そのときは、もう一度②〜④をやってください。
ついでに合言葉(APIキー)も変えた
openai-edge-ttsには、呼び出すときの合言葉(API_KEY)を決めておけます。私のは、作ったときの試し用の簡単な合言葉のままだったので、この機会に変えました。
家の中とTailscale(自分の機器だけのネットワーク)からしか届かない場所なので急ぎではなかったんですが、気づいたときに直しておくのがよさそうです。
Container Managerの「Settings」では変えられない
コンテナを止めて「Settings」を開いてみると、変えられるのは名前とメモリ・CPUだけでした。

上の案内にあるとおり、環境変数(API_KEYなど)を変えるには、「Duplicate」(複製)で作り直します。
「Duplicate」で、API_KEYだけ変えて作り直す
- 古いコンテナを止める(Action → Stop)
- 選んだまま「Duplicate」→ 途中の「Environment」で、
API_KEYの値だけを新しい合言葉に変える(ポートの5050などはそのまま) - 新しいコンテナが動き出したらOK

⚠️ 作り直したコンテナは、イメージから作られるので、edge-ttsが7.2.7に戻ります。新しいコンテナで、もう一度③と④をやります。
合言葉は、パスワード管理アプリで作りました(英字と数字だけ・32文字以上)。記号が入っていると、設定のときに崩れることがあるので。
n8nは、合言葉を直接書かずに「保管庫」に入れる
n8nのほうは、HTTP Requestの設定に合言葉を直接書いていたので、これも見直しました。
n8nの「Credential」(認証情報の保管庫)で「Header Auth」を作り、NameにAuthorization、ValueにBearer +合言葉を入れておきます。

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」で困っている方の参考になればうれしいです。
この仕組みで作っているシャドーイング教材の話は、こちらです。






















コメントを残す