LINE WebhookをGASで受け取る時の302エラー問題と解決方法
2025年11月13日
問題の発生
LINE公式アカウントのWebhook機能を使って、Google Apps Script(GAS)で自動応答を作ろうとした時に遭遇した問題です。
LINE Messaging APIのWebhookは、イベントが発生すると指定したURLにPOSTリクエストを送信します。 このURLにGASのウェブアプリURLを設定すると、302 Foundエラーが発生してしまいます。
なぜ302エラーが発生するのか
GASのウェブアプリをデプロイすると、URLは以下のような形式になります:
https://script.google.com/macros/s/SCRIPT_ID/execこのURLにアクセスすると、実際には以下のようなURLにリダイレクト(302)されます:
https://script.googleusercontent.com/...問題は、LINE Webhookがリダイレクトをサポートしていないことです。 302レスポンスが返ってきた時点でエラーと判定されてしまいます。
curlでの検証
この問題を切り分けるために、curlコマンドでテストしました:
curl -L \
-H "Content-Type: application/json" \
-d '{
"events": [{
"type": "message",
"replyToken": "dummyToken",
"source": {"userId": "U1234567890abcdef"},
"message": {"type": "text", "text": "テスト"}
}]
}' \
"https://script.google.com/macros/s/.../exec"-Lオプションを付けることでリダイレクトを追従できますが、 LINEのWebhookシステム自体がリダイレクトに対応していないため、この方法は使えません。
解決方法
この問題を解決するために、中継サーバーを立てる方法があります。
中継の仕組み
- LINEからWebhookを中継サーバーで受け取る
- 中継サーバーがすぐに200 OKを返す
- 中継サーバーがリダイレクトに対応した方法でGASにリクエストを転送
- GASで処理を実行
この中継サーバーの役割を果たすのが、Webhook Proxy Serviceです。
Webhook Proxy Serviceの使い方
1. API Keyを取得
ダッシュボードからGoogleアカウントでログインし、API Keyを取得します。
2. GASのURLを用意
通常通りGASでdoPost関数を作成し、ウェブアプリとしてデプロイします。
3. LINE Webhookに設定
以下の形式でURLを設定:
https://webhook-proxy.com?url=YOUR_GAS_URL&key=YOUR_API_KEY実際のGASコード例
function doPost(e) {
try {
const json = JSON.parse(e.postData.contents);
const events = json.events || [];
const sheet = SpreadsheetApp
.getActiveSpreadsheet()
.getSheetByName("シート1");
events.forEach(event => {
if (event.type === "message") {
const userId = event.source.userId;
const text = event.message.text;
const timestamp = new Date();
// スプレッドシートに記録
sheet.appendRow([timestamp, userId, text]);
}
});
return ContentService
.createTextOutput(JSON.stringify({ success: true }))
.setMimeType(ContentService.MimeType.JSON);
} catch (error) {
return ContentService
.createTextOutput(JSON.stringify({
success: false,
error: error.toString()
}))
.setMimeType(ContentService.MimeType.JSON);
}
}まとめ
- GASのURLは302リダイレクトを返すため、LINE Webhookで直接使えない
- 中継サーバーを挟むことで問題を解決できる
- Webhook Proxy Serviceを使えば簡単にセットアップ可能
- 月1000回まで無料で利用できる