ブログに戻る
Guide

Slackのボットトークン:場所と、xoxbとxoxpの違いを検証

Slackのボットトークンは、アプリのOAuth & PermissionsページにあるBot User OAuth Tokenで、xoxb-で始まります。アプリをインストールすると表示されます。取得の手順、SLACK_BOT_TOKENでの読み込み、xoxpのユーザートークン、xappのアプリレベルトークン、xoxeのローテーション、xoxcのセッショントークンとの違いをまとめました。

Slack Green Team
October 4, 2026
October 6, 2026
8 分で読める
Share:
slack api
開発者
slack トークン

Slackのボットトークンは、アプリの OAuth & Permissions ページにある Bot User OAuth Token です。xoxb- で始まり、アプリ自身のボットユーザーとして動きます。表示されるのは、アプリをワークスペースにインストールしたあとだけです。手に入れるには、api.slack.com/apps でアプリを作り、OAuth & Permissions で chat:write などの Bot Token Scopes を追加し、Install to Slack をクリックして許可し、OAuth Tokens の欄からトークンをコピーします。たいていのコードは、SLACK_BOT_TOKEN という名前の環境変数からこれを読み込みます。

ユーザートークンは xoxp- で始まり、アプリを許可した人として動きます。Slackのドキュメントは、たいていのアプリにボットトークンをすすめています。インストールした人のアカウントが無効になっても動き続けるからです。同じアプリをファイルから設定するならアプリマニフェストの例を、localhostで自前のOAuthの流れからインストールするならlocalhostでのSlackのOAuthリダイレクトURLをご覧ください。

ユーザーにしかできないこともあります。たとえば、ボットには自分の在席状況があり、あなたの在席状況は変えられません。自分のSlackの点を緑に保つツール、たとえばSlack Greenがボットトークンではなくサインイン中のセッションを使うのはそのためで、その違いはSlackのxoxcとxoxdのトークンで説明しています。

2026年10月3日に、私たちのワークスペースでテスト用のアプリを作ってインストールし、2つのトークンを取得して実行し、そのあとアプリを削除しました。下のスクリーンショットと出力は、そのときのものです。

Slackのボットトークンを取得する方法

  • api.slack.com/apps を開き、Create New App、From scratch の順にクリックして、名前をつけ、ワークスペースを選びます。
  • OAuth & Permissions を開き、Bot Token Scopes を追加します。たとえば、投稿には chat:write、人と在席状況を読むには users:read です。
  • Install to Slack(古いページでは Install to Workspace)をクリックし、Allow をクリックします。新しいアプリに管理者の承認が必要なワークスペースもあります。
  • 同じページの OAuth Tokens の欄から Bot User OAuth Token(xoxb-...)をコピーし、秘密として保管します。コードや公開リポジトリには絶対に入れないでください。それでもリポジトリに入ってしまったら、トークンを無効にして再インストールします。再インストールだけでは同じトークンが返ってきます。
  • ボットが投稿する必要のあるチャンネルに、ボットを招待します: /invite @your-bot。招待しないと、パブリックチャンネルではnot_in_channel、プライベートチャンネルではchannel_not_foundで投稿が失敗します。
  • api.slack.com/apps のリンクは今、app.slack.com/app-settings/<ワークスペースID>/<アプリID>/oauth の設定を開きます。トークンは Copy ボタンつきのふつうのテキスト欄にあり、表示ボタンを押す手順もないので、画面が見える人なら誰でも読めます。このキャプチャでは私たちのトークンを隠しています。

    実際のSlackアプリのOAuth & PermissionsのページにあるOAuth Tokensの欄。User OAuth TokenとBot User OAuth Token(どちらもトークンの残りは私たちが隠した)

    このページは開くたびに同じトークンを表示するので、なくしたトークンはここに取りに戻れます。私たちのテストでは、スコープを変えずに Reinstall to Slack をクリックしても、同じ2つのトークンが返ってきました。

    あとでスコープを追加したら、トークンがそのスコープを持つようにアプリを再インストールします。それまでは、新しいスコープが必要な呼び出しはmissing_scopeで失敗します。トークンの文字列そのものは変わりません。

    試してみます。

    curl -s -H "Authorization: Bearer $SLACK_BOT_TOKEN" https://slack.com/api/auth.test

    ボットトークンは bot_id を返し、ユーザートークンは返しません。どちらを貼り付けたかを見分けるいちばん早い方法です。

    xoxb- のトークンを最初に使う場面としてよくあるのは、CIの通知です。ビルドから投稿するワークフローのYAMLは、スレッドやメッセージの更新も含めてGitHub ActionsからSlackにメッセージを送る方法にあります。Pythonのスクリプトなら、トークンは slack_sdk の WebClient に渡します。スレッドへの返信と、間違いごとに返るエラーを試したスクリプトはPythonからSlackにメッセージを送るにあります。

    実際のxoxbとxoxpのトークンの形

    テスト用アプリの2つのトークンは、どちらも最初の数字が 11256386461409 で、これはアプリのクライアントIDの前半とも同じでした。ワークスペースの数字のIDです。残りの形は違っていました。

    ボットトークンユーザートークン
    接頭辞xoxb-xoxp-
    接頭辞のあとの部分3つ: 14桁の数字が2つ、そのあと英数字24文字4つ: 14桁の数字が3つ、そのあと16進数32文字
    全体の長さ59文字82文字
    auth.test のuserボットユーザーの sgtokencheck(U0C798V2M88)Allowをクリックした人、sieun
    auth.test のbot_idB0C68LU08NPなし

    ほとんどのコードが使う環境変数 SLACK_BOT_TOKEN からトークンを読む、Pythonの slack_sdk の例です。

    import os
    from slack_sdk import WebClient
    
    client = WebClient(token=os.environ["SLACK_BOT_TOKEN"])
    print(client.auth_test().data)

    下の呼び出しは、2つのトークンと、2つの壊れたトークンで、本物のAPIに対して実行しました。

    呼び出しトークン結果
    auth.testxoxbok、bot_id あり
    auth.testxoxpok、bot_id なし
    search.messagesxoxbnot_allowed_token_type
    search.messagessearch:read のないxoxpmissing_scope
    人に対する users.infoどちらでもok
    auth.testxoxb-123(作ったもの)invalid_auth
    auth.testトークンなしnot_authed
    アプリを削除したあとの auth.testxoxbaccount_inactive
    アプリを削除したあとの auth.testxoxptoken_revoked

    つまり not_allowed_token_type は、そのメソッドがこの種類のトークンをそもそも受け付けないという意味です。どのスコープでも直らず、ユーザートークンが必要です。missing_scope は、トークンの種類は合っているけれど、アプリにそのスコープが与えられていないという意味です。

    コードに漏れたSlackのトークンを探す

    xoxp- を config.json、config.ini、settings.py、config.yml と一緒に検索する人がいるのは、トークンがそこに入ってしまうからです。プッシュする前に自分のリポジトリを確かめるなら、次のパターンは私たちのテスト用のファイルで、上のすべてのトークンの形に一致し、それ以外には一致しませんでした。

    grep -rEnI "(xox[abpe]|xapp)[.-][0-9A-Za-z.-]{10,}" .

    本物のトークンが見つかったら、その行を消すだけでなく、トークンを無効にしてください。トークンはgitの履歴に残っています。

    Slackのトークンの種類と接頭辞

    接頭辞トークン誰として動くか
    xoxb-ボットトークンアプリのボットユーザー
    xoxp-ユーザートークンアプリを許可したユーザー
    xapp-アプリレベルトークンすべてのインストールにまたがるアプリ
    xoxe.xoxb-、xoxe.xoxp-ローテーションするアクセストークンボットかユーザー。12時間で期限切れ
    xoxe-リフレッシュトークン新しいアクセストークンを得るのに使う
    xwfp-ワークフロートークンワークフローのステップ。最大15分
    xoxc-、xoxd-WebクライアントのセッションSlackのWebアプリとしてのあなた

    Slackのドキュメントには、App Manifest API用の設定トークンと、Deno Slack SDKで作ったアプリ用のサービストークンも書かれています。

Slackで「離席中」と表示されなくなります

クラウドベース。ダウンロード不要。ノートPCがオフでも24時間稼働。

xoxbとxoxpの違い

  • • xoxb(ボット) はアプリとして動きます。メッセージはボットから届きます。インストールした人がいなくなっても動き続けます。ほとんどのことにはこちらを使います。
  • • xoxp(ユーザー) は、その人の権限で、その人として動きます。書き込みはその人がしたように見えます。ユーザーとして実行しなければならない操作だけに使います。たとえば、自分のステータスを変える users.profile.set や、リファレンスにユーザートークンのスコープしか載っていない reminders.add です(それでもできることはSlackのリマインダーボットにあります)。
  • ユーザートークンは、ユーザーが許可したユーザースコープも持っています。Slackのドキュメントには、ユーザートークンでの操作は、ユーザー本人が行ったように実行されるとあります。ボットトークンにはできません。私たちのas_userのテストでは、as_user=true をつけてもボットとして投稿されました。

    xoxeのトークンとトークンのローテーション

    アプリの設定でトークンのローテーションをオンにすると、oauth.v2.access は、43,200秒(12時間)で期限が切れる xoxe. の接頭辞のアクセストークンと、xoxe- で始まるリフレッシュトークンを返します。期限が切れる前に grant_type=refresh_token で oauth.v2.access を呼ぶと、新しい組が手に入ります。トークンのローテーションのテストでは、リフレッシュのあとにどの古いトークンが動き続けるか、そしてローテーションは一度オンにすると戻せないことを確かめています。

    xappのアプリレベルトークン

    アプリレベルトークンは xapp- で始まり、アプリの設定の Basic Information から作ります。メッセージの投稿ではなく、アプリ全体のAPIに使います。いちばん多いのはSocket Modeの接続です。

    在席状況を設定できるトークンは?

    users.setPresence は、呼び出したユーザーの在席状況を away か auto にします。ユーザートークンならそのユーザー自身の点が変わり、ボットトークンならボットの点が変わります。どのトークンでも、ユーザーを強制的にアクティブにはできません。コードと項目はSlackの在席状況APIのガイドにあります。

    よくある質問

    Slackのボットトークンには期限がありますか?

    トークンのローテーションをオンにしない限りありません。オンにすると、アクセストークンは12時間で期限が切れ、リフレッシュが必要です。ローテーションなしの私たちのトークンは、アプリを削除するまで動き続けました。

    xoxcとxoxdのトークンとは何ですか?

    Webクライアントのセッショントークンと、そのCookieです。Slackのxoxcとxoxdのトークンをご覧ください。

    Always Active

    マウスを動かす必要はもうありません。

    何百人ものリモートワーカーがSlackのステータスを気にしなくなりました。一度設定すれば、永遠にグリーン。

    Related Articles

    Guide

    How to See All Your DMs in Slack, Including the Hidden Ones

    The DMs tab lists your direct messages with people. App DMs, Slackbot and DMs with deleted accounts sit elsewhere. We compared the tab with the full list the Slack API returned.

    Slack Green Team
    Guide

    Slack Images Not Showing? 5 Causes We Reproduced

    We uploaded images to a Slack test channel and then switched each image setting off, ran /collapse, and posted from a bot that was not in the channel. Five causes, each reproduced.

    Slack Green Team
    Guide

    How to Message Yourself on Slack (and What It Notifies)

    Your own name under Direct messages opens a private DM with yourself. We sent it a note, a file, a scheduled message and a reminder, and checked which ones raised a badge.

    Slack Green Team