chatworkのメッセージを自分の個人で使っているslackのワークスペースに転送します。
目的
chatworkのメッセージ・画像をslackに流す。
リアルタイムだと嬉しいが、chatwork apiのリクエスト制限があり、GASのトリガーもあまり短くするとバグが出るので、トリガーはいまのところ5分で設定している。
画像URLは30分で使用不可になるので、slack上の画像も30分で見られなくなる。
結果
必要なもの
- 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チートシート