Laravel原生不支持Slack通知,必须安装laravel-notification-channels/slack扩展包,配置Webhook URL,且通知类中via()需返回['slack']、toSlack()需返回SlackMessage实例并显式指定Webhook。

Slack通知在 Laravel 里不是开箱即用的,必须装扩展包、配 Webhook、写 toSlack() 方法,缺一不可。直接调 $user->notify() 而不满足这些条件,消息根本发不出去。
slack通知必须装 laravel-notification-channels/slack
原生 Laravel 不支持 Slack 通知,toSlack() 方法不存在。你得手动引入第三方包:
- 运行
composer require laravel-notification-channels/slack - Laravel 10+ 通常自动发现服务提供者,否则需在
config/app.php的providers数组里加NotificationChannels\Slack\SlackServiceProvider::class - 这个包只负责「推送」,不处理日志、不监听事件——它只响应
Notification类里的toSlack()
Webhook URL 必须配置在通知类里,不能只写在 .env
LOG_SLACK_WEBHOOK_URL 是给日志通道用的,和通知系统完全无关。Slack 通知的 Webhook 必须显式传入:
- 在通知类的
toSlack()方法中,用SlackMessage::create()->to('https://hooks.slack.com/...')显式指定 - 或者通过
config/services.php配置'slack' => ['webhook_url' => env('SLACK_WEBHOOK_URL')],再在toSlack()里调SlackMessage::create()->to(config('services.slack.webhook_url')) - 别把
SLACK_WEBHOOK_URL写成LOG_SLACK_WEBHOOK_URL,它们属于两个不同系统
via() 里必须包含 'slack',且 toSlack() 返回 SlackMessage 实例
即使写了 toSlack(),如果 via() 没返回 ['slack'] 或包含 'slack',Laravel 就会跳过这个方法:
-
via()必须返回数组,例如return ['mail', 'slack'];或仅return ['slack']; -
toSlack($notifiable)必须返回NotificationChannels\Slack\SlackMessage实例,不能返回字符串或数组 - 常见错误:漏掉
use NotificationChannels\Slack\SlackMessage;,导致类未找到;或误写成return 'hello';,触发类型错误
Slack 通知不支持模板变量注入,要手动拼接内容
不像邮件能用 Blade 渲染,SlackMessage 只接受纯文本、attachment 数组或预设方法(如 ->content()、->attachment()):
- 想动态显示用户名?得手动写:
->content("用户 {$notifiable->name} 已完成支付") - 附件字段(attachments)需是关联数组,且
color值必须是十六进制(如'#2eb872'),不是颜色名('green'会失效) - Markdown 在 Slack 中默认不启用,要在
attachment()里显式设'mrkdwn_in' => ['text', 'fields']
最容易被忽略的是渠道声明和 Webhook 绑定的分离——via() 控制“是否走 Slack”,toSlack() 控制“发给谁、发什么”,两者都错不得。而且 Slack 不会返回送达确认,发失败了也不会抛异常,得靠日志或手动加 try/catch 捕获 Guzzle 异常。











