ttaka/tmp

d.hatena.ne.jp/ttaka_tmp

チャットワークで自分宛のメッセージがあったらメールで通知

モバイル端末でチャットワークを使っていて、自分宛のメッセージを通知させたい場合、アプリ版はプッシュ通知ができるようですが、ブラウザ版は残念ながら自分宛のみのメール通知設定ができないようです。

普段使いのスマホがアプリの動作要件を満たしてなくて利用できないので、それならばとチャットワークAPIGoogle Apps Script (GAS)を使って、メールで通知するようにしてみました。

1. チャットワークAPIの申請

まずはAPIを使えるように、チャットワークAPIドキュメントのページから利用申請を行います。
土曜のお昼に申請したところ、その日の深夜には利用可能のメールが届きました。素晴らしー。

2. チャットワークAPIトークンの取得

無事利用可能のメールが届いたら、認証方法 - チャットワークAPIドキュメントのページに書いてある手順でAPIトークンを取得します。

3. Google Apps Scriptの準備

APIが利用できるようになったら、次にスクリプトの準備を行います。

  1. Googleスプレッドシートを新規作成
  2. メニューから「ツール>スクリプトエディタ」を選択
  3. 空のプロジェクトを作成
  4. プロジェクト名を変更

Google Apps Scriptアプリを追加してる方は、ドライブから直接新規作成でもOKです。

4. ライブラリの導入

チャットワークAPIをGASから使うためのライブラリがあるので導入します。ありがたやー。
  https://github.com/cw-shibuya/chatwork-client-gas
メニューから「リソース>ライブラリ」を選択し、検索欄にライブラリのプロジェクトキーを入力します。

タイトル バージョン 識別子 デベロッパーモード 削除
ChatWorkClient 16 ChatWorkClient 無効 ×

無事ライブラリが読み込まれたら、最新のバージョンを選択して保存します。

5. コードの作成

コード.jsに次のコードを貼付けます。

var CHATWORK_TOKEN = 'チャットワークAPIトークン';
var MAIL_TO = '通知先のメールアドレス';

function myFunction() {
  var rooms = getRooms();

  if (!rooms) {
    Logger.log('rooms request failed');
    return;
  }

  var mentionCount = 0;
  var body = '';

  for (var i = 0; i < rooms.length; i++) {
    var room = rooms[i];

    if (room.mention_num == 0) {
      continue;
    }

    mentionCount += room.mention_num;
    body += room.name + " (" + room.mention_num + ")\n"
          + getRoomUrl(room.room_id) + "\n\n";
  }

  Logger.log('mentionCount: ' + mentionCount);

  if (mentionCount > 0) {
    sendMail(mentionCount, body);
  }
}

function getRooms() {
  var client = ChatWorkClient.factory({token: CHATWORK_TOKEN});

  return client.get('/rooms');
}

function getRoomUrl(roomId) {
  return 'https://www.chatwork.com/#!rid' + roomId;
}

function sendMail(mentionCount, body) {
  var subject = '[ChatWork] mention:' + mentionCount;

  MailApp.sendEmail(MAIL_TO, subject, body);
}

コード先頭のCHATWORK_TOKENに2で取得したAPIトークンを、MAIL_TOに通知先のメールアドレスを設定して保存します。
そして一度実行させて、動作の確認と認証を済ませておきます。

6. トリガーの設定

無事動作することを確認したら、定期的に実行するようトリガーを設定します。
メニューから「リソース>現在のプロジェクトのトリガー」を選択し、実行間隔をお好みにあわせて設定します。

実行 イベント
myFunction 時間主導型 分タイマー 5分ごと 通知

これでチャットワークに自分宛のメッセージがあれば、メールが届くようになるはずです。めでたしめでたし。

今回初めてGASを使ってみたのですが、常時起動させておくサーバーがなくても定期実行ができるので、ほんと便利ですねー。