🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google Apps Script

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

Q&A

解決済

2回答

5107閲覧

Googleドキュメントを変更時にGmailに通知が来るようにしたい。

sahiro

総合スコア1

Google Apps Script

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

0グッド

0クリップ

投稿2021/01/24 12:08

前提・実現したいこと

Googleドキュメントを変更時にGmailに通知が来るようにしたい。
※Googleスプレッドシートでの「通知ルール⇒変更時」と同様のもの

以前はGoogleドキュメントにも、スプレッドシート同様「通知ルール」からの設定で内容変更時Gmailアドレスへメールで通知する機能があったように思います。
いつの間にか無くなってしまったので困っており、GASでどうにかならないかと思っています。
当方プログラマではなく、このサイトに書いてあるスクリプトをコピペしてなんとか動かすことが限界です。

試したこと

解決方法の検索はしてみたものの、なまじ昔はできただけに検索にもそちらが引っかかってしまったりして最新の解決方法は出てきませんでした。

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

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

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

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

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

guest

回答2

0

あまり需要がないので、やったことないですが、ドキュメントのトリガーには編集時や変更時がないので、時間トリガーを使ってやるしかなさそうです。

自分ならこうやるかなというアイディアベースですが、

  • DriveAppでファイルを取得、最終更新日時を取得
  • プロパティサービスを使って保管しておいた前回の更新日時と今回取得の更新日時が違ってたらメール発砲
  • 30分とか1時間毎のトリガーをセットする

更新時にメールが欲しいということは、あまり頻繁に更新されるファイルではないと思われるので、時間トリガーで十分かなと。ご参考までに。

もしかすると、他の回答者の方が違う手法を提示してくれたり、コードを書いてくれるかもしれませんので、すぐに解決にしない方がいいと思います。

投稿2021/01/26 00:07

sawa

総合スコア3002

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

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

退会済みユーザー

退会済みユーザー

2021/01/27 10:55 編集

sawa様が予想しておられる、 >>更新時にメールが欲しいという事は、あまり頻繁に更新されるファイルではないと思われる という点を踏まえて、私からもsahiro様に質問がございます。 このファイルは、オープン≒編集でしょうか? もしそうであれば、 ファイルが開かれた->スクリプト起動->Gmailに通知 という方法が取れると思います。 また、閲覧が頻繁だが、 通知にリアルタイム性が必要ない場合は、 ・元ファイルオープン ・gasでGmail送信&一時間後(もしくは指定の時間後)に閲覧用ファイルの内容を元ファイルの内容に変更するスクリプトのトリガー設定 ・元ファイルをオープンした人間が元ファイルを指定時間内に編集。 ・時間指定したスクリプトが起動して閲覧用ファイルの内容が元ファイルに切り替わる のようなやり方が取れると思いました。 Gmailで更新通知を送信するにあたり、 その通知をする目的と、 通知頻度や閲覧頻度、 もしくはファイルの使用目的等を教えていただければと思いますが、 いかがでしょうか?
sahiro

2021/01/27 12:44 編集

sawa様 akirayonaha様 ご回答頂きありがとうございます。 通知目的としては不定期で書き込まれる報告があり、毎日更新があるかチェックする手間を省きたいと思っています。二度手間になるため書き込む側はメールやコメントなどで更新を報告する義務はありません。 報告の更新頻度はだいたい週に1,2回程度です。 基本的にはオープン≒編集です。
guest

0

ベストアンサー

回答が遅くなりました。

通知目的としては不定期で書き込まれる報告があり、毎日更新があるかチェックする手間を省きたいと 思っています。二度手間になるため書き込む側はメールやコメントなどで更新を報告する義務はありません。

報告の更新頻度はだいたい週に1,2回程度です。
基本的にはオープン≒編集です。

という事なので、以下の単純なスクリプトはいかがでしょうか?

function onEdit(e) { GmailApp.sendEmail("me@gmail.com", "題名開かれたよ", "本文ファイルが開かれましたよ。"); }

ファイルのオープン時にme@gmail.com宛にメッセージが届きます。

onEdit(e)
という関数名は、シンプリトリガーとして、
自動でオープン時に起動されます。

GmailApp.sendEmail("送信先アドレス","題名","メール本文")

で、メールが送信されます。

勝手な想像で、
ファイルが開かれたことを30分後に知らせられたら、
よりやりたいことに近いのではなかろうかと予想して、
以下のようなコードも提案してみます。

function onEdit(e) { DeleteTrigger("sendEmail"); let nextTime = new Date(); nextTime.setMinutes(nextTime.getMinutes() + 30); console.log(nextTime); ScriptApp.newTrigger("sendEmail").timeBased().at(nextTime).create(); } function sendEmail() { GmailApp.sendEmail("akira.yonaha@gmail.com", "開かれたよ。", "ファイルが開かれましたよ。"); } function DeleteTrigger(functionName) { const triggers = ScriptApp.getProjectTriggers(); triggers.filter(function (trigger) { return trigger.getHandlerFunction() == functionName; }).forEach(function (trigger) { ScriptApp.deleteTrigger(trigger); }); return; }

メールを送信する関数を、
ファイルが開かれた30分後に起動する内容でございます。
スクリプトの流れとして、

ファイルが開かれたら、
・以前に作成したトリガーを消す事
・30分後に起動させるトリガーを作成する。
一旦終了。

30分後、作成されたトリガーが起動
・メールを送信する。
終了

となっております。

ファイルが30分以内に何回か開かれたとしても、
最後のファイルオープンから30分後にしか、
メールが送信されないはずですが、
そこらへんは、えいやでやって、まぁ良いやで済ませています。

私からの提案は以上となります。

投稿2021/02/02 13:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

sahiro

2021/02/05 15:27

お礼が遅れてすみません、ありがとうございます! 教えて頂いた解決策でうまくいきました。 コードを載せていただいたのもすごく助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問