Slack Web APIを使ってアカウントに直接メッセージを送る
Slack Web APIを利用して、指定したslackのユーザアカウントに向けてシステムからメッセージを送信する方法についての解説です。メッセージを送信する部分はPHPのcURLを使っています。
本文書では、cURLをある程度理解している方を対象に記載しています。cURLについて理解が不足している方は、まず下記の記事に目を通してみてください。
Slack Web APIとは
Slack Web APIを利用するとSlackワークスペースのユーザの情報へのアクセスやユーザ、チャネルへ自作のプログラムから直接メッセージを送信することができます。
Slack Web APIのアプリケーション作成
Slack Web APIを使用するためには、Slack上でアプリケーションを作成する必要があります。アプリケーションの作成を行わなければSlack Web APIを使用することができません。
Slack apiサイトにアクセスします。SlackにWEB経由でログインする必要があるためSlackのユーザIDとパスワードが必要になります。
真ん中にあるStart Buildingボタンをクリックします。
Slackアプリケーションの作成画面(Create a Slack App )が表示されるのでApp Nameには任意の名前、Development Slack Workspaceには所属しているSlackのWorkspaceを選択してください。複数のWorkspaceに所属している場合は、Slack Web APIを使用したいWorkspaceを選択してください。入力が完了したら、Create Appボタンをクリックしてください。
英語のメニューが並んでいますが、Permissionsを選択してください。
Permission画面では、アプリケーションで使用する機能の範囲やIPによるアクセス制限など許可に関する設定を行います。画面の下部にあるScopesに移動します。
ここではSlack Web APIで利用したい機能の選択を行います。行いたい処理はAPIメソッドとして分類されており、Scopeを通してどのAPIを使用するのかを選択することができます。選択することでそのScopeの使用の許可が与えられ利用することが可能になります。
ユーザとしてメッセージを送りたい場合は、Send messages as userを選択します。Scopeは複数選択することが可能です。
選択が完了したら、Save Changesボタンをクリックしてください。Scopeが未設定の時はクリックができなかった上部のInstall App to Workspaceがクリック可能になります。ワークスペースにアプリケーションをインストールすることで作成したアプリケーションが使用可能となります。
インストールボタンをクリックすると使用するための設定が完了します。
インストール完了後、OAuth Access Tokenが画面に表示されます。このTokenを使用すれば自分のSlack Workplaceに登録されたユーザへだれでもメッセージをおくることができるので、このTokenの情報を漏らさないように管理する必要があります。
PHPプログラムの作成
slack上でのアプリケーションの作成も完了し、Tokenが取得できたのでcURLとPHPの知識があればここから作業は特別難しいことはありませんので、気楽に読み進めてください。
ユーザにメッセージを送信するためのプログラムは下記の通りです。
slackからの情報で設定する箇所は3点あり、あとはcURLの設定なのでSlackに限定される設定ではありません。ここではslackに関連する3点のみ説明を行っていきます。3点は(1),(2),(3)です。
$headers = [
'Authorization: Bearer xoxp-XXXXXXXXXXXXXXXXXXXXXX', //(1)
'Content-Type: application/json;charset=utf-8'
];
$url = "https://slack.com/api/chat.postMessage"; //(2)
//(3)
$post_fields = [
"channel" => "@XXXXXX",
"text" => "初めてのSlack Web APIからのメッセージ",
"as_user" => true
];
$options = [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($post_fields)
];
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
(1)については、Slack api上でアプリケーションインストールを行った後に表示されていたTokenを指定します。ここではXXXXXになっていますが、表示されていたTokenを入れてください。
(2)についてはアプリケーション作成時に選択したchat:write:userのScopeに関連しており、chat:write:userを使用する際にはこのURLを利用する必要があります。chat.postMessageについての使用方法についてはSlackのマニュアルに記載されているためその内容を元に(3)のpost_fieldsを設定していきます。
Required scope(必要とされるScope)にchat:write:userが指定されているので、このScopeの許可をアプリケーション作成時に行っていないと使用することはできません。
それぞれの選択したScopeにより(2)で設定するURLが変わります。
マニュアルのArguments以下に記載されている項目が(3)のpost_fieldsで設定できる箇所になります。ここでは3つのパラメータを設定しています。
channelはどこに送信するか設定する箇所で@+ユーザ名を入れるとユーザに直接メッセージを送信することができます。
as_userパラメーターはデフォルトではfalseに設定されており、trueに設定しなければ自分のアカウントではなくbotからメッセージ送信になります。
textには送りたいメッセージを入れます。
実行すると送信先に設定したユーザへメッセージが送信されます。as_userをtrueに設定しているので送信元は、slack上でアプリケーションの作成を行ったユーザになります。
戻り値について
実行のレスポンスは下記のようにJSON文字列で戻されてきます。成功した場合はokにtrue、失敗した場合はokにfalseが入るので、エラーの識別はokで行うことができます。
{"ok":true,"channel":"XXXXXX","ts":"1561437471.000200","message":{"bot_id":"BKV4TCTQD","type":"message","text":"\u521d\u3081\u3066\u306eSlack Web API\u304b\u3089\u306e\u30e1\u30c3\u30bb\u30fc\u30b8","user":"XXXXXXX","ts":"1561437471.000200"}}
指定したTokenに誤りがある場合は、okはfalseでerrorにはinvalid_authが設定されて戻されます。
"{"ok":false,"error":"invalid_auth"}"
Slackメッセージの改行について
メッセージの改行を行いたい場合は改行コード\nをつけると実行可能です。ダブルクオテーションを使ってください。シングルクォーテーションの場合は改行が行われません。
$text = "改行を行いたい場合は\n改行コードを利用します。";