Slack と連携する
組織の Owner と Admin が、Actagate に Slack を接続するためのページです。 Slack なしで使える範囲を確認し、必要に応じて Bot をインストールしてメンバーを同期します。
Slack なしで使う
Section titled “Slack なしで使う”申請、承認、実行、台帳は Web とメールで使えます。通知はメールで届き、メールには操作先へのリンクが入りますが、承認ボタンはありません。
Slack なしでは、チャットの :actagate: リアクションによる L0 スタンプ、/actagate declare による L1 宣言、Slack DM 通知、「Slack でログイン」を使えません。
承認の催促、エスカレーション、付与した権限の期限切れは、Slack がなくても Web が処理します。常駐の処理はなく、誰かが「承認」「申請」「台帳」「可観測性」を開いたときにまとめて実行します。「ホーム」を開いたときは、催促とエスカレーションだけを実行します。Slack がない組織では、催促はメールで届きます。
- Owner または Admin として「設定」(
/ws/settings) を開きます。未連携の組織では「Slack 連携」に「未連携」と表示されます。 - 「連携すると使えるもの」を確認します。「承認カード・催促・完了通知の Slack DM」「チャットのスタンプ記録 (L0)」「宣言 (L1)」と、「Bot のインストール手順を見る」があり、「いま同期する」はありません。

標準 Compose の db/migrate.sh で作った組織には slack_team_id があるため、Bot が動いていなくてもカードは「連携済み」になります。この表示だけでは Bot の稼働を確認できません。
Bot をインストールする
Section titled “Bot をインストールする”この節は、マニフェストと配備の設定から書いた参照情報です。Slack ワークスペースでのインストールは、まだ実機で辿っていません。
作業するのは、Slack 側でアプリを作成・インストールできる人と、配備の環境変数を変更できる人です。マニフェストは apps/slack-bot/slack-manifest.json です。
| 項目 | マニフェストと配備の設定 |
|---|---|
| スラッシュコマンド | /actagate。名前を SLACK_COMMAND_NAME と一致させる |
| 接続方式 | Socket Mode とインタラクティブ機能が有効 |
| イベント | reaction_added、app_home_opened |
| トークン | Bot トークン (xoxb-)、App-level トークン (xapp-)、署名シークレットを使う |
| 反映 | 環境変数を設定してから Bot と Web を再起動する。Bot 起動時の同期が、ワークスペースを組織へ結び付け、ユーザーグループとそのメンバーを取り込む |
マニフェストのスコープは次のとおりです。
| 種類 | スコープ |
|---|---|
| Bot | commands, chat:write, reactions:read, channels:history, groups:history, im:history, users:read, users:read.email, usergroups:read, team:read, files:read |
| ユーザー | openid, profile, email |
| 設定先 | 環境変数と用途 |
|---|---|
| Bot | SLACK_BOT_TOKEN、SLACK_APP_TOKEN、SLACK_SIGNING_SECRET、DATABASE_URL が必須 |
| Web | SLACK_BOT_TOKEN を手動同期と招待時のメール照合に使う |
| DB の初期化 | db/migrate.sh は SLACK_TEAM_ID と SLACK_WORKSPACE_NAME を必須とする |
| Web の Slack ログイン | SLACK_CLIENT_ID、SLACK_CLIENT_SECRET、SLACK_OIDC_REDIRECT_URI を設定する。リダイレクト URL は Slack アプリの設定と一致させ、localhost 以外は HTTPS にする |
users:read.email は users.info の profile.email を読むために使います。同期では既存メンバーとの照合に使い、招待ではメールがない Slack 由来の行と招待先アドレスを照合します。一致すれば、新しい行を作らずに既存の行へメールを入れます。
「いま同期する」で取り込む範囲
Section titled “「いま同期する」で取り込む範囲”「いま同期する」を実行できるのは Owner と Admin です。連携済みのカードには「ワークスペース」「連携日時」「最終同期」と、このボタンがあります。
[画面: Slack 連携 (連携済み)]
対象は Slack のユーザーグループに入っている人だけです。users.list は呼ばず、グループのメンバーを users.info で取得します。どのグループにも入っていない人は、このボタンでは取り込まれません。
| 照合結果 | 同期する内容 |
|---|---|
| 同じ Slack ID の行がある | その行を更新する |
| 同じ Slack ID がなく、同じメールで Slack ID が空の行がある | 大文字・小文字を区別せず照合し、既存の行に Slack ID を入れる。行は増えない |
| どちらもない | 新しいメンバーの行を作る |
同期のたびに、表示名、メール、Slack の管理者・オーナーのフラグ、言語、部門を Slack の値で更新します。表示名と部門は、Slack 側の値がない場合に既存値を残します。部門には Slack プロフィールの肩書きを使います。
言語は毎回上書きします。日本語でも英語でもない言語設定のときや、Slack 側に値がないときは English になります。そのため、Slack と紐づいたメンバーが「ホーム」で選んだ言語は、次の同期で Slack 側の言語に戻ります。
Slack のユーザーグループは承認グループとして取り込みます。Web で作ったグループは上書きしません。Bot 起動時にも組織の同期を行います。次の操作では、関係する人だけを同期します。
| 操作 | 同期する人 |
|---|---|
| スラッシュコマンド | 実行した人。/actagate setup @上長 では指定した上長も同期する |
| :actagate: のリアクション | リアクションした人と、メッセージを書いた人。ほかの絵文字では同期しない |
| App Home を開く | 開いた人 |
同期の成功メッセージは「Slack と同期しました。」だけで、件数は表示しません。失敗時は「Slack との同期に失敗しました。SLACK_BOT_TOKEN の設定と Bot の権限を確認してください。」です。ユーザーグループの取得に失敗しても処理を続け、成功メッセージになる場合があります。
Slack を後から接続する
Section titled “Slack を後から接続する”メールと Web で始めた組織にも、後から接続できます。メールで登録した人は、Slack のメールアドレスを同じにしておきます。この節も設定とコードから書いた参照情報で、実際のワークスペースでは辿っていません。
接続には、上の節の Bot の必須環境変数と、Web の SLACK_BOT_TOKEN が必要です。Bot が起動すると、組織の同期 (syncOrganization) が次の規則でワークスペースを結び付けます。
| 組織の状態 | Bot 起動時の同期の結果 |
|---|---|
DB の組織が 1 件だけで、slack_team_id が空 |
その組織にワークスペースを結び付ける |
上記以外 (組織が複数ある、または slack_team_id が入っている) |
ワークスペースの team ID で組織を探し、なければ新しい組織を作る |
結び付けると、/setup で入力した組織名は Slack ワークスペースの名前に置き換わります。「いま同期する」でも、組織名をワークスペースの名前で更新します。
「いま同期する」の対象は、ユーザーグループに入っている人だけです。メールが一致して Slack ID が空の既存メンバーは紐づき、一致する行がない人は新しいメンバーになります。
手動同期は、組織が別の Slack ワークスペースに結び付いている場合は失敗します。連携後は Slack ID がある人への通知が Slack DM に切り替わり、Slack ID がない人には引き続きメールが届きます。「Slack でログイン」は登録済みの Slack ID が必要で、ログインだけでは新しいメンバーを作りません。