IT技術関連Slack

Slack:Web APIを利用して投稿をピン留めする

Slack

はじめに

こんにちは、シルです。
今回は、SlackのWebAPIを利用して投稿をピン留めをしてみます。
前提として、基本的なSlackの操作に関する知識やSlackのアカウントが必要です。

ピン留めについて

Slackのピン留め機能は、重要なメッセージやファイルをチャンネルやダイレクトメッセージに固定し、チームメンバーが簡単にアクセスできるようにする機能です。不要になった場合は簡単に解除可能です。
頻繁に参照する投稿や重要な投稿の固定を固定することで、大切な情報を忘れないようにすることができます。

今回は、「pins.add」というAPIメソッドを利用します。

pins.addについて

Slack公式の解説ページの内容を簡単にまとめます。

参考:Slack:よく使うWeb API一覧
   Slack | pins.add method

エンドポイント

  • POST https://slack.com/api/pins.add

スコープ

  • Bot User OAuth Tokens:pins:write
    ⇨今回はBot User OAuth Tokensを利用
  • User OAuth Tokens :pins:write

Content types

  • application/x-www-form-urlencoded 
  • application/json

Rate Limites

Feature/APILimitNotes
Web API Tier 220+ per minuteMost methods allow at least 20 requests per minute, while allowing for occasional bursts of more requests.
参考:Slack | Rate Limites
Limit(制限)について

Web API Tier 2に該当します。
1分間に20以上のリクエスト制限があります。この制限を超えるリクエストを送信すると、SlackのAPIはエラーを返します。

Notes(注意事項)について

1分間に少なくとも20件のリクエストが許可されます。

ピン留めをする

事前準備

詳細なアプリの作成手順は、「Slack | Web APIを使用してメッセージを投稿する」を参照して下さい。

① https://api.slack.com/apps/にアクセスし、アプリを選択します。
  まずは、アプリにScopeを追加します。
  以下のように「pins:write」が追加されていればOK

② 投稿したいチャンネルにアプリを追加しておきます。

③ ピン留めしたい投稿を確認します。
  ピン留めするには、投稿のタイムスタンプが必要となるので、事前に取得します。
  まず、投稿にカーソルを合わせ、右クリックします。

④ メニューが開きます。
  「リンクをコピー」をクリックします。
  リンクを取得することができました。
  リンク:https://xxxxx.slack.com/archives/Cxxxxxxxxxx/p1234567890123456

⑤ リンクから投稿のタイムスタンプを取得します。
  取得したリンクの最後のpから始まる部分に注目します。
  「p」以降の数字がタイムスタンプ(UNIXタイムスタンプ)となります。
  リンク:https://xxxxx.slack.com/archives/Cxxxxxxxxxx/p1234567890123456
  取得した数字を使用する際は、「1234567890.123456」とします。

ピン留めする

JavaScriptで実行します。

① Node.jsでAxiosを使用する方法で紹介します。
  「npm install axios」でパッケージをインストールし、実行コマンド「node xxxx.js」を実行します。
   ・「channelId」には、投稿したいチャンネルのチャンネルIDを入力してください。
   ・「messageTimestamp」には、事前準備-⑤で取得した、ピン留めしたい投稿のタイムスタンプを指定してください。
   ・「slackToken」には、Bot User OAuth Tokenを入力してください。

const axios = require("axios");

// Slack APIトークンを設定
const slackToken = "xoxb-your-token-token";

// ピン留めしたいメッセージのチャンネルIDとメッセージのタイムスタンプを設定
const channelId = "Cxxxxxxxxxx";
const messageTimestamp = "1234567890.123456";

// APIエンドポイント
const apiEndpoint = "https://slack.com/api/pins.add";

/**
 * メッセージをピン留めする関数
 */
async function pinMessage() {
  try {
    // Slackに送信するデータを作成します
    const formData = new FormData();
    formData.append("channel", channelId);
    formData.append("timestamp", messageTimestamp);
    // APIリクエストの送信
    const response = await axios.post(apiEndpoint, formData, {
      headers: {
        "Content-Type": "application/json",
        Authorization: `Bearer ${slackToken}`,
      },
    });

    // レスポンスの処理
    if (response.data.ok) {
      console.log("メッセージを正常にピン留めしました", response.data.ok);
    } else {
      throw new Error(`Slack API エラー: ${response.data.error}`);
    }
  } catch (error) {
    console.error(`エラーが発生しました: ${error.message}`);
  }
}

// メイン関数の実行
pinMessage();

② ピン留めすることができました。

コメント

タイトルとURLをコピーしました