問題
Google Apps Script から直接 Discord Webhook に投稿しようとしていた。
UrlFetchApp.fetch(
DISCORD_WEBHOOK_URL,
{
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload),
});
しかし、実行すると Discord 側で以下のようなエラーになった。
Discord webhook error 429: error code: 1015
webhook は一回しか叩いていないのにもかかわらずレート制限に引っかかった。
原因
調べてみると、GAS の UrlFetchApp は Google の共有IPからリクエストされるため、Discord / Cloudflare 側の制限に巻き込まれることがあるらしい。
解決法
解決方法は単純で、GAS から直接 Discord を叩くのではなく、別な物を経由するようにした。
今回は GitHub Actions を使った。
このようにすればうまく動いた。
利用規約的に大丈夫なのか
GitHub API 系列は、レート制限を超えるために複数のトークンを使い分けたり、スパム目的で利用したりすることは禁止されている。
今回の構成は、Discord に大量投稿するためのものではなく、GAS から Discord Webhook へ直接送信した際に発生した不安定さを避けるための中継である。
実際の送信頻度はとても低く、Discord への投稿も一回だけ送信している。
したがって、レート制限を意図的に突破する目的ではなく、通常の自動通知として利用している範囲だと考えている。
ただし、利用規約や運用上の解釈については自分だけでは判断しきれない部分もあるため、この構成が問題ないかどうかは一度有識者にも確認しておきたい。