それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

laravel で通知(slack/mattermost)を試す。

laravel で通知(slack/mattermost)を試す。

laravel で slack に通知(メッセージ送信)をする。

slack 互換のapi がある、mattermostでも「内向きウェブフック」を使えば同じように通知が出来る。

準備

  • webhook incoming のアドレス(URL)
  • composer でパッケージインストール

作業の流れ

  • 通知クラスを作る
  • 通知テスト用コマンドを作る
  • 通知(メッセージ送信)を実行する

クラスを作る

php artisan make:notification MyFirstNotification
php artisan make:command SendNotifySlackSample

通知クラスを作る

<?php

namespace App\Notifications;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\SlackMessage;
use Illuminate\Notifications\Messages\MailMessage;

class MyFirstNotification extends Notification {
  use Queueable;
  
  public function __construct () {
  }
  public function via ( $notifiable ) {// 通知経路を書く、利用可能名を登録
    return ['slack'];
  }
  public function toSlack($notifiable){// 内容を書く。通知'slack'指定時に呼びされる。
    $msg = new SlackMessage();
    $msg->content('Hello from Laravel');
    return $msg;
  }
  public function toArray ( $notifiable ) {
    return [];
  }
}

コマンドを作る

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Notification;
use App\Notifications\MyFirstNotification;

class SendNotifySlackSample extends Command {
  protected $signature = 'notify:slack';
  protected $description = '通知サンプル';
  public function handle () :int {
      // 第2引数に、内向きウェブフック(incoming webhook)で作成されたアドレスを指定
    Notification::route('slack','https://mm.example.com/hooks/od6h5kme1ixxxxxxxxxx')
      ->notify(new MyFirstNotification() );
    return 0;
  }
}

mattermost のときはslackのURLの代わりに、Mattermostで作成したアドレスを入れるだけである。互換性って便利。

Slack/mattermostにメッセージ送信

php artisan notify:slack

これで無事にSlackチャンネルに届くはずである。

うまく届かないとき

curl コマンドで Slack/Mattermostのアドレスが正しく動くかテストしておこう。

URL=https://mm.example.com/hooks/od6h5kme1ixxxxxxxxxx'
curl -i -X POST \
   -H "Content-Type: application/json"\
   -d "{\"text\": \"Hello, this is some text\nThis is more text. :tada:\"}" \
  $URL 

送信ができたら

laravel では、通知はさらに抽象化してパーツに組み合わせて利用する。

  • 通知をためておいてまとめて送信するキュー機能
  • イベント発生・イベントリスナを登録するイベント機能
  • ユーザーごとに通知先を設定するUserモデル機能

などがあるので、組み合わせて使っていく。