前提
GASにて、スプレッドシートのデータを参照し、Twitterに自動投稿するBOTを製造しました。
数日間は正常に動作するのですが、突然アカウントアクセス権限がなくなり、ツイートが行われなくなってしまいます。
以下のような運用としております。
- 1日1回毎日、深夜1時から2時の間に、関数「createTrigger()」を自動実行し、関数「schedulePost()」を実行するトリガーをスプレッドシートの設定された値の時間単位で生成。このトリガーはGASのインストーラブルトリガーで設定。
- 関数「schedulePost()」が実行されると、関数「executeTweet()」を実行するトリガーが、次の「schedulePost()」実行時間+ランダム生成される分(次のschedulePost()実行される時間未満の値)で生成される。
- 関数「executeTweet()」が実行されると、実際にツイートが実行される。ツイート内容はスプレッドシートに記載された文言をランダムで取得する。GoogleDriveに格納した画像を付けてツイートする場合もある。
具体例としましては、以下のようになります。
- スプレッドシートに指定された値 = 1 の場合
- 深夜1時から2時の間に、関数「createTrigger()」を実行。1時間ごとに「schedulePost()」を実行するトリガーを生成
- 「schedulePost()」の実行時間が2時30分の場合、2時30分から3時29分の間のいずれかの時分で実行される「executeTweet()」が生成される。
- 「executeTweet()」が実行されると、スプレッドシートからランダムでメッセージと画像のパスを取得し、ツイートを実行し、スプレッドシートにツイート内容とツイート時刻をログとして書き込む。
- 以降、「schedulePost()」が毎時間繰り返される。
発生している問題・エラーメッセージ
この運用を開始して4日後、2022年12月2日に突然ツイートがされなくなりました。
実行ログを確認したところ、9時14分30秒の時点でツイートが実行されており、10時5分45秒の時点で「schedulePost()」が実行され、11時3分25秒に「executeTweet()」のトリガーが生成されていましたが、
「executeTweet()」の実行が失敗しました。
Google Cloudのログを確認すると、以下のようなメッセージが表示されていました。
Authorization is required to perform that action.
確認すると、GASで製造したアプリケーションから、アカウントアクセス権限が外れてしまっており、実行ができなくなっていました。
そのため、GASスクリプトエディタにて「executeTweet()」を手動実行したところ、初回実行時に表示されるダイアログと同様のダイアログが開き、承認を求められました。
承認を行い、そのまま手動実行したところ、ツイートが実行されました。
その後、生成されているトリガーをすべて削除し、運用を再開しました。
すると、7日後である2022年12月9日に同様の事象が発生しました。
このときは、11時30分58秒にツイートが実行され、12時5分15秒の「schedulePost()」が実行され、12時33分31秒に「executeTweet()」のトリガーが生成されていましたが、ツイートが実行されていませんでした。
前回の対応と同様に、GASスクリプトエディタから手動実行して承認を行ったところ、正常に動作しました。
更に7日後である2022年12月16日に同様の事象がまたも発生しました。
このときは、14時50分07秒にツイートが実行され、15時31分48秒の「schedulePost()」実行時点で同様のエラーが発生していました。
現状はトリガーを再設定をすることで対応していますが、今後も同じ事象が発生することが予想されますが、ログを確認しても上記エラーのみが出力されているだけで、
アカウントアクセス権限が外れた原因の特定ができず、困っております。
つきまして、一度承認したGASアプリケーションからアカウントアクセス権限が外れるのはどのようなことが考えられるのか、ご教授いただけますでしょうか?
また、GASアプリケーションからアカウントアクセスが外れた原因をGoogle Cloudのログ等で確認することは可能なのでしょうか?
こちらで調べたところ、以下のようなことは認識しております。
- ソースコードの改修によってアカウントアクセスを行う処理が追加・変更された場合に再度承認が求められる。 ⇒ ソースコードの改修は行っていません。
- マルチアカウントで操作を行うと、アカウントアクセスの権限がはずれることがある。 ⇒ GASアプリケーションおよび、スプレッドシートの操作はオーナー権限のあるアカウントでしかアクセスは行っていません。
現在、以下の可能性を疑っておりますが、調査は難航しています。
- GASアプリケーションの処理時間、トリガーの実行回数、スプレッドシートの書き込み回数等の上限に引っかかっているのではないか? ⇒ 上限に引っかかった旨のログは一切出力されておらず、すぐに手動実行したところ正常に再開したので、可能性が低そう
- 同一のPCにて、TwitterBot運用のGoogleアカウントとは別のアカウントをテスト用に使用していることが影響しているか?
- GASアプリケーションのトリガー実行回数やスプレッドシートの書き込み回数等にしきい値が設けられており、一定回数に達すると権限が外れるのではないか?
試したこと
- 関数「createTrigger()」実行時、1時間ごとに「schedulePost()」のトリガーを生成する前に、「schedulePost()」および「executeTweet()」のトリガーは削除を行っております。
- 関数「schedulePost()」の実行時、「executeTweet()」のトリガーを生成する前に、「executeTweet()」のトリガーは削除を行っております。
- 画像が重い可能性も考え、ログおよびツイート内容を確認したところ、全パターンの画像はツイートされています。
補足情報(FW/ツールのバージョンなど)
GASライブラリとして、以下を使用しています。
- TwitterWebService (version 2)
- OAuth1 (version 18)
手掛かりがなく困っております。
どんな細かいことでも構いませんので、情報ありましたらよろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー