いただいたメッセージへのご返信はこちら

Slack API+PHPでユーザーにダイレクトメッセージを送信

2020年11月24日

Slack APIを使って、ワークスペース内のユーザーにダイレクトメッセージを送る方法について解説しています。

Slack appの作成

Slack appが未作成の場合は、まず新しいappを作成する必要があります。

上のリンクを参考に、appを作成しましょう。

Slack appの権限を設定

Slack appを作成したら「メッセージを送信するための権限」と、後で必要になる「ユーザー情報を取得するための権限」を、appに付与します。

Slack app設定画面の「OAuth & Permissions」→「Scopes」で、「im:write」と「users:read」の権限、Slack上のbotとしてダイレクトメッセージを送信するための「chat:write」を追加してください。

Slack API+PHPでユーザーにダイレクトメッセージを送信

ユーザー名を確認

ユーザーにSlack APIでダイレクトメッセージを送るためには、各ユーザーのユーザー名(表示名とは別)が必要になります。
自分のユーザー名はPC版Slackの左上に表示されているので簡単に分かるんですが、ワークスペースに参加している他のユーザーのユーザー名は、Slack上から確認する事が出来ません。

そこでまず、Slack APIのusers.listを使って、メッセージを送りたいユーザーのユーザー名を確認します。

https://slack.com/api/users.list?token=Slack APPのトークンID
上のURLにブラウザでアクセスする事で、ワークスペースに参加している全ユーザーの、ユーザー名を含む情報が取得できます。
「Slack APPのトークンID」は、ご利用のSlack appの管理画面の「Install App」から確認する事が出来ます。
※取得した情報の「name」の項目に入っているのが、ユーザー名です。

CURLでユーザーにダイレクトメッセージを送信

Slack appの設定が完了していれば、以下のコードでダイレクトメッセージを送信する事ができます。

上の「ユーザー名を確認」で取得したユーザー名に「@」を付けて指定します。
$message = "ダイレクトメッセージ送信テスト";

$url = "https://slack.com/api/chat.postMessage";
$post = [];
$post['token'] = 'Slack APPのトークンID';
$post['channel'] = '@ユーザー名';
$post['icon_url'] = 'アイコンに指定したい画像のURL';
$post['text'] = $message;

$response = curlSend($url, $post);  

//CURLで通信
function curlSend($url, $post) {
    $conn = curl_init();
    curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($conn, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($conn, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($conn, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($conn, CURLOPT_HEADER, false);
    curl_setopt($conn, CURLOPT_URL, $url);
    curl_setopt($conn, CURLOPT_POST, true);
    curl_setopt($conn, CURLOPT_POSTFIELDS, $post);
    $response = curl_exec($conn);

    if (!curl_errno($conn)) {
        $header = curl_getinfo($conn);
    }

    curl_close($conn);

    if ($header['http_code'] != '200') {
        //エラー
        return false;
    }

    return $response;
}



アイコンの画像を指定する

管理画面の「Display Information」でアイコンの画像を未指定の場合、上のコードの「icon_url」で、Web上にアップされている画像のURLを指定する事で、アイコンの画像を変更する事が出来ます。

「Display Information」で画像を指定済みの場合、そちらの画像が優先され、一度「Display Information」で指定した画像は削除する事が出来ないため「icon_url」メソッドで書き換える事はできません。


Slack Appの管理画面からアイコンを設定する方法はこちら↓


Slack API+PHPでユーザーにダイレクトメッセージを送信
created by Rinker
宝島社
¥639 (2024/12/26 20:32:47時点 Amazon調べ-詳細)
この記事を書いた人
せみやま せみやま
生き物が大好きなWebエンジニアです。
身近な自然を楽しみながら暮らしています。

生き物とサブカルのポッドキャスト「セミラジオ」を配信中です!

詳細なプロフィール