[GAS]Gmailに来たZoomミーティング予定をGoogleカレンダーに自動で登録

GAS

Google Apps Scriptを使い、Gmailに送られてきたZoomミーティングの予定をGoogleカレンダーに登録する方法です。スクリプトが分からない初心者でも簡単にできるよう丁寧に解説していきます。

予定を忘れがちな人

Gmailに送られてくるZoomミーティングの日付とリンクが入ったメールをGoogleカレンダーに自動で登録できますか?

シップ

GASを使えば登録できますよ。ZoomとGoogleカレンダーを連携しておけばZoomからミーティングにボタンワンクリックで参加できます。

概要

Zoomのミーティング日時やリンクがメールで送られてくる場合、自分でカレンダーに登録するのが手間なので、自動で予定をカレンダーに登録出来たら便利だと思いスクリプトを作成しました。

また、ZoomとGoogleカレンダーを連携させておくとZoomアプリにも予定が表示されますが、その予定にZoomリンクが登録されていると「参加」ボタンが表示されクリックするとそのミーティングに参加できるようになるので、毎回埋もれがちなメールから探さなくてよくなります。

使用例

こんなときに
  • GmailにZoomの招待メールが送られてくる場合に使えます

Google Apps Scriptを利用するため、すべて無料で実現できます。

必要な準備
  • ZoomとGoogleカレンダーの連携
    zoom.usにログインして、プロフィールの編集→「カレンダーと連絡先の統合」)

使用方法

Googleドライブから新規Google Apps Scriptを追加

  1. GoogleドライブをPCで開き、「+新規」ボタンをクリックし、メニューから「その他」→「Google Apps Script」を選択します。すると新しいタブで「無題のプロジェクト」という名前で新しいプロジェクトが作成されます。
  2. コード.gsを選択し(最初から選択されています)最初から入力されているコードは消して、次のコードをコピペします。
function mailCheck(){
  const SEARCH_TERM = 'is:unread zoom.us/j/';
  const threads = GmailApp.search(SEARCH_TERM, 0, 30);
  const messages = GmailApp.getMessagesForThreads(threads);
  const regexpUrl = RegExp('https:\/\/[^.]+\.zoom\.us\/j\/.*', 'gi');

  for(var i=0; i < messages.length;i++){
    thread = messages[i];
    for(var j=0; j < thread.length; j++){
      message = thread[j];
      if(message.isUnread() && !message.isStarred()){
        const plainBody = message.getPlainBody();
        let title = message.getSubject();
        const resultTitle = plainBody.match(/トピック:\s(.*)/i);
        if (resultTitle != null) {
          title = resultTitle[1];
        }
        title = title.replace(/[0-9]{1,2}\/[0-9]{1,2}\(.\)[0-9]{1,2}:[0-9]{1,2}/,"");

        const resultUrl = plainBody.match(regexpUrl);
        if (resultUrl == null) {
          continue;
        }
        const zoomUrl = resultUrl[0];

        const resultTime = plainBody.match(/([0-9]{4})年([0-9]{1,2})月([0-9]{1,2})日\s([0-9]{1,2}):([0-9]{1,2})\s*(PM|AM)?/i);
        if (resultTime == null) {
          continue;
        }else{
          const year = parseInt(resultTime[1]);
          const month = parseInt(resultTime[2]);
          const dayOfMonth = parseInt(resultTime[3]);
          const startTimeHour = resultTime[6] == "PM" ? parseInt(resultTime[4]) + 12 : parseInt(resultTime[4]);
          const startTimeMin = parseInt(resultTime[5]);
          const startTime = new Date(year, month - 1, dayOfMonth, startTimeHour, startTimeMin, 0);
          const endTime = new Date(year, month - 1, dayOfMonth, startTimeHour + 1, startTimeMin, 0);
          createEvent(title, zoomUrl, startTime, endTime);
          message.star();
        }
      }
    }
  }
}

function createEvent(title, location, startTime, endTime) {
  const calendar = CalendarApp.getDefaultCalendar();
  const option = {
    location: location,
  }
  calendar.createEvent(title, startTime, endTime, option);
}

「無題のプロジェクト」という名前をわかりやすい名前に変更し、「プロジェクトを保存」ボタンをクリックしてスクリプトを保存します。

スクリプトのタイムゾーンを変更する

このままだとGASのタイムゾーンがアメリカ東部時間のままのため、日本時間へ変更します。

  1. 「プロジェクトの設定」で「「appsscript.json」マニフェスト ファイルをエディタで表示する」にチェックを入れる。
  2. エディタで「appsscript.json」を開き「timeZone」の “America/New_York” を “Asia/Tokyo” に変更する。
「appsscript.json」マニフェスト ファイルをエディタで表示する にチェック
//この部分を
"timeZone": "America/New_York",

//このように書き換え
"timeZone": "Asia/Tokyo",
  1. プロジェクトを保存する

実行する

実行ボタンをクリックすると、「承認が必要です」というダイアログが出るので、「権限を確認」をクリックして、Googleアカウントでログインします。

「このアプリはGoogleで確認されていません」と出ますが、スクリプトは安全なので「詳細」をクリックしてから「プロジェクトの名前(安全ではないページ)に移動」をクリックします。

「詳細」をクリック
「プロジェクトの名前(安全ではないページ)に移動」をクリック
「許可」をクリック

テスト用にZoomの招待リンクが含まれたメールを未読にし、スターが付いている場合は外しておきます。

もう一度「実行」ボタンをクリックします。

未読のZoom招待メールが処理されて、Googleカレンダーにミーティングの予定が登録されていれば成功です。

GASを定期的に実行するためのトリガー設定

メールが来たらというトリガーはないため、定期的に未読メールをチェックするこのスクリプトを実行するように設定します。

  1. Google Apps Scriptのメニューから「⏰トリガー」をクリックします。
  2. 右下の「トリガーを追加」をクリックします。
  3. 「時間ベースのトリガーのタイプを選択」で、「時間ベースのタイマー」を選択します。
  4. 「時間の間隔を選択」でお好きな時間を選択します。
  5. 「保存」をクリックします。

その時刻になったら通知が来ますので設定はこれで完了です。

仕様

  • 未読でスターが付いておらず「zoom.us/j/」という文字が含まれたメールを対象にします。
  • 予定のタイトルは「トピック:」が含まれていればトピック:の後を使い、含まれていなければメールの件名を使います。
  • 予定の終了時刻は開始時刻の1時間後に設定されます。
  • 処理が終わったメールはスターが付きます。
  • 予定はGoogleカレンダーのデフォルトカレンダーに登録されます。
  • 日本用のZoomURL、日付時刻は日本語の表記にのみ対応しています。

その他

使い方や設定方法が分からない場合などはお問い合わせください。カスタマイズが必要な場合もお問い合わせください。お見積りさせていただきます。

この記事を書いた人

PHPが好物な個人開発プログラマ。フリーランスエンジニアとしてWebサービス作ったりしてます。15年の経験を生かしてMENTAでメンターもやってます。WordPressやPHPでお困りのことがあればご相談に乗りますのでDMください。

Follow on SNS
GAS
SOHO MIND

Comments