12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Googleフォーム送信後にメール送信とカレンダーイベントに招待を自動化する

Last updated at Posted at 2018-02-20

社内イベントを開催することがあり、申し込みや参加者の管理の方法を考えていました。
社内はG Suiteが導入されていて、イベントへの申し込みはGoogleフォームで、申し込みしてもらった人には手動でスケジュール登録してもらったり、イベントに招待したりしていました。

手動でスケジュール登録は一括で管理できず、イベントに一人一人招待するのは面倒だったので、申し込みしてくれた人に自動でカレンダーのイベントに招待と、その旨をメールで送るようにしたくて、試してみました。

##Googleフォーム作成
まずは、参加申し込み用のGoogleフォームを作成しました。
参考:Googleフォームでアンケートを作ってみた

名前を入力して、送信ボタンを押すだけの簡単なものを用意しました。
スクリーンショット 2018-02-20 9.49.19.png

カレンダーに招待するためにメールアドレスが必要なので、メールアドレスを収集する設定にします。
スクリーンショット_2018-02-20_9_50_26.png

Googleフォームでする設定は終わりです。
Googleフォームのスクリプトからメールアドレスを取得してカレンダーのイベントへの招待とメール送信ができないかなぁと思ったのですが、やり方がわからず。撃沈。

##スプレッドシート作成
Googleフォームのスクリプトではできなかったので、今回はフォームと連携しているスプレッドシートを作成して、そこにスクリプトを作成します。「スプレットシートの作成」を押します。
スクリーンショット_2018-02-20_9_59_40.png

スプレッドシートを新規に作成するか、既存のものを使うか聞かれますが、私は新規にスプレッドシートが必要だったので、「新しいスプレッドシートを作成」を選び、作成しました。

##スクリプトを作成
作成されたスプレッドシートを開くと、タイムスタンプ、メールアドレス、名前の列があるスプレッドシートが完成しています。スプレッドシートのスクリプトエディタを開きます。
スクリーンショット_2018-02-20_10_07_17.png

コード.gsに、コードを書きます。
スクリーンショット_2018-02-20_10_09_15.png

コード.gs
function addEvtSendMail() {
  // 変更しましょう ↓↓↓
  //特定のIDメールアドレスをセット
  var cal = CalendarApp.getCalendarById('***@google.com');
    
  //イベント開催日をセット
  var date = 'yyyy/mm/dd'
  
  //カレンダーのイベント名をセット(メールのタイトルにも使います)
  var myEvtTitle = 'カレンダーのイベント名'
  
  //メールに記載する連絡先をセット
  var strFrom = '質問などの問い合わせ先'
  
  //メールの差出人をセット
  var strSender = '差出人署名'
  // 変更しましょう ↑↑↑
  
  //開催日のイベントを取得
  var event = cal.getEventsForDay(new Date(date)); 
  
  //アクティブスプレッドシート
  var Sheet = SpreadsheetApp.getActiveSpreadsheet();
  
  //スプレッドシートのアクティブシート
  var sh = Sheet.getActiveSheet();
  
  //スプレッドシートの最終行
  var i = sh.getLastRow();
  
  //スプレッドシートの追加されたメールアドレス
  var mail = sh.getRange(i, 2).getValue();
  
  //スプレッドシートの追加された参加者名
  var strTo = sh.getRange(i, 3).getValue();
  
  //メールタイトルにイベント名をセット
  var strSubject = myEvtTitle;
  
  //メール本文を組み立て 「\n」が改行
  var strBody = strTo
  + '\n' + 'この度は' + myEvtTitle + 'に申し込みいただき、ありがとうございます。' + '\n'
  + '何か不明点がありましたら、' + strFrom + 'までご連絡ください。' + '\n\n'
  + strSender;
  
  for each(var evt in event){    

    //myEvtTitleに入れたタイトルと一致するイベントで探す
    if(evt.getTitle() == myEvtTitle){
  
      //イベントにゲストを招待する
      evt.addGuest(mail);      
    
      //メールを送信する
      MailApp.sendEmail(
        mail,
        strSubject,
        strBody
      );
    }
  } 
}



コードを入力して、任意の値を設定したら、保存します。
スクリーンショット_2018-02-20_10_16_57.png

プロジェクト名は適当に設定します。

##スクリプトをテスト
できたら、テストデータを作って動きを確認します。
はじめに、招待するイベントをカレンダーに作成します。
スクリーンショット 2018-02-19 14.50.42.png

スプレッドシートにテストデータを入力します。メールアドレスは実際にメールがいくので、受け取れるメールアドレスを設定しましょう。
スクリーンショット 2018-02-19 14.37.12.png

スクリプトエディタにある三角ボタンを押します。
スクリーンショット_2018-02-20_10_23_44.png

承認が求められるので、確認して許可をします。
スクリーンショット 2018-02-19 13.22.17.png

メールが送信されているか確認します。
スクリーンショット 2018-02-20 10.23.15.png

カレンダーのゲストにテストデータのメールアドレスが追加されているか確認します。
スクリーンショット_2018-02-20_15_17_03.png

ここまでできれば、ゴールはもうすぐ:grinning:

##動作確認
今度はGoogleフォームに入力するところからテストをします。

準備をします。Googleフォームの送信ボタンを押された時にスクリプトが動くようにトリガーの設定をします。スクリプトエディタの時計のボタンを押します。
スクリーンショット_2018-02-20_10_23_44.png

まだトリガーが未設定の場合、青文字のアンダーバーの部分を押します。
スクリーンショット_2018-02-20_10_27_21.png

フォームが送信された際に実行するように、トリガーを設定します。

実行 イベント型 時間
addEvtSendMail スプレッドシートから フォーム送信時

スクリーンショット_2018-02-20_14_25_14.png

トリガーの設定ができたら、最後にGoogleフォームから名前を入力して送信ボタンを押します。メールの送信とカレンダーのイベントへの招待が確認できれば、「申し込みしてくれた人に自動でカレンダーのイベントに招待と、その旨をメールで送る」ようにできました。

##とりあえず
心残りというか、できなかったこと。

  1. イベントの出欠返信できるメールを送れなかった。(ただのお知らせメールのみ)
  2. イベントを開くURLをメールに添付できなかった。
  3. GoogleカレンダーのイベントをIDで探せなかった。(ID取れれば直接イベント開けたかも)

上記のとりあえずの応急処置として、送信するメールの中に、Googleカレンダーのイベント当日の予定を開くURLを書くことで対応しました。

コード.gs
function addEvtMail() {
.
.
.

  //メールタイトルにイベント名をセット
  var strSubject = myEvtTitle;
  
  //メール本文を組み立て 「\n」が改行
  var strBody = strTo
  + '\n' + 'この度は' + myEvtTitle + 'に申し込みいただき、ありがとうございます。' + '\n'

  //追加
  + 'カレンダーのイベントに招待しておりますので、ご確認をお願いします。'
  + '\n' + 'https://calendar.google.com/calendar/r/day/' + date + '\n\n'
  //追加

  + '何か不明点がありましたら、' + strFrom + 'までご連絡ください。' + '\n\n'
  + strSender;
  
  for each(var evt in event){    
 
.
.
.

}

申し込みしてくれた人に送るメールにURLが添付されます。URLを押すとGoogleカレンダーのイベントの日が開かれます。
スクリーンショット_2018-02-20_11_32_08.png

あと、変数のセットを直書きではなく、Googleフォームから引き渡したりして、エラー処理とか書きたして、そして使ってみて改善箇所は少しづつ直していこうかと思います。

参考:
初心者でも簡単!Google Apps ScriptでGmailを操作してメールを送る方法
最終行を取得するGASスクリプト

12
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?