Slack API+PHPでユーザーにダイレクトメッセージを送信
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でダイレクトメッセージを送るためには、各ユーザーのユーザー名(表示名とは別)が必要になります。自分のユーザー名は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の管理画面からアイコンを設定する方法はこちら↓