質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

148閲覧

Pub/Subのpushサブスクリプションへのackが届かない

Aquamarine

総合スコア18

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

2クリップ

投稿2024/08/28 07:57

実現したいこと

Pub/SubのpushサブスクリプションをGASのdoPostで受けたい。
そして、適切に確認応答を完了させたい。

発生している問題・分からないこと

確認応答が完了させられていないらしく、リトライ処理が走り続けている。

エラーメッセージ

error

1Pub/SubのpushサブスクリプションをGASのdoPostで受けることができており、エラーは発生しておりません。 2以下2点から確認応答が完了していなさそうです。 3・リトライ処理が続いている 4・トピック>指標>サブスクリプション>確認応答メッセージ数が上位 5 件のサブスクリプションがデータなし 5

該当のソースコード

Apps

1function doPost(e) { 2 try { 3 var postData = e.postData.contents; 4 5 var timestamp = new Date(); 6 var logData = [timestamp, postData]; 7 8 var ss = SpreadsheetApp.openById("SpreadsheetId"); 9 var sh = ss.getSheetByName("シート1"); 10 sh.appendRow(logData); 11 12 return ContentService.createTextOutput("Webhook received and logged successfully.") 13 .setMimeType(ContentService.MimeType.TEXT); 14 15 } catch (error) { 16 Logger.log("Error: " + error.toString()); 17 18 return ContentService.createTextOutput("An error occurred: " + error.toString()) 19 .setMimeType(ContentService.MimeType.TEXT); 20 } 21}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

スクリプト実行時間、ackDeadlineSeconds、minimumBackoffの整合性確認。

  • ackDeadlineSeconds:30 seconds
  • minimumBackoff:30 seconds
  • maximumBackoff:600 seconds
  • 実行時間:0.6-2 seconds

=> 変化なし

デプロイ、バージョン、push送信先のURL確認
=> 変化なし

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決したので、置いておきます。
参考:https://github.com/tanaikech/taking-advantage-of-Web-Apps-with-google-apps-script

結論

結論としてはContentServiceの記述を削除することで解決できました。
またdoGet関数を実装することでも対応できそうです。(未検証)

修正前

Apps

1return ContentService.createTextOutput("Webhook received and logged successfully.") .setMimeType(ContentService.MimeType.TEXT);

修正後

Apps

1return;

事象

doPost関数でContentServiceを実装するとリダイレクト処理が走るようで、それに伴って以下のことが発生していました。

  1. GASのdoPostの仕様で302リダイレクトを返す
  2. pub/subが302を受け取ってGETリクエストに切り替える
  3. GASの仕様でGETリクエストにはdoGet関数が走る
  4. doGet実装してないのでコケる
  5. 応答がないのでリトライが走る

投稿2024/08/29 10:46

Aquamarine

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問