SlackでOAuthを使用したAppを作成してTokenを取得

※2019/06/12 テスト項を追加・Botでのファイルアップロードにスコープ「files:write:user」の権限が必要無かった為、手順を修正

別稿で取り扱いたかった内容が汎用的だったので抜き出してみました。
手順通りに進めればSlackAPIでBotを用いてファイルのアップロードを行う為のApp作成とTokenの取得ができます。
# 手順
1. ブラウザから[Slack API: Applications | Slack](https://api.slack.com/apps)にアクセスします。  
サインアウト状態であればsign in to your Slack accountしてください。
![0_apps.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/dcb6560b-b22a-09dd-5561-628272336707.jpeg)
1. 「Create New App」をクリックします。
![1_YourApps.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/838d06cd-832d-9e70-3718-48a0833d2f7d.jpeg)  
※App未作成だと以下のような画面だと思います。  
![2_YourApps2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/7cdd92cf-887c-f4d8-92c0-7264ab60569b.jpeg)
1. 現れたダイアログでアプリ名を入力し、追加するワークスペースを選択して「Create App」をクリックしてください。  
![3_CreateNewApp.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/ea6eb0e2-669e-49cc-4664-6abf67b1393e.jpeg)
1. Basic Information画面に遷移すると思いますが、「Add features and functionality」項目内の「Bots」もしくはサイドバーメニューの「Bot Users」をクリックします。
![4_BasicInfomation.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/3d48482a-d118-5878-8b13-a35067b40ae1.jpeg)
1. 「Add a Bot User」をクリックします。
![5_BotUser.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/19e75c05-867d-d14f-eb98-3183ef6db4eb.jpeg)
1. Botユーザの表示名とユーザ名を入力して「Add Bot User」をクリックします。 

|項目名|説明|
|:--|:--|
|Display name|アカウントの表示名に該当します。 |
|Default username|アカウントの氏名に該当します。 |
|Always Show My Bot as Online|Onにすると常にそのBotがオンライン状態に見えるようになります。お好みでどちらを選択いただいても大丈夫です。|

![6_BotUser2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/3a172794-95af-b4d5-9adb-996f33dad49d.jpeg)
7. サイドバーメニューの「Basic Information」から「Install your app to your workspace」を開き、「Install App to Workspace」をクリックします。
![9_BasicInfomation.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/fb0cb9da-42d4-9cf8-2816-7bb9ebe4e478.jpeg)
8. 追加したスコープの動作をワークスペース上で許可するか問われるので、問題無ければ「許可する」をクリックしてください。
![10_Installyourapptoyourworkspace.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/023dbeea-9e27-8de3-4d0d-857ffc42352d.jpeg)
9. サイドバーメニューの「Install App」をクリックします。「Bot User OAuth Access Token」に項目のTokenが今回追加したBotユーザのTokenです。
![11_InstalledAppSettings.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/b23cb2a8-ce1c-89e5-3a4d-1aee15554e13.jpeg)

# テスト
取得したTokenを用いてfiles.upload APIが使用できるかテストできるページが用意されており、確認が可能です。

1. ブラウザから[files.upload method | Slack](https://api.slack.com/methods/files.upload/test)にアクセスします。
1. 下図のように適当に項目を埋めて「Test Method」をクリックします。  
※上項手順で取得したTokenの入力は必須です。
![SlackTester.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/638f0ad5-e9e1-1752-1827-62c8bb92c559.jpeg)  
下図のようにSlackに通知が届きます！  
![FileUploadTest.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/d622bd6d-5dea-0f77-4954-0753888d7ec4.jpeg)

# 番外編：作成したAppで別のslack api呼び出しを許可する場合
上項手順ではBotを用いたファイルのアップロードが可能となりましたが、別のslack apiを使用する場合は使用するslack apiが必要とするスコープの許可を行います。

1. サイドバーメニューの「OAuth & Permissions」をクリックします。  
※サイドバーメニューの「Basic Information」から「Add features and functionality」を開き、「Permissions」をクリックしても開けます。  
1. 「Scopes」項目の「Select Permission Scopes」から使用するAPIに必要なスコープを選択し、「Save Changes」をクリックします。  
    - APIに必要なスコープは[OAuth Scopes to API methods](https://api.slack.com/docs/oauth-scopes)にて確認できます。  
    - [OAuth Scopes to API methods](https://api.slack.com/docs/oauth-scopes)ページの「Associated Methods」列から使用したいAPIを探し、含まれている「OAuth Scope」を全て選択してください。  
    - 「Select Permission Scopes」にて選択するリストの右側に記載のスコープが「OAuth Scopes to API methods」ページの「OAuth Scope」列と対応しています。  
![8_Scopes.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269716/fc2603a8-4652-8602-fcc8-528e49372520.jpeg)

# 参考
[Legacy tokens | Slack](https://api.slack.com/custom-integrations/legacy-tokens)
[Slack API 推奨Tokenについて - Qiita](https://qiita.com/ykhirao/items/3b19ee6a1458cfb4ba21)
[SlackでOAuthを利用して BOT投稿 するための アクセストークン を取得する方法 - UTALI](https://www.utali.io/entry/2016/10/03/004421)
[OAuth Permission scopes | Slack](https://api.slack.com/docs/oauth-scopes)