3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Slackで複数人にDMを送る方法の記録

3
Last updated at Posted at 2025-12-11

1. はじめに

Slackで困ることの一つに、一度に大量のDMを送るのが難しいというのがあります。メールの場合はBCCにメールアドレスを設定すればいいのですが、SlackはBCC的な使い方が公式で用意されてない?ように思います(もしかしたらあるのかもしれないですが)。チャンネルを使えばいいのではという話もあるかもしれないのですが、チャンネルでの通知では不十分であったり、チャンネルにできないような場合もあったりします。

例えば、催促の連絡する場合、関係するチャンネル上で連絡するより該当者に個別でDM連絡した方が目につきやすく回答率が高くなることに加え、関係ない人には催促の連絡が表示されないというメリットがあると思います。また、成績が芳しくない人に連絡する場合など、該当者のチャンネルを作らずに当人のみに送る方が良い場合もあります。数人であれば手動でDMを送れるのですが、数十人規模となると手動ではめんどうです。Slack APIを使うとしても、毎回、どうやるんだっけと調べているので、備忘録として、やり方をまとめておきます。

2. Slack側の設定

まず、Slack Appを作成するためにhttps://api.slack.com/apps にアクセスします。Create New AppFrom scratch をクリックします。出てきたウインドウでアプリの名前を決めれるので、App Nameに適当な名前(例:tngc-bot)を入れて、アプリを入れたいワークスペースを選択後、 Create App をクリックします

続いて、表示された画面の左側の一覧から OAuth & Permissions を探して選択します。

image.png

さらに出てきた画面をスクロールし、Scopesセクションを探します。ScopesセクションにあるUser Token Scopesの下にある、 Add an OAuth Scope をクリックすると、アプリに与える権限を追加することができるので chat:writeim:writeを選択します。下図は権限が追加された後の状態です。

image.png

さらに、画面の左側の一覧から Install Appを選択し、 Install to ワークスペース名 をクリック、 許可する をクリックします。成功すると、下図のように、User OAuth Tokenの欄に xoxp- からはじまるトークンが表示されます。後ほどこのトークンを使うのでコピーしておきます

image.png

3. 同じメッセージを複数人にDMで送る場合

いろいろやり方はあると思いますが、この記事では、ローカルPC上のシェルスクリプトとcurlを使ってSlack APIを叩く方法でDMを送ります。

まず、DMを送信したいメンバーのメンバーIDを1行ずつ記述したテキストファイル(user_ids.txt)を作成します。メンバーIDの収集方法はこの記事の範囲外としますが、管理者であれば管理画面からメンバーIDリストを取得できます。管理者以外の場合はAPIを使って取得する方法があるようです。

user_ids.txt
U01234567
U02345678
U03456789
...

さらに、下記のコードをsend_dm.shのような名称でuser_ids.txtと同じディレクトリに保存します。トークンのところには、Slack側の設定時に取得したxoxp- からはじまるトークンを記入します。なお、今回の記事作成にあたって、一部生成AIのコードを参考にしました(これまで使っていた自作コードと大枠は同じでしたが、エラー処理がきちんと書かれてました)。

send_dm.sh
#!/bin/bash

# --- 設定 ---
# トークン
SLACK_TOKEN="xoxp-xxx"

# 送信メッセージ
MESSAGE="こんにちは!\nこれはテストメッセージです。"

# ユーザーIDリストのファイル名
USER_LIST_FILE="user_ids.txt"
# ------------

if [ ! -f "$USER_LIST_FILE" ]; then
    echo "エラー: $USER_LIST_FILE が見つかりません。"
    exit 1
fi

echo "送信を開始します..."

# リストを1行ずつ読み込んで処理
while IFS= read -r user_id || [ -n "$user_id" ]; do
    if [ -z "$user_id" ]; then
        continue
    fi

    echo "Sending to: $user_id"

    response=$(curl -s -X POST "https://slack.com/api/chat.postMessage" \
        -H "Authorization: Bearer $SLACK_TOKEN" \
        -H "Content-type: application/json" \
        --data "{
            \"channel\": \"$user_id\",
            \"text\": \"$MESSAGE\"
        }")

    if echo "$response" | grep -q '"ok":true'; then
        echo "  -> Success"
    else
        echo "  -> Failed: $response"
    fi

    sleep 0.5

done < "$USER_LIST_FILE"

echo "全ての処理が完了しました。"

ターミナルで実行権限をつけて実行してみます。

$ chmod +x send_dm.sh
$ ./send_dm.sh

DM送信に成功すると下記のように表示されます。

送信を開始します...
Sending to: xxxxxxx 
  -> Success
Sending to: xxxxxxx 
  -> Success
Sending to: xxxxxxx 
  -> Success
全ての処理が完了しました。

自分のアカウントからDMの送信履歴があれば成功です。

image.png

4. ユーザ毎に異なるメッセージをDMで送る場合

一方、成績を送る場合など、個別に異なるメッセージを送りたい場合もあります。その場合は、DMを送信したいユーザーのID(メンバーID)とメッセージをカンマで区切って1行ずつ記述した下記のようなCSVファイル(user_messages.csv)を作成します(メッセージの文字コードはUTF-8である必要があるので環境によっては注意が必要です)。

user_messages.csv
U01234567,おはようございます!
U02345678,こんにちは!
U03456789,こんばんは!
...

さらに、下記のコードをsend_custom_dm.shのような名称でuser_messages.csvと同じディレクトリに保存します。トークンのところには、Slack側の設定時に取得したxoxp- からはじまるトークンを記入します。なお、コード作成にあたり、一部生成AIのコードを参考にしました。

send_custom_dm.sh
#!/bin/bash

# --- 設定 ---
# トークン
SLACK_TOKEN="xoxp-xxx"

# メッセージファイルのファイル名
DATA_FILE="user_messages.csv"
# ------------

if [ ! -f "$DATA_FILE" ]; then
    echo "エラー: $DATA_FILE が見つかりません。"
    exit 1
fi

echo "個別メッセージの送信を開始します..."

# リストを1行ずつ読み込んで処理
while IFS=, read -r user_id message_text || [ -n "$user_id" ]; do
    if [ -z "$user_id" ] || [ -z "$message_text" ]; then
        continue
    fi

    echo "Sending to: $user_id"
    # echo "  Message: $message_text" 

    response=$(curl -s -X POST "https://slack.com/api/chat.postMessage" \
        -H "Authorization: Bearer $SLACK_TOKEN" \
        -H "Content-type: application/json; charset=utf-8" \
        --data "{
            \"channel\": \"$user_id\",
            \"text\": \"$message_text\"
        }")

    if echo "$response" | grep -q '"ok":true'; then
        echo "  -> Success"
    else
        echo "  -> Failed: $response"
    fi

    sleep 0.5

done < "$DATA_FILE"

echo "全ての処理が完了しました。"

ターミナルで実行権限をつけて実行してみます。

$ chmod +x send_custom_dm.sh
$ ./send_custom_dm.sh

DM送信に成功すると下記のように表示されます。

送信を開始します...
Sending to: xxxxxxx 
  -> Success
Sending to: xxxxxxx 
  -> Success
Sending to: xxxxxxx 
  -> Success
全ての処理が完了しました。

自分のアカウントからDMの送信履歴があれば成功です。

image.png

5. おわりに

以上、Slackで複数人にDMを送る方法の記録でした。メッセージを間違えると自分からのDMで間違えたメッセージが送信されるので十分注意ください。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?