chatworkからslackに移行したのでGASを使ってメッセージ転送した話


chatworkからslackに移行したとは言っても。。

どっちのツールがどうこういう話は別として、chatworkで連絡を取り合っていたお客様に
「今後slackでお願いします!」とは言いづらい。。
chatworkは特定のお客様用に部屋を残すこととなった。

でも個人的にはchatworkとslackを常に上げておくのもなんか嫌だ。

chatworkのメッセージをslackに転送しよう

chatworkにちょうど良いapiがある。
http://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages
前回取得分からの差分のメッセージが取れる
→ってことはそれをslackに流せば良い。

準備するもの

●chatworkのAPIトークン
 参考URL:https://help.chatwork.com/hc/ja/articles/115000172402-API-Token%E3%82%92%E7%99%BA%E8%A1%8C%E3%81%99%E3%82%8B
●slackのWebhook
参考URL:https://qiita.com/ik-fib/items/b4a502d173a22b3947a0
●googleアカウント

GASを書く

gas.js
function myFunction() {

  var CHATWORK_TOKEN = '上記の準備するもののAPIトークンをここに記載';
  var ROOM_ID = ["チャットワークのルームIDを記載","チャットワークのルームIDを記載"];

  var params = {
    headers : {"X-ChatWorkToken" : CHATWORK_TOKEN},
    method : "get"
  };

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

    var url = "https://api.chatwork.com/v2/rooms/" + ROOM_ID[i] + "/messages?force=0";
    var strRespons = UrlFetchApp.fetch(url, params);

    if (strRespons != "") {

      var json = JSON.parse(strRespons.getContentText());
      if(json == "") return;

      for(var i in json){
        var message = '';
        message = message + json[i].account.name + "\n```" + json[i].body + "```\n";
        postSlack(message);
      }
    }
  } 
}

function postSlack(text){
  var url = "ここにはslackのWebhookを記載";
  UrlFetchApp.fetch(url, {
  payload : JSON.stringify({
    channel : "#部屋名を記載",
    text : text,
  })
  });
}

これで自分が入っているいる複数のチャットワークの部屋のメッセージが取得できる。
※ちなみにチャットワークのルームIDはチャットワークの部屋を開いた時のアドレスでわかる。
以下の例でいうと「12345678」
https://www.chatwork.com/#!rid12345678
※さらにちなみに起動トリガーは1分毎に設定した。

まぁまぁ便利

ただし、まぁまぁ。

今回はGAS使ってみようっていうのが実は動機にあった。
GASはとても簡単で便利。しかも無料。
武器(手段)が一つ増えたと思って、今回は満足。