Gmailの特定のメール(スレッド)をチャットに飛ばす

GoogleAppsScriptを使って
・Gmailから特定の条件に合致するメールを取得
・ChatWorkライブラリを使ってメッセージ送信
というスクリプトをつくります。

準備:ChatWorkのトークン情報など

「API設定」から取得できます。
個人メニューの中より。
cw_menu.png

「API Token」よりトークンが発行できるので、発行したらそれをコピーしておきます。
cw_token.PNG

また、メッセージを飛ばしたいチャットルーム(マイチャットなど)のIDも必要なので、それもメモしておきます。
※URLの数字部分
cw_mychat.PNG

To をつける場合にはアカウントIDも必要なので、それも調べておきます。
適当なチャットで引用や返信したときに、メッセージの頭につくタグで
aid=XXXXXXXX
という箇所がありますが、これがアカウントIDになります。

スクリプトにライブラリを追加

ドライブから新規スクリプトを作成します。
プロジェクト名やスクリプト名などは適当に。

ライブラリの追加は、「リソース」->「ライブラリ」から行います。
gas_lib.png

ポップアップ下部にプロジェクトキーを入力して追加します。
gas_libadd.PNG

チャットワークライブラリは中の人が非公式につくってくれています。
チャットワークAPI を Google Apps Script で使ってみた
GitHub
プロジェクトキーは以下です。
M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT

スクリプトを書く

こんな感じです。

function main() {
  //チャットワークトークン・ID
  const CW_TOKEN = "最初に取得したトークン";
  const CW_ROOM = チャットルームID;
  const CW_TO = アカウントID;

  //Gmailから特定条件のスレッドを検索しメールを取り出す
  var strTerms = 'is:unread "メール取得条件"';
  var myThreads = GmailApp.search(strTerms, 0, 50); //条件にマッチしたスレッドを取得
  var myMsgs = GmailApp.getMessagesForThreads(myThreads); //スレッドからメールを取得する→二次元配列で格納

  //チャットワークAPI
  var client = ChatWorkClient.factory({
    token: CW_TOKEN
  });

  //各スレッド×メール
  for (var i = myMsgs.length - 1; i >= 0; i--) {
    var msgsInThread = myMsgs[i];
    for (var j = 0; j < msgsInThread.length; j++) {
      var msg = msgsInThread[j];

      //未読のみ
      if (msg.isUnread()) {
        //メールを既読にする
        msg.markRead();

        //メッセージ作成
        var msgBody = "[To:" + CW_TO + "]" +
                      "[info]" +
                          "[title]" + msg.getSubject() + "[/title]" +
                          msg.getFrom() + "[hr]" +
                          msg.getPlainBody().slice(0,400) + "[hr]" +
                          msg.getDate() +
                      "[/info]";

        //チャットワークに送る
        client.sendMessage({
          room_id: CW_ROOM,
          body: msgBody
        });
      }
    }
  }
}

未読のメールを拾って、メッセージを送ったら既読にするという仕組みです。
メールの検索条件はGmailで使えるものがそのまま使えます。
Gmail で使用できる検索演算子

また、取得したメッセージはメールボックスの上から(最新から)なので、
ループは後ろから回して受信順にメッセージを送るようにしています。

チャットワークメッセージはタグで装飾できます。
メッセージ記法

トリガーに登録

あとはスクリプトをトリガーに登録しておけばOK。
gas_trigger.png

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.