🔔
【Laravel11】SlackMessageインスタンス生成時にチャンネル指定する方法
使用環境
- Laravel 11.2.0
- PHP 8.3.4
そもそもSlack通知させるには
SlackMessageインスタンス生成時にtoメソッドを使用する方法
routeNotificationForSlackメソッドの返り値をnullにしておきます。
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Notifications\Notification;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the Slack channel.
*/
public function routeNotificationForSlack(Notification $notification): mixed
{
return null; // ここ
}
}
そしたらSlackMessageインスタンス生成時にtoメソッドを使用できるようになります。
use Illuminate\Notifications\Slack\BlockKit\Blocks\ContextBlock;
use Illuminate\Notifications\Slack\BlockKit\Blocks\SectionBlock;
use Illuminate\Notifications\Slack\BlockKit\Composites\ConfirmObject;
use Illuminate\Notifications\Slack\SlackMessage;
/**
* Get the Slack representation of the notification.
*/
public function toSlack(object $notifiable): SlackMessage
{
return (new SlackMessage)
->to(config('services.slack.notifications.channel')) // ここ
->text('One of your invoices has been paid!')
->headerBlock('Invoice Paid')
->contextBlock(function (ContextBlock $block) {
$block->text('Customer #1234');
})
->sectionBlock(function (SectionBlock $block) {
$block->text('An invoice has been paid.');
$block->field("*Invoice No:*\n1000")->markdown();
$block->field("*Invoice Recipient:*\ntaylor@laravel.com")->markdown();
})
->dividerBlock()
->sectionBlock(function (SectionBlock $block) {
$block->text('Congratulations!');
});
}
toメソッドを使用できない場合
routeNotificationForSlackメソッドの返り値がnullじゃない場合
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Slack\SlackRoute;
class User extends Authenticatable
{
use Notifiable;
/**
* Route notifications for the Slack channel.
*/
public function routeNotificationForSlack(Notification $notification): mixed
{
// ここでチャンネルを指定してしまっていると、toメソッドを使えない
return SlackRoute::make($this->slack_channel, $this->slack_token);
}
}
config/service.php
の下記部分でOAuthトークンを設定できているか確認
'slack' => [
'notifications' => [
// 正しく設定されてますか?
'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'),
'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'),
],
],
Discussion