Skip to content

math-u-t/GoogleAutoSend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

目次

このプロジェクトについて

このプロジェクトは、Google Apps Script(以下GASとする)を使用したGoogleChat自動送信システムです。

質問と提案などはここでお願いします。

※使用、コードの修正などはMITライセンスを使用してください。

目的

標準のGoogleChatには、時間を指定してメッセージを送信する機能が存在しません。(標準機能では)

そのため、GAS を使用したチャット自動送信システムを作成しました。

関数の説明

send_Scheduled_Messages()

全ての関数は、主にこの関数を基本として動作しています。

この関数を1分ごとにトリガーで自動実行させることによって、スプレッドシートに保存された自動送信データを確認してメッセージを送信します。

仕組み

  1. データを縦に1行ずつ確認していき、確認メールを送信済みor送信済みでないことメッセージを送信する時間になったかを確認します。

  2. 送信時間になった場合、文章の一番最後に<hide>が含まれていたら、匿名として送信者のメールアドレスは非表示になります。

詳しくはこのページに書きました。

  1. すべての行を探索し終わったら実行を終了します。

ここで、スプレッドシートに保存されているデータはこの形式で保存されています。

Set_Error_message()

エラーメッセージを細かく場合分けした関数です。場合分けは以下の通りです。

状況 方法
送信文字数が4000文字以上の場合 送信内容が4000文字を超えています。送信内容を短くしてください。
送信予定時間が過去の場合 送信予定時間が過去(2分前より過去)です。送信予定時間は未来になるようにしてください。
送信予定時間が1ヶ月以上先の場合 送信予定時間が1か月以上先です。送信予定時間は1か月よりも最近にしてください。

処理が終了すると、スプレッドシートに確認メールを送信済みor送信済みフラグが保存されます。

追記 2025/07/07

Googleformの送信時に実行できるトリガーがあることとトリガーをプログラムで制御できることが分かったので、いつか修正します。

send_Error_Email(recipient, errorMessage)

エラーメッセージを送信するための、メッセージ設定関数です。

予約が不可能な場合の送信メッセージの例

タイトル:予約できませんでした
送信されるメッセージ
詳細:<送信が不可能な理由>
もう一度予約を行ってください。

このメッセージは自動送信されています。
返信しないでください。

create_Email_Content(data, userCode, scheduledTime)

エラーメッセージを送信する関数です。

予約が可能な場合の送信メッセージ

タイトル:自動送信予約の詳細
送信されるメッセージ
予約者:<メールアドレス>
送信内容:<送信する予定の内容>
送信予定時間:<送信する予定の時間>
webhookURL:<送信するWebhookURL>
予約コード:<未完成なため、現在特に機能はありません。送信取り消し機能などをつける予定です。>
予約が完了しました。

ご利用ありがとうございます。
このメッセージは自動で送信されています。
返信しないでください。

format_Date(data)

日付を変換する関数です。

dataを入力すると、

YYYY-MM-DD HH:mm:ss

の形でデータが返されます。

generate_Code(length)

lengthの長さのコードを生成する関数です。

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789

の中から、指定された文字の長さのコードを返します。

generate_Code(10)の時点で839,299,365,868,340,224通り(およそ839京)あります。

そのため、よほどの事が起こらない限り、2つは一致しないと思います。

sendEmailWithFrom(to, subject, body)

送信関数の一般化関数です。

対応する変数の一覧は以下の通りです。

to subject body
メッセージの送信先を表します。完全な形式で書いてください。例:[email protected] メッセージのタイトル(件名)を表します。 送信するメッセージの本文を表します。

2つ重要なことがあります。この先はしっかり読んでください。

スクリプトプロパティについて

スクリプトプロパティの「sendemail」に送信するメールアドレスを設定してください。

スクリプトプロパティはの設定は、ギヤマークの「プロジェクトの設定」の一番下にあります。

例えば、[email protected]から確認メッセージを送信したい場合は以下のように設定してください。

プロパティ
sendemail [email protected]

スパムについて

この関数は、使い方によっては非常に危険な関数です。

GoogleWorkspaceには書いていなかったのですが、連続した1人のユーザーにメッセージを送信することによって、送信したアカウントがbanされます。(されかけました)

実験では、25回連続で送信したところでbanされました。

これらの理由は、Gmailのスパム防止にあると考えています。

これらの解決方法として以下の案があります。(実装していません)

  • スプレッドシートに送信済みのメールアドレスを保存しておいて、それらには限度に達したら送信しなくする。

運用方法

運用方法は非常に簡単です。

以下の方法で全く同じものが作成できます。

作成するフォーム

  1. 「このフォームでは、すべての回答者からのメールが自動的に収集されます。」を選択します。

  2. 1つめの質問に、「責任は、ユーザーにあります」と入力します。

  3. 2つめの質問に、送信する内容を入力させるための質問を作成します。

  4. 3つめの質問に、送信する時間を入力させるための質問を作成します。

  5. 4つめの質問に、送信するWebhookを入力させるための質問を作成します。

GASの連携

  1. スプレッドシートとフォームを連携させます。

  2. トリガー「1分に1度実行」でsend_Scheduled_Messages()を選択します。

  3. トリガーを承認することで使用できます。

これらの作成したフォームに、適切な回答をすることで指定したGoogleChatに指定した時間でwebhookから自動送信することができます。

今後の予定

まだまだこのプロジェクトは、開発途中なのでバグも追加したい機能もかなりあります。

しかし、時間が取れないのでアイデアだけ書きます。

1. スパム送信被害防止機能の追加

現在、悪意があるユーザーが何度もフォームに回答することで、管理者をbanさせることが可能になっています。

これらの危険をなくすために以下の機能を追加します。

  • スプレッドシートに送信済みのメールアドレスを保存しておいて、それらには限度に達したら送信できなくする。

2. トリガーを使用して常時稼働を停止させる

現在、このプロジェクトは非常に非効率な方法(常時稼働)で動作しています。

1分間隔で実行すると、すぐにトリガー制限(実行回数の上限)に引っかかってしまいます。

そのため、フォーム送信時にトリガーを時間実行で設定したいと考えています。

About

GoogleAppsScriptでの自動送信システム

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published