1. 비즈니스 로직에서 Laravel 함수인 notify(new SlackNotification())
를 호출합니다.
2. notify()
를 호출하면, SlackNotification
에서 전처리 작업을 합니다.
3. Slack
에 메세지가 나타납니다.
composer require laravel/slack-notification-channel
여기서 slack 알림 전처리 작업을 합니다.
php artisan make:notification SlackNotification
<?php
namespace App\Notifications;
use ...
class SendNotification extends Notification
{
use Queueable;
private $message;
public function __construct($message)
{
$this->message = $message;
}
public function via($notifiable)
{
return ['slack'];
}
public function toSlack($notifiable): SlackMessage
{
return (new SlackMessage)
->from('Laravel')
->image('https://laravel.com/img/favicon/favicon.ico')
->content($this->message);
}
}
2-1. __constructor
에서 보낼 메세지를 설정했습니다.
2-2. via()
에서default
값인 mail
에서 slack
으로 변경해줍니다.
2-3. 위에서 설치한 slack notification
패키지가 잘 설치 되면 toSlack
을 사용 할 수있습니다.
toMail
또한 toSlack
으로 변경해 줍니다.
2-4. 여기서 매개변수인 $notifiable
은 이후 알림을 보내기 위해 use Notifiable
한 Model
의 값을 가져옵니다.
// Models/User.php
class User extends Authenticatable
{
use Notifiable;
}
// NotificationController.php
class NotificationController{
public function slackNotification(){
//Notifiable을 use한 Model인 user에서 notify를 호출할 수 있습니다.
// 1. 한번 호출
$user = User::first();
$message = '라라벨이 말합니다.';
$user->notify(new SlackNotification($message));
// 2. 전부다 호출
$users = User::all();
Notification::send($users, new SlackNotification($message));
// 위에서 말한 매개변수인 $notifiable은 여기의 각 $user가 됩니다.
// $message는 생성자의 인자로 사용 되겠지요.
}
}
3-1. 2022-7월 기준 Slack 찾아보기
에서 앱
을 클릭해 줍니다.
3-2. incoming-webhook을 찾아 클릭해 줍니다.
3-3. Slack에 추가합니다.
3-4. 원하는 채널을 선택해 줍니다.
3-5. 웹 후크 URL의 모든 URL을 복사해 둡니다.
<?php
class User extends Authenticatable
{
use Notifiable;
public function routeNotificationForSlack(): string
{
return config('services.notification.slack_webhook_url');
}
}
// config/services.php
// config에 추가
'notification' => [
'slack_webhook_url' => env('SLACK_WEBHOOK_URL'),
]
//.env 에 추가
SLACK_WEBHOOK_URL=https://hooks.slack.com/services...
####라우트 등록 및 실행
// web.php
Route::get('/slack-notification', [NotificationController::class, 'slackNotification']);