[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
ただいまコメントを受けつけておりません。
Jenkins に Google のアカウントでログインできるプラグインが便利だったので Slack でやれないかなーって思って調べてみる。
なお、そういうプラグインはさっとググってみたところなかった。しょんぼり。
おそらく以下が出来ればできそう。
Slack API: Applications | Slack からアプリを登録する。アプリを作る際はワークスペース一つとアプリの名前を登録する必要がある。ワークスペースを持っていなければ適当に調達しよう。ここを読んでいる時点でない、ということはないと思うが……
3つの値をメモする。
アプリを作ったら Slack API: Applications | Slack 等から先に作ったアプリを開く。
まず、Client ID と Client Secret を取得する。アプリを開いてちょっと下にある App Credentials の Client ID と Client Secret の内容をメモする。前sぢゃは012345678901.012345678901
とかそんな感じの . に区切られた数字の羅列であるはず。後者はローマ字の小文字と数字の混じった文字列のはず。Show ボタンをクリックすれば読めるようになる。
さらに App Credentials の上にある Add features and functionality から Permissions を開く。
開くと Install App to Workspace なる緑色のボタンがあるので叩く。なんか尋ねられるので Authorize をクリックし承認する。意味が不安なら頑張って読んでください。
承認すると OAuth & Permissions の画面に戻るので OAuth Access Token をメモる。OAuth Access Token は xoxp
で始まる文字列のはず。t例えば xoxp-123456789012-123456789012-123456789012-4268abcdef12abcde12a12a1abc123a0
等である。これは他の人にはあまり見せないこと。この例もスタイルを似せつつ適当こいてる。
先の Tokens for Your Workspace の下にある Redirect URLs の Add New Redirect URL をクリックし適当な URL を入れる。実際には OAuth をつかって認証した直後にジャンプしてほしいページの URL を入れる。追加したら直下の Save URLs をクリックする。
以下の形式になる
https://slack.com/oauth/authorize?client_id=${Client ID}&scope=${付与される権限}&redirect_uri=${リダイレクト先の URL}
パラメータ名 | 値 | 例 |
---|---|---|
client_id | 先に取得した Client ID | 012345678901.012345678901 |
scope | OAuth Permission scopes | Slack 記載の認可する内容を スペースで繋げたものを JS の encodeURIComponent で encode したもの |
channels%3Ahistory%20users%3Aread |
redirect_uri | Redirect URLs に登録した URL のいずれかを JS の encodeURIComponent で encode したもの |
http%3A%2F%2Fshunshun94.web.fc2.com%2Fsweet%2F |
state | アクセスが意図したものであることを確認するための記号。 Slack アカウントでログインする先のアプリが発行する文字列 |
rndString_k2SgIOUn |
team | どのワークスペースを使ってログインするのかを指定する。 これがないとユーザはどのワークスペースを使うのか判断した上でログインしないといけなくて面倒。 自明なら不要かもしれない。 https://my_example_workspace_1549.slack.com/ なら my_example_workspace_1549 |
my_example_workspace_1549 |
例をそのまま使うと次のような感じになる。
https://slack.com/oauth/authorize?client_id=012345678901.012345678901&scope=channels%3Ahistory%20users%3Aread&redirect_uri=http%3A%2F%2Fshunshun94.web.fc2.com%2Fsweet%2F&team=my_example_workspace_1549&state=rndString_k2SgIOUn
アクセスしてみると Slack のログイン画面が出てくるので、ログインするとリダイレクト先のページにジャンプできるはずだ。
リダイレクト先のページにジャンプした際、 URL に code=xxx..
という記載があるはずなのでこれをメモする。 &state=...
もあると思うがこちらは検証用に使うものなので使うなら使えばいいし、捨てるなら捨てるでよい。
以下では curl を使う。curl でできるなら大体のプログラミング言語でやれるだろう。
curl -X POST -H "Content-Type:application/x-www-form-urlencoded" \ -d "redirect_uri=${リダイレクト先の URL}&\ client_id=${Client ID}&\ client_secret=${Client Secret}&\ code=${code}" \ https://slack.com/api/oauth.access
パラメータ名 | 値 | 例 |
---|---|---|
client_id | OAuth 用ログイン URL で使ったのと同じ値 | 012345678901.012345678901 |
client_secret | 先に取得した Client Secret | 5yhxduxxevewqu79h3bsw7z2z1hmkavy |
redirect_uri | OAuth 用ログイン URL で使ったのと同じ値 | http%3A%2F%2Fshunshun94.web.fc2.com%2Fsweet%2F |
code | 先にメモした code | 012345678901.012345678901.81pysiz1sekdpze75hsrrqh3oyfdbqfmaqjtusko9emur4zh12ydorx3rrovyjxz |
上手くいくと以下のような返答が返ってくる。この access_token をメモること。
{ "ok": true, "access_token": "xoxp-012345678901-012345678901-012345678901-fsrieoikdsdymo1e8wv8fydoupkyikox", "scope": "identify,bot,channels:history,channels:read,users:read,chat:write:user", "user_id": "JO88AWYL3", "team_name": "私のSlack", "team_id": "ZI1F3NKB6" }
割と色々やれる。
curl -X GET -H "Authorization: Bearer ${先に取得した access_token}" \ https://slack.com/api/users.list
curl -X POST -H "Content-type: application/json" \ -H "Authorization: Bearer ${先に取得した access_token}" \ -d "{\"channel\":\"random\", \"text\": \"にゃーん\"}" \ https://slack.com/api/chat.postMessage
ただいまコメントを受けつけておりません。