LaravelでのSlack通知

LaraveでSlackに通知したいと思い、
色々と調べながらやったので、忘れないうちにメモ。

前提

Laravelのバージョン

$ php artisan --version
Laravel Framework 5.8.36

SlackのWebhook URLを準備

Slackへ通知を行うために、Slack APIの中で、
Incoming WebhooksをActiveにする必要がある。

公式リファレンスを確認

関係しそうなところをピックアップ

通知用のフォルダなどを作る

上記で、まずは、
必要なNotificationsのフォルダ、ファイルを作る

Slack通知用に必要なモジュール追加

Slack通知使うには、必要なので、composerで追加。

SlackのWebhook URLを設定

Slack通知のための「Webhook URL」を、
App\Userにメソッドを追加する。

送信内容の設定のためのメソッドを追加

最初に作ったNotificationsのファイル(クラス)に、
上のように「toSlackメソッド」を追加。

通知の送信

2パターンやり方があるらしいが、
「Notifiableトレイとの使用」
の方のやり方で自分は対応した。

上記の解釈としては、黄色と水色に分けるとわかりやすいと思う。

App\Userモデルのnotifyメソッドに、
Notificationsの中に作ったクラスのインスタンスを渡すだけ。

実際のソースコード

実際のソースコードがあった方が良いと思うので、
簡単に設定して通知確認したくらいのコードを載せておく

<?php

namespace App\Notifications;

use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\SlackAttachment;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Support\Facades\Log;

class Slack extends Notification
{
    use Queueable;
      :
    public function toSlack($notifiable)
    {
      return (new SlackMessage)
            ->content('One of your invoices has been paid!');
    }
}
 :
use App\Notifications\Slack;
use App\User;
 :
Artisan::command('slack', function () {
  $user = new User();
  $user->notify(new Slack());
});
php artisan slack

実行すると、こんな感じで通知がくる