laravel-slack-apiを使用して、Laravelからslackへ通知する

# はじめに
Laravelでは`slack-notification-channel`というslackへ通知する仕組みが存在しています。
https://laravel.com/docs/5.8/notifications#slack-notifications

しかし、`Incoming Webhook`を使用しているためfile upload等をすることができません。
今回自分はアプリケーションログをfile形式でslackへ通知したかったので、[laravel-slack-api](https://github.com/vluzrmos/laravel-slack-api)ライブラリを使用してみました。
今回は使い方の紹介となります。
※最終コミットが2016年でしたが、問題なく動きました。


**アプリケーションログをfile形式でslackへ通知した際のイメージです。**
<img width="757" alt="スクリーンショット 2019-05-26 12.58.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/2b77606c-db1e-6783-f9cb-f0bf4ad854f7.png">

# 設定
[laravel-slack-api](https://github.com/vluzrmos/laravel-slack-api)のreadme.mdに沿って進めています。

また、slack botの設定はこの記事の最後に手順を書いております。

## インストール
```
composer require vluzrmos/slack-api
```

## providers、config等の追加

```config/app.php
'providers' => [
     Vluzrmos\SlackApi\SlackApiServiceProvider::class,
 ]

//...

'aliases' => [
    'SlackApi'              => Vluzrmos\SlackApi\Facades\SlackApi::class,
    'SlackChannel'          => Vluzrmos\SlackApi\Facades\SlackChannel::class,
    'SlackChat'             => Vluzrmos\SlackApi\Facades\SlackChat::class,
    'SlackGroup'            => Vluzrmos\SlackApi\Facades\SlackGroup::class,
    'SlackFile'             => Vluzrmos\SlackApi\Facades\SlackFile::class,
    'SlackSearch'           => Vluzrmos\SlackApi\Facades\SlackSearch::class,
    'SlackInstantMessage'   => Vluzrmos\SlackApi\Facades\SlackInstantMessage::class,
    'SlackUser'             => Vluzrmos\SlackApi\Facades\SlackUser::class,
    'SlackStar'             => Vluzrmos\SlackApi\Facades\SlackStar::class,
    'SlackUserAdmin'        => Vluzrmos\SlackApi\Facades\SlackUserAdmin::class,
    'SlackRealTimeMessage'  => Vluzrmos\SlackApi\Facades\SlackRealTimeMessage::class,
    'SlackTeam'             => Vluzrmos\SlackApi\Facades\SlackTeam::class,
]
```

```config/services.php
'slack' => [
    'token' => env('SLACK_TOKEN'),
]
```

slackで発行されたトークンを記載する

```　.env
SLACK_TOKEN='xoxb-xxxxx'
```

# 使い方
`$php artisan tinker`から簡単に動作確認できます。

### シンプルなメッセージを送る

```php
SlackChat::message('#test', 'ピピッカチュウ');
```
<img width="390" alt="スクリーンショット 2019-05-27 22.25.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/c2c1a140-aadd-69b0-efc9-5a06c67facd0.png">

### テキストをfileとして送る

```php
SlackFile::upload([
    'filename' => 'ピーカ.txt',
    'initial_comment' => 'ピカピカーチュ',
    'content' => "ピーカ、チューウ！ピーカ、チューウ！ピーカ、チューウ！ピーカ、チューウ！\n",
    'channels' => '#test'
]);
```
<img width="739" alt="スクリーンショット 2019-05-27 22.14.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/f6c88d4c-6b89-6be5-3fcd-a27f1c072de2.png">

---

# slackボットの設定
下記はslackボットの設定方法です。

### slack Appの作成
[slack api](https://api.slack.com/)から設定を行う。
<img width="559" alt="スクリーンショット 2019-05-27 21.48.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/8bd5490b-30e7-b6c2-2169-e072d34beefe.png">

### Bot Userの作成 
<img width="921" alt="スクリーンショット 2019-05-27 21.50.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/8a1162c2-5175-301c-4fbb-2425a9e5091a.png">

### scopeの設定
botから投稿する場合は`chat:write:bot`を付与する。
<img width="671" alt="スクリーンショット 2019-05-27 21.51.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/59ffeba3-7f61-549c-310e-662980426e8d.png">

### 連携許可
<img width="425" alt="スクリーンショット 2019-05-27 21.51.46.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/f2718013-02ce-dec2-a2c0-52a362c49b9d.png">

### Bot User OAuth Access Token
Bot User OAuth Access Tokenをlaravel側のslack tokenに設定してください。
<img width="918" alt="スクリーンショット 2019-05-27 21.52.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/df888b0d-5595-595c-aba5-94583d729d45.png">

### Botを対象のチャンネルに追加
<img width="658" alt="スクリーンショット 2019-05-27 21.52.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/226008/f5df5104-73ae-0c1c-4419-4d146b9ccea9.png">