【GAS】Gmailの未読メールをChatworkに通知する


※投稿内容は個人の学習目的の記事であり、所属組織とは一切関係ありません。
 Chatwork公式ドキュメントではございませんので、自己責任でご利用ください。

こんにちわ、さかぐち(@sakaguchi_mamii)です。

今回はGmailの未読メールを15分おきにチェックし、未読メールがあったらChatworkにメッセージを送信しようと思います。

APIトークンを取得する

Chatworkにログインし、右上のメニューから「API設定」を選択する。

パスワードを入力し、APIトークンを取得する。

ルームIDを取得する

メッセージを送信したいグループチャットのルームIDを取得する。

グループチャットのURL末尾の数字がルームIDとなります。

ライブラリを読み込む

Chatworkへメッセージ送信は「Chatwork Client for Google Apps Script」を利用します。

プロジェクトキー: M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT

スクリプト

const token = 'APIトークン';
const room_id = 'メッセージを送信したいグループチャットのルームID';

function myFunction() {

  // Gmailを取得する条件を指定(未読)
  // 指定できる条件は以下ページを参照してください
  // https://support.google.com/mail/answer/7190?hl=ja
  var searchQuery = "is:unread";

  // Gmailからスレッドを取得
  // 引数:検索条件,開始スレッドのインデックス,最大取得数
  // 1日の取得件数には制限があります。数の指定にはご注意ください。
  // https://tonari-it.com/gas-gmail-search-limit/ にわかりやすく説明があります。
  var threads = GmailApp.search(searchQuery, 0, 30);

  // スレッドに含まれるメッセージを全て取得
  var messages = GmailApp.getMessagesForThreads(threads);

  for(var i = 0; i < messages.length; i++) {

    var date = messages[i][0].getDate(); // 受信日時
    var subject = messages[i][0].getSubject(); // 件名
    var from = messages[i][0].getFrom(); // 送信者
    var link = threads[i].getPermalink(); // Gmailリンク
    var post_message = "[info][title]Gmailを受信しました(" + Utilities.formatDate(date, 'Asia/Tokyo', 'yyyy/MM/dd hh:mm:ss') + ")[/title]" +
      "subject: " + subject + "\n" +
      "From: " + from + "\n" +
      link +
      "[/info]";

    // メッセージ送信
    sendMessage(post_message);

  }

}

function sendMessage(message) {
  var client = ChatWorkClient.factory({token: token});
  client.sendMessage({
    room_id: room_id,
    body: message
  });
}


トリガーの設定

スクリプトを15分おきに動かすトリガを設定します。

編集>現在のプロジェクトのトリガー を選択する。

「トリガーを追加」をクリックする。

内容を設定し「保存」をクリックする。

今回は15分おきにGmailの未読メールの有無を確認したいので以下を設定します。

  • 時間ベースのトリガーのタイプを選択: 分ベースのタイマー
  • 時間の間隔を選択: 15分おき

※1日のメール取得件数には制限があります。数の指定にはご注意ください。
下記にわかりやすくまとめてくれてます。
Google Apps ScriptにおけるGmailの読み取り件数の制限とその対処法

テスト

できました!

URLをクリックするとメッセージが表示される

最後に

グループチャットにメッセージが送信されたときに、スマホでプッシュ通知を受け取りたい場合は、スマホアプリで「すべてのメッセージ」にチェックを入れてください。