はじめに
こんにちは、シルです。
この記事では、Bot User OAuth TokenとUser OAuth Tokenの違いについて調べたことをまとめます。
Bot User OAuth TokenとUser OAuth Tokenとは
Slack APIを利用する際には、Bot User OAuth TokenとUser OAuth Tokenの2つのタイプのトークンがあります。
内容を簡単にまとめると
- ユーザー権限を利用する場合はUser OAuth Tokenを、Botを利用する場合は、Bot User OAuth Tokenを利用してAPIにアクセスする
- ユーザー権限では、ユーザーのアクセス権限とユーザー名でスラックに対してアクションを行うことができる
⇨そのユーザーに成り替わり、アクションができる
⇨ユーザーがチャンネルに参加している必要がある - Bot権限では、Bot名と権限でアクションを行うことができる
この後については、実際にそれぞれの権限を利用し、メッセージ投稿を実行してみます。
参考:https://api.slack.com/scopes
https://zenn.dev/aa/articles/2008759734c015
Bot User OAuth Tokenを使用してメッセージ投稿
以下の記事でBot User OAuth Tokenを使用して、メッセージ投稿した場合の結果を見ることができるので参考にしてみて下さい。
Slack:Web APIを利用してメッセージを投稿する
Bot権限を使用してメッセージ投稿した場合は、以下のように「Bot名」で投稿されていることがわかります。
一応ですが、「表示名」と「プロフィール画像」をユーザーのものに置き換えて投稿をすることで、ユーザーの投稿のようにメッセージを送信することも可能です。

User OAuth Tokenを使用してメッセージ投稿
① https://api.slack.com/appsにアクセスし、アプリを選択後、左サイドメニューから「OAuth&Permissions」をクリックします。

② 「Scope」の「User Token Scopes」項目の「Add ab OAuth Scope」ボタンをクリックする。

③ 「chat:write」を選択し、追加する。

④ 追加後、再インストールが必要となるため、「reinstall」をクリックし、実行する。

⑤ 内容を確認し「許可する」ボタンをクリックする。

⑥ 「User OAuth Token」を確認できるようになりました。
トークンを取得しておきます。

⑦ 以下のプログラムを実行し、メッセージを投稿します。
const axios = require("axios");
// Slackのアクセストークンを設定します
const accessToken = "xoxp-not-a-real-token-this-will-not-work";
// 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(
"CXXXXXXXXXX",
"テスト User OAuth Tokenを使用してメッセージ投稿"
);
⑧ 「テスト User OAuth Tokenを使用してメッセージ投稿」というメッセージが投稿されていることを確認できました。
Botとしてではなく、ユーザーに成り替わり投稿していることがわかると思います。

⑨ 実行時のレスポンスは以下の通り。
yourname postMessage_sample02 % node test.js
Message posted successfully: {
ok: true,
channel: 'CXXXXXXXXXX',
ts: '1714963932.933559',
message: {
user: 'UXXXXXXXXXX',
type: 'message',
ts: '1714963932.933559',
bot_id: 'BXXXXXXXXXX',
app_id: 'AXXXXXXXXXX',
text: 'テスト User OAuth Tokenを使用してメッセージ投稿',
team: 'TXXXXXXXXXX',
bot_profile: {
id: 'BXXXXXXXXXX',
app_id: 'AXXXXXXXXXX',
name: 'Service App',
icons: [Object],
deleted: false,
updated: 1714960862,
team_id: 'TXXXXXXXXXX'
},
blocks: [ [Object] ]
},
warning: 'missing_charset',
response_metadata: { warnings: [ 'missing_charset' ] }
}
まとめ
- 「Bot User OAuth Token」と「User OAuth Token」の2つのタイプのトークンがある
- 「Bot User OAuth Token」は、「xoxb-」から始まる
- 「User OAuth Token」は、「xoxp-」から始まる
- Scopeを変更した場合は、アプリを再度インストールする必要がある
⇨「Reinstall in Workspace」を実行し、再度許可する必要がある - User OAuth Tokenは Scope によって Bot User OAuth Token の権限を拡張したものや、 Bot User OAuth Tokenとは異なる権限になっていることがある
⇨同じようなAPIメソッドを利用しても得られる結果が token の種類によって違う



コメント