🐴
GAS:Slackでemojiが押されたら対象のスレッドをスプレッドシートにコピーしてSlackに通知する-3/3
前回の続き。
前置き
特定のemojiを押したら反応するBotを作りたかった。
参考にするリファレンス
Event reference: reaction_added event
conversations.replies Slack API Method
処理の流れ
- Slackでemoji追加を検知
- GASを作成
- GASで値を処理し、スレッドの内容を取得
- スプレッドシートに転記
- Slackに返す
今日は5について記載します。
5. Slackに返す
ソースコード全体(完成形)
// SlackのOutgoingから来るメッセージ
function doPost(e) {
// Event API Verification 時のコード
try {
const json = JSON.parse(e.postData.getDataAsString());
if (json.type == "url_verification") {
return ContentService.createTextOutput(json.challenge);
}
}
catch (ex) {
Logger.log(ex);
}
try {
const json = JSON.parse(e.postData.getDataAsString());
const channel = json.event.item.channel;
const ts = json.event.item.ts;
const reaction = json.event.reaction;
if (reaction == "thinking_face") {
getMessage(ts,channel);
}
}
catch (e) {
Logger.log(e);
}
}
function getMessage(ts,channel){
const url = "https://slack.com/api/conversations.replies";
const slack_app_token = "your-token";
const limit =10;
const options = {
"method" : "get",
"contentType": "application/x-www-form-urlencoded",
"payload" : {
"token": slack_app_token,
"channel": channel,
"ts":ts
}
};
const response = UrlFetchApp.fetch(url, options);
const json = JSON.parse(response);
const text = json.messages[0].text
const date = new Date();
SpreadsheetApp.getActiveSheet().appendRow([date,text]);
postMessage();
}
function postMessage() {
var url = "https://slack.com/api/chat.postMessage";
var payload = {
"token" : "your-token",
"channel" : "channelID",
"text" : "転記しました!!"
};
var params = {
"method" : "post",
"payload" : payload
};
// Slackに投稿する
UrlFetchApp.fetch(url, params);
}
ソース解説
とは言っても、chat.postMessageのAPIを実行するだけ。
リファレンス:https://api.slack.com/methods/chat.postMessage
function postMessage() {
var url = "https://slack.com/api/chat.postMessage";
var payload = {
"token" : "your-token",
"channel" : "channelID",
"text" : "転記しました!!"
};
var params = {
"method" : "post",
"payload" : payload
};
// Slackに投稿する
UrlFetchApp.fetch(url, params);
}
動作イメージ
:thinking_face:を押すとスプレッドシートに記載し、指定のチャンネルに通知される。
最後に
この一連のGASを作るのに、Totalで2時間くらいかかった。
今個人的に検証を進めているWorkatoなら、たぶん1時間くらいで作れるようになるはず。
今度はZapierで作ったらどれくらい時間かかるかを検証してみようかな。
以上
Discussion