Chatwork의 메시지를 Slack으로 전송
17105 단어 슬랙ChatworkGoogleAppsScriptgas
목적
chatwork의 메시지와 이미지를 slack에 흘린다.
실시간이라고 기쁘지만, chatwork api의 리퀘스트 제한이 있어, GAS의 트리거도 너무 짧게 하면 버그가 나오므로, 트리거는 지금까지 5분으로 설정하고 있다.
이미지 URL은 30분에 사용할 수 없게 되므로, slack상의 이미지도 30분에 볼 수 없게 된다.
결과
필요한 것
필요한 것
코드
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 치트 시트
Reference
이 문제에 관하여(Chatwork의 메시지를 Slack으로 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ShoutaWATANABE/items/c268919e87cfc457ed5e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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 치트 시트
Reference
이 문제에 관하여(Chatwork의 메시지를 Slack으로 전송), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ShoutaWATANABE/items/c268919e87cfc457ed5e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)