Slackで画像を投稿するその前に・・・SlackAPIアクセストークンを取得しよう!

本投稿は 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サイトへアクセス!

https://api.slack.com/apps

  • Slack API のURLへアクセスするとこのような画面がでます。 f:id:teco_kimura:20201222195615p:plain

Create New App

右側の緑色のボタン Create New App ボタンを押してアプリを作成します。

  • App Name

にはアプリ名を、今回は bot-ace としました。(お好きな名前にしてください!)

  • Development Slack Workspace

の項目はクリックするとリストがでると思いますので、このアプリを追加したいワークスペースを選択しましょう。

f:id:teco_kimura:20201222200812p:plain

そして、灰色から緑色のボタンに変わった Create App ボタンを押して次のBasic Infomation へ進みましょう!

Baisc Infomation

f:id:teco_kimura:20201222201132p:plain

こちらで色々な設定を行います。
今回やる事としては

  1. 権限を付与する(メッセージやファイルアップロードを許可する)
  2. アプリをインストールする
  3. APIトークンを取得する

の3本です。意外と取得までの道のりは短そうです!

では「権限を付与する」からやっていきましょう!

権限を付与する

Add features and functionality

はい、英語の意味がわからなくても大丈夫です!
Add features and functionality が真ん中あたりにあると思います。

もしも下の画像のようになっていたら

f:id:teco_kimura:20201222201306p:plain

Add features and functionality をクリックすると

f:id:teco_kimura:20201222201346p:plain

このように6つのブロックが出てきます。

Permissions

この中から一番右下

f:id:teco_kimura:20201222201438p:plain

Permissionsをクリックすると別の画面へ移動します。

OAuth & Permissions

f:id:teco_kimura:20201222201524p:plain

下の方に見えるScopesのブロック全体が見えるようにスクロールしましょう。

f:id:teco_kimura:20201222201608p:plain

今回は2つある Add an OAuth Scopes のボタンのうちの上(Bot Toekn Scopes)にあるボタンを押してください。

f:id:teco_kimura:20201222201940p:plain

この画面が出るとびっくりする人がいるかも知れませんが大丈夫です。親切に設定できる一覧を表示してくれています。
今押したボタン Add an OAuth Scopes が文字入力に変わっていると思いますので chat と入力してください。(途中まで入力すると候補が自動的に絞り込まれます)

f:id:teco_kimura:20201222202116p:plain

絞り込まれた中から chat:write を選択するとこのようにリストに追加されます。

f:id:teco_kimura:20201222202159p:plain

画像のアップロードもしたいのでもう一度、 Add an OAuth Scopes のボタンを押しましょう。 次は file と入力すると file:write が出てくると思います。

f:id:teco_kimura:20201222202329p:plain

file:read もありますので間違えないように注意しましょう。

f:id:teco_kimura:20201222202410p:plain

こちらのようになれば大成功です。
もしも file:read など別の権限が入ってしまった場合には、消したい権限の右側のゴミ箱のボタンを押せば何事もなく消えますので、間違っても心配はいりません。

では

  • chat:write
  • file:write

になっていることが確認できましたら、一番上までスクロールしてください。

f:id:teco_kimura:20201222202534p:plain アプリのインストールをしましょう!

アプリをインストールする

f:id:teco_kimura:20201222202902p:plain

スクロールして上へ戻ると
OAuth Tokens & Redirect URLs の下に Install to Workspace のボタンが見えると思いますのでこちらを押しましょう。
すると下のような、今までと違う画面に移ります。

f:id:teco_kimura:20201222203108p:plain 紫色で隠れている所はSlackの自分のユーザ名、ワークスペース名やワークスペースのアイコンですので自分のユーザ名やワークスペース名、アイコンが出ていることを確認しましょう。もし違っていてもキャンセルすれば大丈夫です。

すべてあっていたら

bot-aceが実行できる内容は?

こちらの内容を確認しておきましょう。
先程の

  • chat:write
  • file:write

でしたら

f:id:teco_kimura:20201222203416p:plain

のようなメッセージが出ていると思います。全く違う内容の場合はPermissions まで戻って確認しましょう。

緑の許可ボタンを押すとまた先程の OAuth & Permissions に戻ると思いますが先程とちょっと違いがあります。 f:id:teco_kimura:20201222203645p:plain

この紫で隠れた所に長い文字列が出ていると思います。 これがSlackAPI使うためのトークンです。アクセストークンと呼びましょう。 このアクセストークンを使用するとチャットにメッセージを送ったりファイルをアップロードすることができます。

  • 関係ない人に送ってしまった
  • SNSに投稿してしまった
  • 質問サイトにそのまま掲載してしまった

など、誤って公開しないように気をつけて保存してください。
もし、いたずらに使用されると延々メッセージが送られてきたりするかもしれません。。。

はい。

ではこれでアクセストークンを取得できました! おめでとうございます!!!!!

とはいえ、本当にこれで使えるの・・・? と思うと思いますので
Slackがテストする場を用意をしてくれているのでやってみましょう。

SlackAPI テスト

テスト、その前に

少し、準備が必要です。
1. アプリをチャンネルに参加させる。
1. 参加したチャンネルのIDを取得する。
の2つです。

まずは

アプリをチャンネルに参加させる。

ここからは一度チャットを使うSlackへ行きます。

f:id:teco_kimura:20201222205011p:plain この画面です。
左下のAppに今回作ったアプリのbot-aceが表示されてると思います。

テスト用に slackapi-test というチャンネルを新しく作っておきました。
もちろんチャンネル名は好きな名前をつけてください。今あるチャンネルを使っても良いですし、新しく作っても構いません。
ここに bot-ace を参加させます。

f:id:teco_kimura:20201222205245p:plain

真ん中あたりにある。青い文字の アプリを追加する を押しましょう 下の様な画面の中にインストールしたアプリが出ていると思います。

f:id:teco_kimura:20201222205400p:plain

作成した bot-ace もあるので右側の 追加ボタン を押して追加します。

f:id:teco_kimura:20201222205501p:plain チャットの画面に全く同じ表現ではないかもしれませんが
#bot-aceさんが参加しました などと出たのではないでしょうか?これでチャンネルへの参加は完了です!

次は参加したチャンネルのIDを手に入れます。

参加したチャンネルのIDを取得する。

左にあるチャンネルのリストから今、アプリを追加したチャンネルを右クリックして一番下のリンクをコピーを押しましょう

f:id:teco_kimura:20201224105056p:plain コピーができたらどこかエディタなどに貼ってコピーした内容を確認してみましょう。 https://xxxxxx.slack.com/archives/ABCDEFGHIJK の ABCDEFGHIJK の箇所がチャンネルのIDです。 こちらはそれぞれランダムな文字列のようになっているので自分の画面でご確認ください。 ABCDEFGHIJK はブログように加工したものです。

これでチャンネルIDも手に入れてテストするための、準備は完了です!! もうゴール寸前です!

ではテストでメッセージを送ってみましょう!

アクセス!

https://api.slack.com/methods/chat.postMessage/test

f:id:teco_kimura:20201222204532p:plain

こちら、3つの箇所に値を設定してください。 - token xxxx-your-token-here に先程ゲットしたアクセストークンを貼り付けてください。 - channel チャンネルIDを貼り付けてください。(先程のABCDEFGHIJKの箇所です) - text 送信したいメッセージを入力しましょう。

入力例がこちらです。 f:id:teco_kimura:20201222210701p:plain

他の項目は空のままで構いませんので緑のTest Methodボタンが見えるまで下までスクロールしてください。

f:id:teco_kimura:20201222210825p:plain

送信!!

では緑のTest Method を押してみましょう この様な画面が出ると成功です。

f:id:teco_kimura:20201222211633p:plain

え?っとなるかもしれませんが。 Slackのチャット画面に戻ってみてください。

f:id:teco_kimura:20201222211732p:plain

届いたよ!!

とは出ませんが 先程テストのURLでtextのところに入力した文字が送られていると思います。 あとはご自身のプログラムで使用していただければ、Slackにメッセージを送ることができます。

オリジナルの通知を作ってみたりしてください。

おまけ

画像アップロード

こちら同じようにテストしようと思い https://api.slack.com/methods/files.upload/test

からアップロードしようとした所、期待通りの動きをせずうまく使えませんでした。

f:id:teco_kimura:20201223113355p:plain 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がありますので途中で分からなくなってしまった場合にはこちらから削除して最初からやり直してみてください。 f:id:teco_kimura:20201223184239p:plain

「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のアドベントカレンダーは是非、テコテックの一員として一緒に書いてみませんか?
テコテックの雰囲気が分かると思いますので是非アクセスしてみてください。

 ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓  ↓

www.tecotec.co.jp

- - - - - - - - - - - - - - - - - - - - - -

f:id:teco_kimura:20201223113829p:plain