# 【サポート依頼】4b. 入口を Slack にする場合 あなたは、これから下の手順を**自分の手で通す人**のサポート役です。 相手は Linux もサーバも初めてで、手元の PC は Windows です。 ## 守ってほしいこと 1. 相手は下の手順書を**上から順に**やっています。**先回りして別のやり方を勧めないでください。** どうしても別の手が要ると判断したときは、**そう判断した理由を1行**添えてください。 2. 詰まった画面のスクリーンショットや、エラーの文言が送られてきます。 **まず「下の手順書のどこで止まっているか」を特定**してから答えてください。 3. **一度に1つだけ**指示してください。結果を聞いてから次に進みます。 4. 専門用語は、初めて出たときに**かっこ書きで言い換え**を付けてください。 5. 分からないことは「**分かりません**」と答えてください。**推測でコマンドを出さないでください。** 6. この工程の「**終わりの印**」が出るまでは、次の工程の話をしないでください。 ## 絶対にしないこと - **Discord の Bot トークン・パスワード・SSH の秘密鍵**を、送るよう求めないでください。 - 相手がうっかり貼ってしまったら、**その場で作り直すよう伝えてください**(どれも作り直せます)。 ## 最初にお願いすること この工程で何をするのかを、**3行**で教えてください。 そのあと、私が「はじめます」と言ったら、**最初の1手だけ**を教えてください。 --- # 手順書(この工程の全文) # 4b. 入口を Slack にする場合 !!! info "この章は、Slack を使う方だけ読んでください" [4章](04_discord_bot.md)の Discord の代わりに、**Slack を入口にする**手順です。 どちらか**片方だけ**でよく、両方は要りません。 **すでに Slack を仕事で使っている**なら、こちらの方が自然です。 新しいアプリを増やさずに済み、いつも見ている画面から右腕に話しかけられます。 !!! success "✅ この手順は 2026-09-09 に実機で1回通りました" 実際に1台のミニPC で、Slack から右腕に話しかけられるところまで確認しています。 そのとき詰まったのは**次の3つだけ**でした。どれも下に書いてあります。 | | 詰まったところ | |---|---| | 1 | `.env` の見本の文字(`your-bot-token` など)を**消し切っていなかった** | | 2 | `#` を消したあと、**行頭に空白が残っていた** | | 3 | 直したのに**古いログを見ていて**、直っていないと思い込んだ | ただし、通したのは**この1台だけ**です。画面の文言はバージョンで変わることがあります。 詰まったところは[記録場](log/index.md)に書き足してください。 !!! success "Slack は「Socket Mode」で繋ぎます — 外から届く住所が要りません" サーバ側から Slack へ**繋ぎに行く**方式なので、**家や事務所のネットワークに穴を開ける必要がありません。** ルータの設定も、固定の住所も要らない、ということです。 ## ① Slack アプリを作る(Manifest を貼るのが最短です) を開き、Slack にログインします。 1. **Create New App** → **From an app manifest** を選ぶ 2. ワークスペースを選ぶ 3. 形式は **YAML** を選び、下の内容を**まるごと貼り付ける** 4. **Next** → **Create** ??? note "📋 貼り付ける Manifest(クリックで開く)" ```yaml display_information: name: xangi description: AI CLI assistant for Slack background_color: '#2f3136' features: bot_user: display_name: xangi always_online: false oauth_config: scopes: bot: - app_mentions:read - channels:history - channels:read - chat:write - files:read - files:write - groups:history - groups:read - im:history - im:read - im:write - reactions:read - reactions:write settings: event_subscriptions: bot_events: - app_mention - message.channels - message.groups - message.im interactivity: is_enabled: true org_deploy_enabled: false socket_mode_enabled: true token_rotation_enabled: false ``` **これで、権限もイベントも Socket Mode も、まとめて設定されます。** 手で1つずつ入れる方法もありますが、**取りこぼしが起きやすい**のでこちらを推します。 ## ② App-Level Token(`xapp-` で始まる方)を作る Manifest を使っても、**この鍵だけは手で作ります。** 1. 左メニュー **Basic Information** → 下の方の **App-Level Tokens** → **Generate Token and Scopes** 2. Token Name … `xangi-socket`(何でも構いません) 3. **Add Scope** → **`connections:write`** を選ぶ 4. **Generate** → 表示された **`xapp-...` をコピー** ## ③ ワークスペースに入れて、Bot Token(`xoxb-` で始まる方)を取る 1. 左メニュー **Install App** → **Install to Workspace** 2. 権限を確認して **許可する** 3. 表示された **Bot User OAuth Token(`xoxb-...`)をコピー** !!! danger "🔴 2つのトークンは、チャットにもメールにも貼らないでください" 置き場所は**サーバの中の `.env` ファイル1か所だけ**です([9章](09_xangi.md))。 手元では Windows のメモ帳に一時的に置き、`.env` に入れたら消してください。 漏れてしまったときは、**同じ画面から作り直せます**(古い方は無効になります)。 ## ④ 自分のユーザーID と、チャンネルID を控える | 取る値 | 操作 | |---|---| | **自分のユーザーID**(`U` で始まる) | 自分のプロフィールを開く → **︙**(その他)→ **メンバーIDをコピー** | | **チャンネルID**(`C` で始まる) | チャンネル名を右クリック → **リンクをコピー**。URL の末尾(`.../archives/C01234567` の `C01234567`)がID | どちらも [2章の表](02_values.md) に書いてください。 ユーザーIDは、**誰の指示なら受けるか**を決めるために使います。 ## ⑤ 🔴 Bot をチャンネルに招待する **ここを忘れると、何を書いても反応しません。**使いたいチャンネルで、こう打ちます。 ```text /invite @xangi ``` ## 手元に残る4つ [9章](09_xangi.md)で使います。**メモ帳に並べておいてください。** | # | 名前 | 見た目 | 置き場所 | |---:|---|---|---| | 1 | **Bot Token** | `xoxb-...` | 🔴 メモ帳に一時保存 → 最終的には `.env` だけ | | 2 | **App Token** | `xapp-...` | 🔴 同上 | | 3 | 自分のユーザーID | `U` で始まる | 2章の表 | | 4 | チャンネルID | `C` で始まる | 2章の表 | ## ✅ ここまで出来たら Slack のメンバー一覧に Bot が現れ、上の4つがそろえば合格です。 **Bot はまだ反応しません。**サーバ側の設定([9章](09_xangi.md))が済むと動きます。 ## 詰まったら | 症状 | まず見るところ | |---|---| | 🔴 **ログに `invalid_auth` と出る** | **Bot Token(`xoxb-`)が違います。**下の「鍵が本物か確かめる」を実行してください。`xoxb-` と `xapp-` を**入れ違いに入れている**のが最も多い原因です | | **メンションしても無反応** | 🔴 ⑤の `/invite @xangi` を、そのチャンネルでやったか | | 権限を足したのに変わらない | **Install App から入れ直す**必要があります(権限の変更は再インストールで反映されます) | | `xapp-` のトークンが見つからない | **Basic Information** の下の方の **App-Level Tokens** です。OAuth の画面にはありません | | DM で反応しない | Manifest を使わず手で設定した場合、`im:history` `im:read` と `message.im` が要ります | | IDをコピーする項目がない | プロフィールの **︙**(その他)の中にあります | ## 🔑 鍵が本物か、その場で確かめる `.env` に入れたあと([9章](09_xangi.md))、Slack 本体に直接聞けます。**トークンは画面に出ません。** ```bash # どちらの鍵がどこに入っているか(先頭9文字だけ表示) grep -E "^SLACK_(BOT|APP)_TOKEN" ~/xangi/.env | sed -E 's/=(.{9}).*/=\1…/' ``` ```bash # Bot Token が本物か curl -s -H "Authorization: Bearer $(grep '^SLACK_BOT_TOKEN=' ~/xangi/.env | cut -d= -f2-)" \ https://slack.com/api/auth.test ``` | 返ってくるもの | 意味 | |---|---| | `{"ok":true,"team":...}` | ✅ Bot Token は正常です | | `{"ok":false,"error":"invalid_auth"}` | 🔴 **Bot Token が違います。**取り直してください | ```bash # App Token が本物か curl -s -X POST -H "Authorization: Bearer $(grep '^SLACK_APP_TOKEN=' ~/xangi/.env | cut -d= -f2-)" \ https://slack.com/api/apps.connections.open ``` !!! danger "🔴 取り違えやすいもの" **Bot Token は `xoxb-` で始まります。**`api.slack.com/apps` → **OAuth & Permissions** の一番上、 **Bot User OAuth Token** です。 同じ画面の周りにある **Signing Secret** や **Client Secret** を入れると、 このエラー(`invalid_auth`)になります。**`xoxb-` で始まっていない時点で間違いです。** 次は [5. USB インストーラをつくる](05_usb.md) です。 (サーバ側で Slack を繋ぐ設定は [9章](09_xangi.md) で行います。)