はじめに
こんにちは、シルです。
今回は、SlackのWeb APIを利用してチャンネルにメッセージを投稿してみます。
基本的なSlackの操作に関する知識やSlackのアカウントが必要です。
また、SlackのAPIトークンを取得する手順や、必要なライブラリのインストール方法などの事前準備についても触れます。
メッセージ投稿の概要
今回は、「chat.postMessage」を利用して、特定のチャンネルにメッセージを投稿します。
Web APIについて
SlackのWeb APIは、HTTPメソッドを使用してSlackとデータをやり取りし、メッセージを送信します。
Slackチャンネルやファイル、絵文字リアクションなど、様々な機能を操作できます。認証にはBearer Tokenが使用されます。
参考:Slack:よく使うWeb API一覧
Slack | chat.postMessage method
chat.postMessageについて
Slack公式の解説ページの内容を簡単にまとめます。
エンドポイント
- POST https://slack.com/api/chat.postMessage
スコープ
- Bot User OAuth Tokens:chat:write
⇨今回はBot User OAuth Tokensを利用 - User OAuth Tokens :chat:write, chat:write:user, chat:write:bot
Content types
application/x-www-form-urlencodedapplication/json
Rate Limites
| Feature/API | Limit | Notes |
|---|---|---|
| Posting messages | 1 per second | Short bursts >1 allowed. If you attempt bursts, there is no guarantee that messages will be stored or displayed to users. If the burst exceeds available limits, users will see an error message indicating that some messages from your app are not being displayed. |
Limit(制限)について
1秒に1回のリクエスト制限があります。この制限を超えるリクエストを送信すると、SlackのAPIはエラーを返します。
Notes(注意事項)について
1を超える短時間のバースト(突発的なリクエスト)は許可されます。
ただし、バーストを試みる場合、メッセージがユーザーに表示されるかどうかは保証されません。
利用可能な制限を超えるバーストが発生すると、ユーザーには、アプリからの一部のメッセージが表示されていないことを示すエラーメッセージが表示されます。
メッセージを投稿する
アプリを作成する
まずは、アプリを作成していきます。
① 自身のSlackのURL(https://myworkspace.slack.com)にアクセスします。
※「myworkspace」には、ワークスペース作成時に指定したワークスペース名を指定して下さい。

② ワークスペース名をクリックし、設定メニューを開きます。
その後「ワークスペースの設定」をクリックする。

③ ワークスペースの設定画面が開きます。
左メニューから「App管理」をクリックします。

④ アプリの管理画面の右上の「管理」をクリックする。

⑤ 画面中央くらいにある「Create an App」をクリックする。

⑥ 「From Scratch」をクリックする。

⑦ 「App Name」には、アプリの名前を入力します。(20文字以内)
「Pick a workspace to develop your app in :」では、自分のワークスペースを選択します。
それぞれの項目の入力が完了したら、「Create App」ボタンをクリックします。

⑧ 以下の画面が開いたら、左サイドメニューから「OAuth&Permissions」をクリックします。

⑨ 以下の画面が開いたら、少し下にスクロールします。

⑩ 「Scopes」内の「Bot Tokens Scopes」項目に、必要なスコープを入力し、選択します。
今回は、「chat:write」を選択します。

⑪ ⑩と同じ画面で、画面上部までスクロールします。
その後「Install to Workspace」ボタンをクリックします。

⑫ 以下の画面が表示されます。
内容を確認し、「許可する」ボタンをクリックします。

⑬ 許可が成功したので、「Bot User OAuth Token」が発行されました。

⑭ ワークスペースの設定画面から確認すると先ほど作成したアプリが、追加されていることを確認できました。
アプリ名をクリックします。

⑮ 以下の画面が表示されます。
実行できる内容に「chat:write」が追加されていることを確認できます。

チャンネルに作成したアプリを参加させる
先ほど作成したアプリをメッセージを投稿したいチャンネルに参加させます。
① 自身のSlackのURL(https://myworkspace.slack.com)にアクセスします。
※「myworkspace」には、ワークスペース作成時に指定したワークスペース名を指定して下さい。

② 今回は以下のチャンネルを選択します。
画面中央上部のチャンネル名をクリックします。(今回の場合は、「#パブリック_テスト」)

③ チャンネルの詳細画面が開きます。
「インテグレーション」タブをクリックします。

④ 「App」の「アプリを追加する」ボタンをクリックします。

⑤ 以下のようにアプリの一覧画面が開きます。
追加したいアプリを選択します。
今回は先ほど作成した「Service App」の「追加」ボタンをクリックします。

⑥ アプリを追加することができました。

⑦ 画面左サイドメニューの「App」一覧から、アプリを選択すると以下のような画面が表示されます。
アプリへのメッセージ投稿はできません。

メッセージを投稿する
それでは、メッセージを投稿していきます。
今回は、以下の方法で実行してみたいと思います。
- Slackの「Web API Method」の「Tester」機能でテスト投稿
- 「curl」コマンドで投稿
- 「JavaScript」で投稿
Slackの「Web API Method」の「Tester」機能でテスト投稿
簡単に投稿ができるので、動作の確認やテストなどで活用できると思います。
① こちらのURLにアクセスします。
https://api.slack.com/methods/chat.postMessage/test

② 「Or, provide your own token:」にBot User OAuth Tokenを入力します。
「channel」に投稿したいチャンネルのチャンネルIDを入力します。
「text」に投稿したいメッセージを入力します。
入力後、「Test method」ボタンをクリックします。

③ レスポンスを確認します。
「ok: true」で成功していることが確認できます。

④ 指定したチャンネルを確認します。
投稿されていることを確認できました。

以下は、成功時のレスポンスのイメージ
{
"ok": true,
"channel": "CXXXXXXXXXX",
"ts": "1714909872.338219",
"message": {
"user": "UXXXXXXXXXX",
"type": "message",
"ts": "1714909872.338219",
"bot_id": "BXXXXXXXXXX",
"app_id": "AXXXXXXXXXX",
"text": "テスト投稿",
"team": "TXXXXXXXXXX",
"bot_profile": {
"id": "BXXXXXXXXXX",
"app_id": "AXXXXXXXXXX",
"name": "Service App",
"icons": {
"image_36": "https://a.slack-edge.com/80588/img/plugins/app/bot_36.png",
"image_48": "https://a.slack-edge.com/80588/img/plugins/app/bot_48.png",
"image_72": "https://a.slack-edge.com/80588/img/plugins/app/service_72.png"
},
"deleted": false,
"updated": 1714900159,
"team_id": "TXXXXXXXXXX"
},
"blocks": [
{
"type": "rich_text",
"block_id": "cm0",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "text",
"text": "テスト投稿"
}
]
}
]
}
]
}
}
「curl」コマンドで投稿
① ターミナルを開きます。
② 以下のコマンドを実行します。
「channel」には、投稿したいチャンネルのチャンネルIDを入力してください。
「Authorization」には、Bot User OAuth Tokenを入力してください。
curl -d "text=テスト投稿 curlコマンド" -d "channel=CXXXXXXXXXX" -H "Authorization: Bearer xoxb-not-a-real-token-this-will-not-work" -X POST https://slack.com/api/chat.postMessage
③ 以下のようにレスポンスを確認できます。

④ チャンネルを確認すると、メッセージが投稿されていることを確認できました。

参考:Slack | Posting Message with Curl
「JavaScript」で投稿
① Node.jsでAxiosを使用する方法で紹介します。
「npm install axios」でパッケージをインストールし、実行コマンド「node xxxx.js」を実行します。
「channel」には、投稿したいチャンネルのチャンネルIDを入力してください。
「Authorization」には、Bot User OAuth Tokenを入力してください。
const axios = require("axios");
// Slackのアクセストークンを設定します
const accessToken = "YOUR_ACCESS_TOKEN_HERE";
// Slackにメッセージを投稿する関数を定義します
async function postMessageToSlack(channel, text) {
try {
// Slackに送信するデータを作成します
const data = {
channel: channel,
text: text,
};
// Slackのchat.postMessageメソッドを使用してメッセージを投稿します
const response = await axios.post(
"https://slack.com/api/chat.postMessage",
data,
{
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${accessToken}`,
},
}
);
console.log("Message posted successfully:", response.data);
} catch (error) {
console.error("Error posting message to Slack:", error.response.data);
}
}
// メッセージを投稿する
postMessageToSlack("CHANNEL_ID", "テスト投稿 JS");
② 以下のようなレスポンスを確認できます。
yourname sample % node test.js
Message posted successfully: {
ok: true,
channel: 'CXXXXXXXXXX',
ts: '1714921235.457999',
message: {
user: 'UXXXXXXXXXX',
type: 'message',
ts: '1714921235.457999',
bot_id: 'BXXXXXXXXXX',
app_id: 'AXXXXXXXXXX',
text: 'テスト投稿 JS',
team: 'TXXXXXXXXXX',
bot_profile: {
id: 'BXXXXXXXXXX',
app_id: 'AXXXXXXXXXX',
name: 'Service App',
icons: [Object],
deleted: false,
updated: 1714900159,
team_id: 'TXXXXXXXXXX'
},
blocks: [ [Object] ]
},
warning: 'missing_charset',
response_metadata: { warnings: [ 'missing_charset' ] }
}
③ チャンネルを確認すると、メッセージが投稿されていることを確認できました。

まとめ
- 作成したアプリの編集やトークンの確認等を実施する際は、開発者向けページ「https://api.slack.com/apps」にアクセスする必要がある
chat.postMessageメソッドを使用してメッセージを投稿できる- 認証にはBearer Tokenを使用する
- リクエスト制限:1秒に1回
- 成功時にSlackからレスポンスが返る



コメント