Edited at

Trello のリスト・カード一覧を Slack に通知したいとき

More than 1 year has passed since last update.


手順

1.公式サイトからTrello API のキー・トークンを発行する。

2.curl でボードの ID を取得する。

$ curl -X GET "https://trello.com/1/members/<ログイン時の username>/boards?key=<Trello API のキー>&token=<Trello API のトークン>&fields=name"

3.https://<ドメイン>.slack.com/services/new/incoming-webhook を開いてSlack の webhook URL を取得しておく。

4.スクリプトエディタを開き以下のコードを書く。

var _ = Underscore.load();

var ENDPOINT = "https://trello.com/1/";
var KEY = "<Trello API のキー>";
var TOKEN = "<Trello API のトークン>";
var BOARD_ID = "<取得したいボードの ID>";
var trelloList = [];
var trelloCardList = [];

function getAndSendList() {
var trelloList = JSON.parse(requestTrello("boards/" + BOARD_ID + "/lists").bodyText);
for (var i = 0; i < trelloList.length; i++) {
var res = JSON.parse(requestTrello("lists/" + trelloList[i].id + "/cards").bodyText);
trelloCardList.push({name: trelloList[i].name, length: res.length, cardList: _.map(res, function(item) {return item.name})})
}
var message = "";
for (var i = 0; i < trelloCardList.length; i++) {
var cardList = "";
for (var k = 0; k < trelloCardList[i].cardList.length; k++) {
cardList += trelloCardList[i].cardList[k] + "\n";
}
message += ""+trelloCardList[i].name+"\n"+trelloCardList[i].length+"\n- "+cardList+"\n\n";
}
notifySlack(message);
}

function notifySlack(message){
var url = "https://hooks.slack.com/services/<発行したトークン>";
Logger.log(message)
var jsonData =
{
"text" : "```"+message+"```"
};
var payload = JSON.stringify(jsonData);

var options =
{
"method" : "post",
"contentType" : "application/json",
"payload" : payload
};

UrlFetchApp.fetch(url, options);
}

function requestTrello(path) {
var url = ENDPOINT + path + "?key=" + KEY + "&token=" + TOKEN;
var urlFetchOption = {
'method' : 'get',
'contentType' : 'application/json; charset=utf-8',
'muteHttpExceptions' : true
};

var response = UrlFetchApp.fetch(url, urlFetchOption);
try {
return {
responseCode : response.getResponseCode(),
rateLimit : {
limit : response.getHeaders()['X-RateLimit-Limit'],
remaining : response.getHeaders()['X-RateLimit-Remaining'],
},
parseError : false,
body : JSON.parse(response.getContentText()),
bodyText : response.getContentText()
};
} catch(e) {
return {
responseCode : response.getResponseCode(),
rateLimit : {
limit : response.getHeaders()['X-RateLimit-Limit'],
remaining : response.getHeaders()['X-RateLimit-Remaining'],
},
parseError : true,
body : null,
bodyText : response.getContentText()
};
}
}

5.getAndSendList関数を定期実行するよう設定しておく。


通知例

【TODO】

3枚
- やること A
- やること B
- やること C

【DOING】
2枚
- やること D
- やること E

【WAITING】
2枚
- やること F
- やること G

【DOME】
1枚
- やること H