SlackのグループメンションをIDで指定する方法!APIやBot連携の必須知識

「SlackのBotでグループメンションを送りたいけど、@グループ名だけじゃ動かない…」

外部ツールやAPIからSlackにメッセージを送るとき、グループメンションの書き方が通常と違うことに気づいた方も多いのではないでしょうか。

実は、Slackのグループメンションには「ID形式」という特別な記法があるんです。今回は、グループメンションのID取得方法から具体的な使い方まで、分かりやすく解説していきます。

スポンサーリンク

グループメンションとは?基本のおさらい

まず、Slackのグループメンションについて簡単におさらいしましょう。

ユーザーグループの仕組み

ユーザーグループとは、複数のメンバーをまとめて1つのグループとして扱える機能です。

例えば、「@デザイナー」「@営業チーム」「@プロジェクトA」といったグループを作っておけば、そのハンドル名をメンションするだけで、グループ内の全メンバーに通知を送れます。

通常のメンションとの違い

  • 個別メンション:1人ずつ「@田中さん」「@佐藤さん」と入力
  • グループメンション:「@営業チーム」と1回入力するだけで全員に通知

これにより、毎回複数人をメンションする手間が省けるわけです。

有料プラン限定の機能

ユーザーグループは、Slackの有料プラン(スタンダード、プラス、Enterprise Grid)でのみ利用できます。

無料プランでは、ユーザーグループの作成や管理ができません。ただし、@channel、@here、@everyoneといった標準のグループメンションは無料プランでも使えます。

なぜIDが必要なのか?

通常のSlackアプリ内では、「@グループ名」と入力するだけでメンションできます。では、なぜIDが必要なのでしょうか?

APIやBotからメッセージを送る場合

SlackのAPIやWebhook、外部サービス(Zapier、Google Apps Scriptなど)からメッセージを送る場合、通常の「@グループ名」という記法は機能しません。

代わりに、特別なフォーマットでグループIDを指定する必要があります。

通常のメンション(Slackアプリ内)

@営業チーム お疲れ様です!

API/Botでのメンション(ID形式)

<!subteam^S0614TZR7> お疲れ様です!

この違いを理解していないと、「メンションしたつもりなのに通知が行かない」という問題が発生します。

グループ名が変わっても大丈夫

グループの名前やハンドルは、管理者がいつでも変更できます。

でも、グループIDは永久に変わりません。そのため、IDを使ってメンションを設定しておけば、グループ名が変わっても正常に動き続けます。

これは、長期運用する自動化システムでは特に重要なポイントです。

グループメンションの種類とID形式

Slackには、複数種類のグループメンションがあります。それぞれのID形式を見ていきましょう。

標準グループメンション

@channel:チャンネルの全メンバー

ID形式:<!channel>

チャンネルに参加している全員(オンライン・オフライン問わず)に通知が届きます。

@here:アクティブなメンバーのみ

ID形式:<!here>

現在オンライン(アクティブ状態)のメンバーにだけ通知します。

@everyone:ワークスペース全体

ID形式:<!everyone>

generalチャンネルでのみ使用可能で、ワークスペースの全メンバー(ゲストを除く)に通知します。

ユーザーグループメンション

カスタムグループ

ID形式:<!subteam^グループID|グループ名>

または:<!subteam^グループID>

例:<!subteam^S0614TZR7|営業チーム>

グループIDは、後述する方法で取得できます。グループ名の部分は省略可能ですが、含めておくとコードの可読性が上がります。

個別ユーザーメンション

参考までに、個別ユーザーのメンションも見ておきましょう。

ID形式:<@ユーザーID>

例:<@U012A3CDA>

ユーザーIDは、プロフィール画面から「メンバーIDをコピー」で取得できます。

グループIDの取得方法

それでは、実際にグループIDを取得する方法を見ていきましょう。

方法1:ブラウザ版のURLから取得(最も簡単)

手順

  1. Slackをブラウザ版で開く(デスクトップアプリではなく、https://app.slack.com/)
  2. 左側のサイドバーで「ホーム」をクリック
  3. 「ディレクトリ」タブを選択
  4. 「ユーザーグループ」タブをクリック
  5. IDを知りたいグループを選択
  6. ブラウザのアドレスバーを確認

アドレスバーには、以下のようなURLが表示されています。

https://app.slack.com/client/T012ABC345/user_groups/S0614TZR7

この S0614TZR7 の部分がグループIDです。

ポイント

グループIDは、必ず「S」から始まる英数字の組み合わせです。長さは通常9〜11文字程度です。

方法2:Slack APIを使って取得

より技術的な方法として、APIから取得することもできます。

使用するAPI

usergroups.list メソッド

このAPIを呼び出すと、ワークスペース内の全ユーザーグループのリストが返ってきます。

必要な準備

  1. Slack Appを作成する
  2. 適切な権限(スコープ)を追加する:usergroups:read
  3. OAuth トークンを取得する

APIの呼び出し例(curl)

curl -X GET "https://slack.com/api/usergroups.list" \
  -H "Authorization: Bearer xoxb-your-token-here"

レスポンス例

{
  "ok": true,
  "usergroups": [
    {
      "id": "S0614TZR7",
      "team_id": "T060RNRCH",
      "name": "営業チーム",
      "handle": "sales",
      "description": "営業部のメンバー",
      "user_count": "5"
    }
  ]
}

この "id": "S0614TZR7" がグループIDです。

方法3:ブラウザの検証ツールを使う(上級者向け)

デスクトップアプリを使っている場合でも、以下の方法でIDを取得できます。

  1. Slackデスクトップアプリで、対象のグループを表示
  2. 開発者ツールを開く(Windows: F12、Mac: Cmd+Option+I)
  3. Networkタブを選択
  4. グループの詳細を開く操作をする
  5. Network タブで送信されたAPIリクエストを確認
  6. レスポンスの中からグループIDを見つける

この方法は少し難易度が高いですが、APIトークンがない場合でも使えます。

実際の使用例

グループIDが分かったら、実際に使ってみましょう。いくつかの実例を紹介します。

Google Apps Script(GAS)から送信

コード例

function sendSlackMessage() {
  const webhookUrl = 'あなたのWebhook URL';
  const message = {
    'text': '<!subteam^S0614TZR7|営業チーム> 今月の売上レポートを確認してください。'
  };

  const options = {
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(message)
  };

  UrlFetchApp.fetch(webhookUrl, options);
}

このスクリプトを実行すると、営業チームのメンバー全員に通知が届きます。

Zapierなどの自動化ツール

Zapierや他の自動化ツールでSlackメッセージを送る場合も、同じ形式を使います。

設定例

メッセージ本文の欄に:

<!subteam^S0614TZR7> 新しいタスクがアサインされました。

と入力すれば、グループメンションが機能します。

Slackbotやカスタムアプリ

Python(Slack SDK使用)

from slack_sdk import WebClient

client = WebClient(token="xoxb-your-token")

response = client.chat_postMessage(
    channel="C012345678",
    text="<!subteam^S0614TZR7> ミーティングが開始されました。"
)

Node.js(Slack SDK使用)

const { WebClient } = require('@slack/web-api');
const web = new WebClient('xoxb-your-token');

(async () => {
  await web.chat.postMessage({
    channel: 'C012345678',
    text: '<!subteam^S0614TZR7> レビューをお願いします。'
  });
})();

よくあるトラブルと解決方法

グループメンションをIDで指定する際、いくつかのトラブルが起こりがちです。

トラブル1:メンションが機能しない(青いリンクにならない)

原因

  • ID形式が間違っている
  • グループIDが正しくない
  • 余計な空白や記号が入っている

解決方法

  1. <!subteam^グループID> の形式を正確に守る
  2. !subteam^ の部分は変更しない(これは決まった文字列)
  3. グループIDが正しいか再確認する
  4. 余計な空白がないか確認する

正しい例

<!subteam^S0614TZR7>
<!subteam^S0614TZR7|営業チーム>

間違った例

<! subteam^S0614TZR7>  ← 空白が入っている
<@subteam^S0614TZR7>   ← @になっている
<!subteam S0614TZR7>   ← ^がない

トラブル2:通知が届かない

原因

  • グループが無効化されている
  • メンバーがグループから外れている
  • 通知設定がオフになっている

解決方法

  1. グループが有効か確認する
  2. メンバーリストを確認して、対象者がグループに含まれているか確認
  3. 各メンバーの通知設定を確認

トラブル3:ゲストアカウントでグループメンションが「@不明なグループ」と表示される

原因

Slackの仕様上、ゲストアカウントは自分が参加していないユーザーグループの情報を見ることができません。

解決方法

残念ながら、これは仕様のため完全に解決することはできません。ただし、以下の回避策があります。

  1. Botを使って、グループメンションを検知したら、スレッドで実際のメンバーリストを表示する
  2. ゲストには個別にメンションする
  3. Slackコネクトを使う(ゲストアカウントの代わり)

トラブル4:APIから取得したグループIDが使えない

原因

  • トークンの権限(スコープ)が不足している
  • グループが削除または無効化されている

解決方法

  1. Slack Appの設定で usergroups:read スコープが有効か確認
  2. ブラウザ版で実際にグループが存在するか確認
  3. 最新のグループリストを再取得する

複数のグループメンションを含める場合

1つのメッセージで複数のグループにメンションすることもできます。

<!subteam^S0614TZR7|営業チーム> と <!subteam^S0615G0KT|マーケチーム> の皆さん、来週の会議について確認をお願いします。

このように、複数のグループIDを並べて記述すれば、両方のグループに通知が届きます。

まとめ:グループメンションIDの重要ポイント

SlackのグループメンションをIDで指定する方法をまとめましょう。

基本のID形式

  • 標準グループ:<!channel><!here><!everyone>
  • ユーザーグループ:<!subteam^グループID>
  • 個別ユーザー:<@ユーザーID>

IDの取得方法

  1. ブラウザ版のURLから確認(最も簡単)
  2. usergroups.list APIで取得(プログラムから自動化したい場合)
  3. ブラウザの検証ツールで確認(上級者向け)

使用する場面

  • SlackのAPIやWebhookを使うとき
  • GASやZapierなどの外部ツールから送信するとき
  • カスタムBotを開発するとき

注意点

  • グループIDは「S」から始まる
  • !subteam^ の部分は変更しない
  • 余計な空白や記号を入れない
  • ゲストアカウントではグループ情報が見えない

API連携やBot開発でSlackを活用する場合、グループメンションのID形式は必須の知識です。

一度覚えてしまえば、チームへの通知を自動化したり、外部サービスとの連携をスムーズに行えるようになります。ぜひ実際に試してみてください!

コメント

タイトルとURLをコピーしました