本投稿は TECOTEC Advent Calendar 2020 の25日目の記事です。
情報システム部の木村です。
こんにちは
プログラムを利用してSlackに画像を投稿する記事にしようとした所。
プログラムはすぐに書けたものの、SlackAPIを使うためのトークンの取得とアップロードテストのほうが時間がかかりました。。。
毎日プログラムを書く人はたくさんいると思いますが、毎日SlakAPIのアクセストークンを発行する人はなかなかいないと思いますので
SlackAPIアクセストークンを取得してテストで使ってみる所を画像を多めで残すことにしました。
仕事でSlackを使っている方も、個人でSlackを利用している方にもAPIを使えると更にSlackを便利に活用できると思います。
- APIとか使ったこと無いです・・・
- トークンの発行もしたことないよ・・・
という人向けに書いたので是非、御覧ください。
さてまずは準備編です
今回、必要なのはSlackのアカウント(ワークスペース)です。
テストで使えるSlackはないな・・・と言う方は自分専用のSlackのワークスペースを作ってもテストすることができます!!
https://slack.com/intl/ja-jp/
こちらのURLから基本無料でアカウントの作成やワークスペースの作成が行なえます。
では普段利用している、ブラウザでそのワークスペースにログインしてから進みましょう!
さぁ Slack API へ!!
SlackAPIサイトへアクセス!
- Slack API のURLへアクセスするとこのような画面がでます。
Create New App
右側の緑色のボタン Create New App ボタンを押してアプリを作成します。
- App Name
にはアプリ名を、今回は bot-ace としました。(お好きな名前にしてください!)
- Development Slack Workspace
の項目はクリックするとリストがでると思いますので、このアプリを追加したいワークスペースを選択しましょう。
そして、灰色から緑色のボタンに変わった Create App ボタンを押して次のBasic Infomation へ進みましょう!
Baisc Infomation
こちらで色々な設定を行います。
今回やる事としては
- 権限を付与する(メッセージやファイルアップロードを許可する)
- アプリをインストールする
- APIトークンを取得する
の3本です。意外と取得までの道のりは短そうです!
では「権限を付与する」からやっていきましょう!
権限を付与する
Add features and functionality
はい、英語の意味がわからなくても大丈夫です!
Add features and functionality が真ん中あたりにあると思います。
もしも下の画像のようになっていたら
Add features and functionality をクリックすると
このように6つのブロックが出てきます。
Permissions
この中から一番右下
Permissionsをクリックすると別の画面へ移動します。
OAuth & Permissions
下の方に見えるScopesのブロック全体が見えるようにスクロールしましょう。
今回は2つある Add an OAuth Scopes のボタンのうちの上(Bot Toekn Scopes)にあるボタンを押してください。
この画面が出るとびっくりする人がいるかも知れませんが大丈夫です。親切に設定できる一覧を表示してくれています。
今押したボタン Add an OAuth Scopes が文字入力に変わっていると思いますので chat と入力してください。(途中まで入力すると候補が自動的に絞り込まれます)
絞り込まれた中から chat:write を選択するとこのようにリストに追加されます。
画像のアップロードもしたいのでもう一度、 Add an OAuth Scopes のボタンを押しましょう。 次は file と入力すると file:write が出てくると思います。
!file:read もありますので間違えないように注意しましょう。
こちらのようになれば大成功です。
もしも
file:read など別の権限が入ってしまった場合には、消したい権限の右側のゴミ箱のボタンを押せば何事もなく消えますので、間違っても心配はいりません。
では
- chat:write
- file:write
になっていることが確認できましたら、一番上までスクロールしてください。
アプリのインストールをしましょう!
アプリをインストールする
スクロールして上へ戻ると
OAuth Tokens & Redirect URLs の下に Install to Workspace のボタンが見えると思いますのでこちらを押しましょう。
すると下のような、今までと違う画面に移ります。
紫色で隠れている所はSlackの自分のユーザ名、ワークスペース名やワークスペースのアイコンですので自分のユーザ名やワークスペース名、アイコンが出ていることを確認しましょう。もし違っていてもキャンセルすれば大丈夫です。
すべてあっていたら
bot-aceが実行できる内容は?
こちらの内容を確認しておきましょう。
先程の
- chat:write
- file:write
でしたら
のようなメッセージが出ていると思います。全く違う内容の場合はPermissions まで戻って確認しましょう。
緑の許可ボタンを押すとまた先程の OAuth & Permissions に戻ると思いますが先程とちょっと違いがあります。
この紫で隠れた所に長い文字列が出ていると思います。 これがSlackAPI使うためのトークンです。アクセストークンと呼びましょう。 このアクセストークンを使用するとチャットにメッセージを送ったりファイルをアップロードすることができます。
- 関係ない人に送ってしまった
- SNSに投稿してしまった
- 質問サイトにそのまま掲載してしまった
など、誤って公開しないように気をつけて保存してください。
もし、いたずらに使用されると延々メッセージが送られてきたりするかもしれません。。。
はい。
ではこれでアクセストークンを取得できました! おめでとうございます!!!!!
とはいえ、本当にこれで使えるの・・・? と思うと思いますので
Slackがテストする場を用意をしてくれているのでやってみましょう。
SlackAPI テスト
テスト、その前に
少し、準備が必要です。
1. アプリをチャンネルに参加させる。
1. 参加したチャンネルのIDを取得する。
の2つです。
まずは
アプリをチャンネルに参加させる。
ここからは一度チャットを使うSlackへ行きます。
この画面です。
左下のAppに今回作ったアプリのbot-aceが表示されてると思います。
テスト用に slackapi-test というチャンネルを新しく作っておきました。
もちろんチャンネル名は好きな名前をつけてください。今あるチャンネルを使っても良いですし、新しく作っても構いません。
ここに bot-ace を参加させます。
真ん中あたりにある。青い文字の アプリを追加する を押しましょう 下の様な画面の中にインストールしたアプリが出ていると思います。
作成した bot-ace もあるので右側の 追加ボタン を押して追加します。
チャットの画面に全く同じ表現ではないかもしれませんが
#bot-aceさんが参加しました
などと出たのではないでしょうか?これでチャンネルへの参加は完了です!
次は参加したチャンネルのIDを手に入れます。
参加したチャンネルのIDを取得する。
左にあるチャンネルのリストから今、アプリを追加したチャンネルを右クリックして一番下のリンクをコピーを押しましょう
コピーができたらどこかエディタなどに貼ってコピーした内容を確認してみましょう。 https://xxxxxx.slack.com/archives/ABCDEFGHIJK の ABCDEFGHIJK の箇所がチャンネルのIDです。 こちらはそれぞれランダムな文字列のようになっているので自分の画面でご確認ください。 ABCDEFGHIJK はブログように加工したものです。
これでチャンネルIDも手に入れてテストするための、準備は完了です!! もうゴール寸前です!
ではテストでメッセージを送ってみましょう!
アクセス!
https://api.slack.com/methods/chat.postMessage/test
こちら、3つの箇所に値を設定してください。 - token xxxx-your-token-here に先程ゲットしたアクセストークンを貼り付けてください。 - channel チャンネルIDを貼り付けてください。(先程のABCDEFGHIJKの箇所です) - text 送信したいメッセージを入力しましょう。
入力例がこちらです。
他の項目は空のままで構いませんので緑のTest Methodボタンが見えるまで下までスクロールしてください。
送信!!
では緑のTest Method を押してみましょう この様な画面が出ると成功です。
え?っとなるかもしれませんが。 Slackのチャット画面に戻ってみてください。
届いたよ!!
とは出ませんが 先程テストのURLでtextのところに入力した文字が送られていると思います。 あとはご自身のプログラムで使用していただければ、Slackにメッセージを送ることができます。
オリジナルの通知を作ってみたりしてください。
おまけ
画像アップロード
こちら同じようにテストしようと思い https://api.slack.com/methods/files.upload/test
からアップロードしようとした所、期待通りの動きをせずうまく使えませんでした。
https://api.slack.com/methods/files.upload
ドキュメントを確認して Example にcurlの例がありましたので、実行してみた所、無事に画像がアップロードできたので一旦これで良しとしてます。
curl -F file=@dramacat.gif -F "initial_comment=Shakes the cat" -F channels=C024BE91L,D032AC32T -H "Authorization: Bearer xoxa-xxxxxxxxx-xxxx" https://slack.com/api/files.upload
を
curl -F file=@advent2020.gif -F channels=ABCDEFGHIJK -H "Authorization: Bearer アクセストークン" https://slack.com/api/files.upload
のように変えて実行しています。
- 画像ファイル名
- チャンネルID
- アクセストークン
はご自身の値と入れ替えてください。
(画像アップロードされた結果はページの最後に貼りました)
完
これでメッセージや画像をプログラムからSlackに送信することができます! 他にも別の権限を付けることもできますので、他のSlackAPIやドキュメントを確認してオリジナルのアプリを開発してみてください。
アプリの削除について
作成したアプリはもちろん削除できます。
Basic Infomation のページの一番下にDelete Appがありますので途中で分からなくなってしまった場合にはこちらから削除して最初からやり直してみてください。
「Slack」の名称およびマークはSlack Technologies,Incの商標または登録商標です。
Google and the Google logo are registered trademarks of Google LLC, used with permission.
Twitterの商標およびそのロゴ、Twitterの「T」ロゴ、Tweet、Twitterの青い鳥は、Twitter, Inc.の米国およびその他の国における登録商標または商標です。
さいごに
テコテック Advent Calendar 2020 いかがだったでしょうか?
アドベントカレンダーに毎年参加してくれている方、新しく参加してくれた方、また手厚いサポートをしてくれたCTOをはじめ記事を裏でチェックしてくれた方々にも支えられて25日分完了しました!!
2021のアドベントカレンダーは是非、テコテックの一員として一緒に書いてみませんか?
テコテックの雰囲気が分かると思いますので是非アクセスしてみてください。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
- - - - - - - - - - - - - - - - - - - - - -