はじめに
こんにちは、シルです。
今回は、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-urlencodedapplication/json
Rate Limites
| Feature/API | Limit | Notes |
|---|---|---|
| Web API Tier 2 | 20+ per minute | Most methods allow at least 20 requests per minute, while allowing for occasional bursts of more requests. |
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();
② ピン留めすることができました。




コメント