🐴

GAS:Slackでemojiが押されたら対象のスレッドをスプレッドシートにコピーしてSlackに通知する-3/3

2021/03/15に公開

https://zenn.dev/barusu/articles/0ae12e18a7f326

前回の続き。

前置き

特定のemojiを押したら反応するBotを作りたかった。

参考にするリファレンス

Using the Slack Events API

Event reference: reaction_added event

conversations.replies Slack API Method

処理の流れ

  1. Slackでemoji追加を検知
  2. GASを作成
  3. GASで値を処理し、スレッドの内容を取得
  4. スプレッドシートに転記
  5. 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