1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ChatworkのメッセージをSlackに流す

Last updated at Posted at 2019-11-15

chatworkのメッセージを自分の個人で使っているslackのワークスペースに転送します。

目的

chatworkのメッセージ・画像をslackに流す。
リアルタイムだと嬉しいが、chatwork apiのリクエスト制限があり、GASのトリガーもあまり短くするとバグが出るので、トリガーはいまのところ5分で設定している。
画像URLは30分で使用不可になるので、slack上の画像も30分で見られなくなる。

結果

スクリーンショット 2019-11-15 17.05.00.png

必要なもの

  • chatworkAPIトークン
  • chatworkID
  • slackWebhookのURL

コード

var CHATWORK_TOKEN ='********************************';//chatworkAPIトークン
var MY_ID = '*******'; // chatworkID
var SLACK_WEBHOOK = 'https://hooks.slack.com/services/*********/******/********************'; //slackWebhook

// トリガーを設定するメインスクリプト
function getChatWork(){
  var ROOM_ID = getChatWorkRoomsId();
  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;
      shapeMessage(json,ROOM_ID[i]);
    }
  } 
}

// 自分のルームIDをすべて取得するスクリプト
// 特定のルームだけでいい場合は、IDを調べて、ここを配列で返す形にする
function getChatWorkRoomsId(){
  var params = {
    headers : {"X-ChatWorkToken" : CHATWORK_TOKEN},
    method : "get"
  };    
  var url = "https://api.chatwork.com/v2/rooms/";
  var strRespons = UrlFetchApp.fetch(url, params);
  var ids = [];
  if (strRespons != "") {      
    var json = JSON.parse(strRespons.getContentText());
    if(json == "") return;
    for each(var obj in json){
      ids.push(obj.room_id.toString());
    }
  }
  return ids;
}

// slackに送るメッセージを整形する
function shapeMessage(json,room_id){
  var message = '';
  for(var i in json){
    Logger.log(json);
    var image_id = '';
    try {
      image_id = json[i].body.match(/download:([0-9]*)/)[1];
    }
    catch (e) {
      Logger.log(json);
    }
    var image_url = ''
    if (image_id != "") {
      image_url = getImage(room_id, image_id);
    }
    var data = {
      "channel" : "********", // 任意のチャンネル名
      "username" : "Chatwork",
      "attachments": [
        {
          "color": "#F03747", // メッセージの左の色
          "author_name": json[i].account.name,
          "author_icon": json[i].account.avatar_image_url,
          "text" : json[i].body,
          "image_url": image_url
        }
      ]
    };
    sendToSlack(data);
  }
}

// ファイルが送られた場合、URLを取得する
function getImage(room_id, file_id){
  var params = {
    headers : {"X-ChatWorkToken" : CHATWORK_TOKEN},
    method : "get"
  };    
  var url = "https://api.chatwork.com/v2/rooms/"+room_id+"/files/"+file_id+"?create_download_url=1";
  var strRespons = UrlFetchApp.fetch(url, params);
  if (strRespons != "") {      
    var json = JSON.parse(strRespons.getContentText());
    if(json == "") return;
    return json.download_url;
  }
}

// slackに送る
function sendToSlack(shapeData) {
  var url = SLACK_WEBHOOK;
  var data = shapeData;
  var payload = JSON.stringify(data);
  var options = {
    "method" : "POST",
    "contentType" : "application/json",
    "payload" : payload
  };
  var response = UrlFetchApp.fetch(url, options);
}

参考

【ChatWork】ChatWorkのメッセージをSlackへ転送する方法
Slack API attachmentsチートシート

1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?