创建和发送通知

编辑本页

创建和发送通知

安装

当前的web应用程序使用许多不同的渠道向用户发送消息(例如SMS、Slack消息、电子邮件、推送通知等)。Symfony中的Notifier组件是所有这些通道欧宝娱乐app下载地址之上的抽象。它提供了一种动态方式来管理消息的发送方式。安装通知器使用:

1
作曲家需要symfony/通知欧宝娱乐app下载地址

渠道:聊天,短信,电子邮件,浏览器和推送

通知器组件可以向不同的通道发送通知。每个通道可以通过使用传输与不同的提供商集成(例如Slack或Twilio SMS)。

通知器组件支持以下通道:

提示

使用秘密来安全地存储API的令牌。

短信通道

谨慎

如果任何DSN值包含URI中被认为特殊的任何字符(例如+@/),你必须编码它们。看到RFC 3986保留字符的完整列表或使用urlencode函数对它们进行编码。

短信通道使用每人类发送短信到手机。该功能需要订阅第三方短信服务。欧宝娱乐app下载地址Symfony集成了一些流行的短信服务:

服务 DSN
AllMySms 欧宝娱乐app下载地址symfony / all-my-sms-notifier allmysms: / /登录:APIKEY@default ?从=
AmazonSns 欧宝娱乐app下载地址symfony / amazon-sns-notifier sns: / / ACCESS_KEY: SECRET_KEY@default ?区域=区域
Clickatell 欧宝娱乐app下载地址symfony / clickatell-notifier clickatell: / / ACCESS_TOKEN@default吗?从=
Esendex 欧宝娱乐app下载地址symfony / esendex-notifier esendex: / / USER_NAME: PASSWORD@default ?accountreference = ACCOUNT_REFERENCE&from =
FakeSms 欧宝娱乐app下载地址symfony / fake-sms-notifier fakesms +电子邮件:/ / MAILER_SERVICE_ID吗?=, =fakesms +记录器:/ /违约
FreeMobile 欧宝娱乐app下载地址symfony / free-mobile-notifier freemobile: / /登录:API_KEY@default ?电话=电话
GatewayApi 欧宝娱乐app下载地址symfony / gateway-api-notifier gatewayapi: / / TOKEN@default ?从=
Infobip 欧宝娱乐app下载地址symfony / infobip-notifier infobip: / / AUTH_TOKEN@HOST ?从=
Iqsms 欧宝娱乐app下载地址symfony / iqsms-notifier iqsms: / /登录:PASSWORD@default ?从=
LightSms 欧宝娱乐app下载地址symfony / light-sms-notifier lightsms: / /登录:TOKEN@default ?从=电话
Mailjet 欧宝娱乐app下载地址symfony / mailjet-notifier mailjet: / / TOKEN@default ?从=
MessageBird 欧宝娱乐app下载地址symfony / message-bird-notifier messagebird: / / TOKEN@default ?从=
MessageMedia 欧宝娱乐app下载地址symfony / message-media-notifier messagemedia: / / API_KEY: API_SECRET@default ?从=
Mobyt 欧宝娱乐app下载地址symfony / mobyt-notifier mobyt: / / USER_KEY: ACCESS_TOKEN@default ?从=
Nexmo 欧宝娱乐app下载地址symfony / nexmo-notifier 放弃支持Vonage (symfony/ Vonage -n欧宝娱乐app下载地址otifier)。
水中曲棍球 欧宝娱乐app下载地址symfony / octopush-notifier 水中曲棍球:/ / USERLOGIN: APIKEY@default ?从=从类型=类型
Ovh欧宝体育应用最新版app下载Cloud 欧宝娱乐app下载地址s欧宝体育应用最新版app下载ymfony / ovh-cloud-notifier ovh欧宝体育应用最新版app下载cloud: / / APPLICATION_KEY: APPLICATION_SECRET@default ?consumer_key = CONSUMER_KEY&service_name = SERVICE_NAME
Sendinblue 欧宝娱乐app下载地址symfony / sendinblue-notifier sendinblue: / / API_KEY@default ?发送方=电话
Sms77 欧宝娱乐app下载地址symfony / sms77-notifier sms77: / / API_KEY@default ?从=
双曲正弦 欧宝娱乐app下载地址symfony / sinch-notifier 双曲正弦:/ / ACCOUNT_ID: AUTH_TOKEN@default ?从=
Smsapi 欧宝娱乐app下载地址symfony / smsapi-notifier smsapi: / / TOKEN@default ?从=
SmsBiuras 欧宝娱乐app下载地址symfony / sms-biuras-notifier smsbiuras: / / UID: API_KEY@default ?= FROM&test_mode = 0
Smsc 欧宝娱乐app下载地址symfony / smsc-notifier smsc: / /登录:PASSWORD@default ?从=
SpotHit 欧宝娱乐app下载地址symfony / spot-hit-notifier spothit: / / TOKEN@default ?从=
Telnyx 欧宝娱乐app下载地址symfony / telnyx-notifier telnyx: / / API_KEY@default ?从=&messaging_profile_id=MESSAGING_PROFILE_ID
TurboSms 欧宝娱乐app下载地址symfony / turbo-sms-notifier turbosms: / / AUTH_TOKEN@default ?从=
为什么Twilio 欧宝娱乐app下载地址symfony / twilio-notifier 为什么twilio: / / SID: TOKEN@default ?从=
沃尼奇 欧宝娱乐app下载地址symfony / vonage-notifier vonage: / /关键:SECRET@default ?从=
Yunpian 欧宝娱乐app下载地址symfony / yunpian-notifier yunpian: / / APIKEY@default

若要启用文本器,请在您的.env文件和配置texter_transports

1 2
# .envTWILIO_DSN =为什么twilio: / / SID: TOKEN@default ?从=
  • YAML
  • XML
  • PHP
1 2 3 4 5
#配置/包/ notifier.yaml框架:通知:texter_transports:为什么twilio:' % env (TWILIO_DSN) %

聊天频道

谨慎

如果任何DSN值包含URI中被认为特殊的任何字符(例如+@/),你必须编码它们。看到RFC 3986保留字符的完整列表或使用urlencode函数对它们进行编码。

聊天通道用于向用户发送聊天消息喋喋不休类。欧宝娱乐app下载地址Symfony提供了以下聊天服务的集成:

服务 DSN
AmazonSns 欧宝娱乐app下载地址symfony / amazon-sns-notifier sns: / / ACCESS_KEY: SECRET_KEY@default ?区域=区域
不和 欧宝娱乐app下载地址symfony / discord-notifier 不和:/ / TOKEN@default ?webhook_id = ID
FakeChat 欧宝娱乐app下载地址symfony / fake-chat-notifier fakechat +电子邮件:/ /默认吗?=, =fakechat +记录器:/ /违约
重火力点 欧宝娱乐app下载地址symfony / firebase-notifier 重火力点:/ /用户名:PASSWORD@default
git 欧宝娱乐app下载地址symfony / gitter-notifier git: / / TOKEN@default ?room_id = room_id
GoogleChat 欧宝娱乐app下载地址symfony / google-chat-notifier googlechat: / / ACCESS_KEY: ACCESS_TOKEN@default /空间?thread_key = thread_key
LinkedIn 欧宝娱乐app下载地址symfony / linked-in-notifier linkedin: / /令牌:USER_ID@default
Mattermost 欧宝娱乐app下载地址symfony / mattermost-notifier mattermost: / / ACCESS_TOKEN@HOST /路径?通道=通道
美居酒店 欧宝娱乐app下载地址symfony / mercure-notifier 美居酒店:/ / HUB_ID ?主题=主题
MicrosoftTeams 欧宝娱乐app下载地址symfony / microsoft-teams-notifier microsoftteams: / /默认路径
RocketChat 欧宝娱乐app下载地址symfony / rocket-chat-notifier rocketchat: / / TOKEN@ENDPOINT ?通道=通道
松弛 欧宝娱乐app下载地址symfony / slack-notifier 松:/ / TOKEN@default ?通道=通道
电报 欧宝娱乐app下载地址symfony / telegram-notifier 电报:/ / TOKEN@default ?频道= CHAT_ID
Zulip 欧宝娱乐app下载地址symfony / zulip-notifier zulip: / /电子邮件:TOKEN@HOST ?通道=通道

参数配置抖振chatter_transports设置:

1 2
# .envSLACK_DSN =松弛:/ / TOKEN@default ?通道=通道
  • YAML
  • XML
  • PHP
1 2 3 4 5
#配置/包/ notifier.yaml框架:通知:chatter_transports:松:' % env (SLACK_DSN) %

电子邮件渠道

电子邮件通道使用欧宝娱乐app下载地址Symfony梅勒使用特殊发送通知NotificationEmail.需要安装的树枝桥与Inky和CSS内线树枝扩展:

1
作曲家需要symfony/树枝-p欧宝娱乐app下载地址ack树枝/cssinliner-额外的树枝/墨水-额外

在这之后,配置邮件发送器.您还可以设置默认的“from”电子邮件地址,用于发送通知电子邮件:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
#配置/包/ mailer.yaml框架:梅勒:dsn:' % env (MAILER_DSN) %信封:发送方:“notifications@example.com”

推动渠道

谨慎

如果任何DSN值包含URI中被认为特殊的任何字符(例如+@/),你必须编码它们。看到RFC 3986保留字符的完整列表或使用urlencode函数对它们进行编码。

推送通道用于通过使用向用户发送通知每人类。欧宝娱乐app下载地址Symfony提供了这些推送服务的集成:

服务 DSN
世博会 欧宝娱乐app下载地址symfony / expo-notifier 世博会:/ / Token@default
OneSignal 欧宝娱乐app下载地址symfony / one-signal-notifier onesignal: / / APP_ID: API_KEY@default ?defaultRecipientId = DEFAULT_RECIPIENT_ID”

若要启用文本器,请在您的.env文件和配置texter_transports

1 2
# .envEXPO_DSN =世博会:/ / TOKEN@default
  • YAML
  • XML
  • PHP
1 2 3 4 5
#配置/包/ notifier.yaml框架:通知:texter_transports:世博会:' % env (EXPO_DSN) %

配置为使用故障转移或循环传输

除了配置一个或多个单独的传输,还可以使用特殊||而且& &实现故障转移或循环传输的字符:

  • YAML
  • XML
  • PHP
1 2 3 4 5 6 7 8 9 10
#配置/包/ notifier.yaml框架:通知:chatter_transports:#发送通知到Slack和使用Telegram# Slack出错主要:'%env(SLACK_DSN)% || %env(TELEGRAM_DSN)%'#发送通知到按轮询计算的下一个预定传输设置轮流捡取:'%env(SLACK_DSN)% && %env(TELEGRAM_DSN)%'

创建和发送通知

要发送通知,请自动连接NotifierInterface(服务标识通知人).这个类有一个send ()方法,该方法允许您发送通知到一个收件人

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/ / src /控制器/ InvoiceController.php名称空间应用程序控制器使用欧宝娱乐app下载地址组件通知人通知通知使用欧宝娱乐app下载地址组件通知人NotifierInterface使用欧宝娱乐app下载地址组件通知人收件人收件人InvoiceController扩展AbstractController#(路线(/发票/创建)]公共函数创建(NotifierInterface通知人/ /……//创建一个需要发送的通知//使用“email”通道通知= (通知(“新发票”, (“电子邮件”)))->内容(“你有一张15欧元的新发票。”);//通知的接收者收件人收件人(用户->getEmail (),用户->getPhonenumber ());//发送通知给收件人通知人->发送(通知收件人);/ /……}}

通知通过使用两个参数创建:主题和通道。通道指定应该使用哪个通道(或传输)来发送通知。例如,(“电子邮件”、“短信”)将向用户发送电子邮件和短信通知。

默认通知也有内容()而且emoji ()方法设置通知内容和图标。

欧宝娱乐app下载地址Symfony提供了以下接收者:

NoRecipient
这是默认值,在不需要接收方信息时非常有用。例如,浏览器通道使用当前请求的会话flashbag
收件人
这可以包含用户的电子邮件地址和电话号码。此接收者可用于所有通道(取决于是否实际设置了通道)。

配置通道策略

Symfony还允许使用通知重要性级别,而不是在创建时指定目标通道。欧宝娱乐app下载地址更新配置以指定应该为特定级别使用哪些通道(使用channel_policy):

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14
#配置/包/ notifier.yaml框架:通知:#……channel_policy:#使用短信、Slack和电子邮件发送紧急通知紧急:(“短信”,“聊天/松弛”“电子邮件”#使用Slack处理非常重要的通知高:(“聊天/松弛”)使用浏览器发送中低级别通知介质:(“浏览器”)低:(“浏览器”)

现在,当通知的重要性被设置为“high”时,它将使用Slack传输发送:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ /……InvoiceController扩展AbstractController#(路线(/发票/创建)]公共函数发票(NotifierInterface通知人/ /……通知= (通知(“新发票”))->内容(“你有一张15欧元的新发票。”->重要性(通知::IMPORTANCE_HIGH);通知人->发送(通知收件人(“wouter@example.com”));/ /……}}

自定义通知

您可以扩展通知收件人基类来定制它们的行为。例如,可以覆盖getChannels ()方法只返回短信如果发票价格很高,收货人有电话号码:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
名称空间应用程序通知人使用欧宝娱乐app下载地址组件通知人通知通知使用欧宝娱乐app下载地址组件通知人收件人RecipientInterface使用欧宝娱乐app下载地址组件通知人收件人SmsRecipientInterfaceInvoiceNotification扩展通知私人价格公共函数__construct(int价格->价格=价格;}公共函数getChannels(RecipientInterface收件人如果->价格>10000& &收件人运算符SmsRecipientInterface) {返回“短信”];}返回“电子邮件”];}}

自定义通知消息

每个通道都有自己的通知接口,您可以实现该接口以自定义通知消息。例如,如果您希望基于聊天服务修改消息,则实现ChatNotificationInterface和它的asChatMessage ()方法:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/ / src /通知/ InvoiceNotification.php名称空间应用程序通知人使用欧宝娱乐app下载地址组件通知人消息ChatMessage使用欧宝娱乐app下载地址组件通知人通知ChatNotificationInterface使用欧宝娱乐app下载地址组件通知人通知通知使用欧宝娱乐app下载地址组件通知人收件人RecipientInterfaceInvoiceNotification扩展通知实现了ChatNotificationInterface私人价格公共函数__construct(int价格->价格=价格;}公共函数asChatMessage(RecipientInterface收件人、字符串运输= null): ?ChatMessage//如果发送到Slack,则添加自定义主题和表情符号如果“松弛”= = =运输) {->主题(“你有发票”.strval (->价格)。“欧元”。);->emoji (“钱”);返回ChatMessage::fromNotification ();}//如果你返回null, Notifier将创建ChatMessage//基于这个通知,就像没有这个方法一样。返回;}}

SmsNotificationInterfaceEmailNotificationInterface而且PushNotificationInterface也存在用于修改发送到这些通道的消息。

禁用交付

在开发(或测试)时,您可能希望完全禁用通知的传递。可以通过强制Notifier使用NullTransport中的所有已配置的文本和聊天传输dev(和/或测验)环境:

1 2 3 4 5 6 7
#配置/包/ dev / notifier.yaml框架:通知:texter_transports:为什么twilio:“零:/ /空”chatter_transports:松:“零:/ /空”
. .待办事项
  • 使用消息总线进行异步通知
  • 描述通知独白处理程序
  • 描述notification_on_failed_messages集成
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。