LoginSignup
7
19

More than 5 years have passed since last update.

Gmailに来たメールをChatWorkに転送する

Posted at

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

7
19
3

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
7
19