Уведомление Laravel Slack по запросу; где установить вебхук?

В соответствии с документами Laravel я могу сделать уведомление по запросу в контроллере следующим образом:

use Notification;
use App\Notifications\TradeSuccessful;

$trada_data = array( 'title' => 'test', 'amount' => 123.45 )

Notification::route('slack', '#test')->notify(new TradeSuccessful($trade_data));

И в TradeSuccessful (пример кода):

public function toSlack($notifiable)
    {
        return (new SlackMessage)
            ->success()
            ->content('One of your invoices has been paid!')
            ->attachment(function ($attachment) use ($trade_data) {
                $attachment->title('Invoice 1322')
                    ->fields([
                    'Title' => $trade_data['title],
                    'Amount' => $trade_data['amount]
                ]);
            });
    }

Главный вопрос: когда я использую такие уведомления (по запросу), где я могу установить веб-хук Slack? Потому что в документации они используют:

public function routeNotificationForSlack($notification)
    {
        return 'https://hooks.slack.com/services/...';
    }

Но эта функция определена в модели, а при использовании уведомлений по требованию в модели ничего не определено.


person eskimo    schedule 19.05.2019    source источник
comment
В вашем классе уведомлений, как вы можете use($trade_data)? Я нигде не вижу его заявленным. Когда я пытаюсь это сделать, мои данные, которые я передаю, также не отображаются в переменной $notifiable.   -  person Bennett    schedule 26.02.2021


Ответы (1)


Из документации:

Уведомления по требованию

Иногда вам может понадобиться отправить уведомление кому-то, кто не сохранен как «пользователь» вашего приложения. Используя метод Notification::route, вы можете указать информацию о маршрутизации уведомлений ad-hoc перед отправкой уведомления:

Notification::route('mail', '[email protected]')
            ->route('nexmo', '5555555555')
            ->notify(new InvoicePaid($invoice));

В случае Slack указанный вами маршрут должен быть веб-хуком:

use Notification;
use App\Notifications\TradeSuccessful;

$trada_data = array( 'title' => 'test', 'amount' => 123.45 );

$slack_webhook = 'my-slack-webhook-url'; // <---

Notification::route('slack', $slack_webhook)->notify(new TradeSuccessful($trade_data));
                             ^^^^^^^^^^^^^^

Конечно, вы должны хранить это как ключ env(), но вы поняли идею.

person Kenny Horna    schedule 19.05.2019