本文目录导读:

Laravel 的通知系统非常强大且灵活,它支持多种通知渠道(Channel),基本上可以覆盖绝大多数业务场景。
以下是 Laravel 通知系统主要支持的通知方式(渠道)的详细分类:
内置驱动(开箱即用)
这些是 Laravel 框架自带的支持,只需配置好相应的服务即可。
-
邮件(Mail):
- 支持通过 SMTP、Mailgun、Postmark、Amazon SES 等驱动发送。
- 支持 Markdown 邮件模板(美观且响应式)和纯文本模板。
- 可以发送附件。
-
短信(SMS):
- Nexmo(现为 Vonage): 国际短信服务。
- Twilio: 国际短信服务(非常流行)。
- 注意:国内短信(如阿里云、腾讯云)通常需要安装第三方包(如
overtrue/easy-sms)来集成,但 Laravel 的通知系统允许你自定义通道来对接。
-
Slack:
- 可以直接发送消息到 Slack 频道(通过 Slack 的 Incoming Webhook)。
- Slack 消息构造器: Laravel 提供了丰富的 API 来构造包含富文本、按钮、图片的 Slack 消息。
-
数据库(Database):
- 将通知存储在数据库表中(通常叫做
notifications)。 - 非常适合站内信、未读消息红点等功能。
- 自带
markAsRead()方法,方便标记已读。
- 将通知存储在数据库表中(通常叫做
-
Broadcast(实时广播):
- 通过 WebSocket(如 Pusher、Ably 或自建的 Soketi)将通知实时推送到前端。
- 前端可以使用 Echo 监听事件,实现类似“有新任务,弹窗提醒”的实时体验。
-
存储(Store):
- 在 Laravel 11.x 及以上版本中,内置了
store驱动,它将通知以文件或云存储的形式保存,适合存档或异步处理,但通常较少直接用于用户交互。
- 在 Laravel 11.x 及以上版本中,内置了
社区扩展驱动(通过 Composer 安装)
这些是第三方提供的包,扩展了 Laravel 的通知能力:
-
钉钉(DingTalk):
- 通过自定义通道发送群机器人消息或工作通知。
- 常用包:
laravel-notification-channels/dingtalk或w3edu/LaravelDingtalk。
-
企业微信(WeCom):
- 类似钉钉,发送消息到企业微信群或应用。
- 常用包:
laravel-notification-channels/wechat或特定企业微信的包。
-
微信公众号/小程序(WeChat Official Account / Mini Program):
- 发送模板消息(订阅消息)给微信用户。
- 常用包:
overtrue/laravel-wechat(它本身支持通知集成,或者直接调用其服务)。
-
飞书(Feishu / Lark):
- 发送消息到飞书群或用户。
- 常用包:
laravel-notification-channels/feishu。
-
阿里云/腾讯云短信(Aliyun / Tencent SMS):
- 国内云服务商的短信服务。
- 通常使用
overtrue/easy-sms配合自定义通知通道。
-
Telegram / Discord / WhatsApp:
这些在海外项目中比较常用,也有对应的社区包支持。
自定义通知通道(终极灵活)
Laravel 允许开发者完全自定义通知通道,这意味着你可以将通知发送到任何你想要的地方。
- 步骤: 定义一个类(实现
Illuminate\Contracts\Notifications\Dispatcher或简单地包含send($notifiable, Notification)方法),然后在通知类中使用via()方法返回你的自定义通道类名。 - 应用场景:
- 接入内部办公系统(如自研的 IM 工具)。
- 调用第三方 API(如极光推送、个推等)进行 APP 推送。
- 将通知推送到消息队列,然后由 Worker 进程处理。
补充:频道” vs “驱动”
在 Laravel 文档中,术语可能有些混淆,但注意区分:
- 通知渠道(Notification Channels): 指“发送到哪里”,如 Mail、Database、Broadcast 等。
- 邮件驱动(Mail Drivers): 指“通过什么服务发送邮件”,如 SMTP、Mailgun 等,这是 Mail 渠道内部的具体实现。
你该怎么选?
| 业务需求 | 推荐的 Laravel 渠道 |
|---|---|
| 站内信/消息中心 | Database(存储) + Broadcast(实时提醒) |
| 邮件提醒 | Mail(最通用) |
| APP 内实时音视频/IM | Broadcast(搭配 Pusher/心跳) |
| 国内手机验证码/营销短信 | 自定义通道(集成阿里云/腾讯云,或使用 easy-sms) |
| 团队协作工具提醒 | 自定义通道(集成钉钉/企微/飞书) 或使用社区包 |
| 服务器监控/告警日志 | Slack(如果团队用 Slack) 或 自定义通道(发送到 Webhook) |
核心建议: 如果你的需求是国内场景(钉钉、企微、阿里云短信),基本都需要依赖自定义通知通道或社区扩展包,Laravel 自带的只覆盖了邮件、数据库和 Slack。