Slackで効率的にリアクションを集計するGAS活用法

Slackのチャンネルでリアクションをどうやって集計するんだろう?GASを使うって聞いたけど…
猫男
猫男
catman
catman
catmanが「GASでのSlackリアクション集計」について教えてやろう!

Slack APIからのリアクション取得方法

Slackのリアクションを集計するには、まずSlack APIからデータを取得する必要があります。

Slack APIトークンの用意

まずは、Slackからリアクションデータを取得するために必要なAPIトークンを準備します。

1. SlackのAPI管理画面にアクセスします。

2. Appを作成し、Permissionsで「reactions:read」権限を追加します。

3. 「OAuth & Permissions」からトークンをコピーします。

GASでAPI呼び出し

次に、GASを使ってSlack APIにアクセスし、リアクションを取得します。


 function getSlackReactions() {
  const token = 'your-slack-token';
  const channelId = 'channel-id-here';
  const url = 'https://slack.com/api/conversations.history?channel=' + channelId;
  
  const options = {
    method: 'get',
    headers: {
      'Authorization': 'Bearer ' + token
    }
  };
  
  const response = UrlFetchApp.fetch(url, options);
  const messages = JSON.parse(response.getContentText()).messages;
  
  messages.forEach(message => {
    if (message.reactions) {
      message.reactions.forEach(reaction => {
        Logger.log('Emoji: ' + reaction.name + ', Count: ' + reaction.count);
      });
    }
  });
 } 

このコードは、指定したチャンネルのメッセージ履歴を取得し、各メッセージに付けられたリアクションの種類と数をログに出力します。

GASでリアクションを集計する方法

リアクションを詳細に集計するためには、取得したデータを整理し、分析する必要があります。

リアクションの集計ロジック

リアクションデータを取り出して、その数を集計するスクリプトです。


function tallyReactions(messages) {
  const reactionTally = {};

  messages.forEach(message => {
    if (message.reactions) {
      message.reactions.forEach(reaction => {
        if (reactionTally[reaction.name]) {
          reactionTally[reaction.name] += reaction.count;
        } else {
          reactionTally[reaction.name] = reaction.count;
        }
      });
    }
  });

  Logger.log(reactionTally);
}

function main() {
  const messages = getSlackReactions();
  tallyReactions(messages);
}

このスクリプトでは、getSlackReactions関数で取り出したメッセージをtallyReactions関数で集計しています。

結果はリアクションごとに合計された数値としてLoggerに出力されます。

練習問題

Slack APIを使用して、新しいリアクションを追加するGASスクリプトを考えてみてください。

ヒント:Slack APIの「reactions.add」エンドポイントを調べましょう。

 
 

解答・解説

以下は、新しいリアクションをメッセージに追加するGASスクリプトです。


function addReactionToMessage() {
  const token = 'your-slack-token';
  const channelId = 'channel-id-here';
  const timestamp = 'message-timestamp';
  const reactionName = 'thumbsup'; // 追加したいリアクション名

  const url = 'https://slack.com/api/reactions.add';
  const options = {
    method: 'post',
    contentType: 'application/x-www-form-urlencoded',
    headers: {
      'Authorization': 'Bearer ' + token
    },
    payload: {
      channel: channelId,
      name: reactionName,
      timestamp: timestamp
    }
  };

  const response = UrlFetchApp.fetch(url, options);
  Logger.log(response.getContentText());
}

このスクリプトは、指定したメッセージIDにリアクションを追加します。URLやpayloadのパラメータを適切に記入することで、さまざまなリアクションを追加可能です。

この方法により、普段の業務でのSlack活用がより効率的になります。

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。