Googleフォームの送信内容をGoogle Apps Script(GAS)経由でDiscordへ通知する仕組みは非常に便利ですが、最近になって突然「429 Too Many Requests」エラーが発生するケースが増えています。特に以前は正常に動いていたのに、急にWebhook通知が失敗する場合は、Discord側の仕様変更やWebhook制限が関係している可能性があります。この記事では、GASでDiscord通知時に429エラーが出る原因と、GASだけで完結できる実践的な対策について解説します。
429エラーとは何か
429エラーは「リクエストが多すぎる」という意味のHTTPステータスです。DiscordではWebhookに対して一定時間内に送信できる回数が制限されています。
通常は短時間に大量送信した場合に発生しますが、最近ではリクエスト数が少なくても429が出るケースがあります。
特にGASでは、以下のような条件でDiscord側に怪しいアクセスと判定されることがあります。
- 同一Webhookへの長期間利用
- 短時間の連続実行
- GAS特有のUser-Agent
- Discord側のスパム判定強化
Webhookを貼り直すと動く理由
Webhook URLを毎回貼り直すと正常動作するのは、Discord側でWebhook単位の制限やフラグ管理が行われている可能性が高いためです。
つまり、Webhook自体が一時的に制限状態になっているものの、新しいWebhookとして認識されることで解除されている状態です。
これはコードの問題というより、Discord側のレート制限や検知仕様の影響であることが多いです。
GASのみでできる429対策
送信前に待機時間を入れる
もっとも簡単で効果がある方法です。
Utilities.sleep(3000);
Discord送信前に3秒程度待機させることで、429を回避できる場合があります。
muteHttpExceptionsを使う
エラー内容を取得できるようにします。
UrlFetchApp.fetch(url, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(data),
muteHttpExceptions: true
});
これによりDiscord側のレスポンス内容を確認しやすくなります。
retry_afterを利用する
Discordの429レスポンスにはretry_afterが含まれることがあります。
これを利用して自動再送する方法もあります。
if(response.getResponseCode() == 429){
Utilities.sleep(5000);
}
フォーム送信トリガーの重複も確認する
GASでは知らない間にトリガーが複数登録されているケースがあります。
例えばフォーム送信1回に対して、実際には同じコードが2回以上動いていることがあります。
Apps Scriptの「トリガー」画面から以下を確認してください。
- 同じ関数が複数登録されていないか
- 古いプロジェクトのトリガーが残っていないか
- フォーム側とスプレッドシート側の両方にトリガーがないか
これだけで改善するケースもあります。
Discord側仕様変更の影響も大きい
2024年後半以降、DiscordではWebhookの制限が以前より厳しくなったという報告が増えています。
特に無料環境のBotやWebhookはスパム対策の影響を受けやすく、以前のコードが突然動かなくなるケースがあります。
そのため、古い解説サイトのコードをそのまま利用すると現在の仕様に合わない場合があります。
参考として、GoogleフォームとDiscord通知の基本構成については[参照]のような記事がありますが、現在は429対策を追加する必要があるケースが増えています。
おすすめの安定化構成
| 対策 | 効果 |
|---|---|
| Utilities.sleep | 短時間連投回避 |
| retry_after対応 | 自動再送可能 |
| トリガー整理 | 重複送信防止 |
| Webhook再発行 | 一時制限解除 |
| ログ出力 | 原因特定しやすい |
まとめ
GASからDiscordへ通知する際の429エラーは、単純な送信回数だけでなく、Discord側のレート制限やWebhook検知仕様が関係していることがあります。
特に「Webhookを貼り直すと動く」という症状は、Webhook単位で制限されている可能性が高いです。
GASだけでも、sleep追加・retry_after対応・トリガー整理などを行うことで改善するケースは多くあります。まずは送信間隔を空ける対策とトリガー確認から試すのがおすすめです。


コメント