@@ -42,7 +42,6 @@ The notifier component supports the following channels:
42
42
API's tokens.
43
43
44
44
.. _notifier-sms-channel :
45
- .. _notifier-texter-dsn :
46
45
47
46
SMS Channel
48
47
~~~~~~~~~~~
@@ -153,8 +152,41 @@ configure the ``texter_transports``:
153
152
;
154
153
};
155
154
155
+ .. _sending-sms :
156
+
157
+ The:class: `Symfony\\ Component\\ Notifier\\ TexterInterface ` class allows you to
158
+ send SMS messages::
159
+
160
+ // src/Controller/SecurityController.php
161
+ namespace App\Controller;
162
+
163
+ use Symfony\Component\Notifier\Message\SmsMessage;
164
+ use Symfony\Component\Notifier\TexterInterface;
165
+ use Symfony\Component\Routing\Annotation\Route;
166
+
167
+ class SecurityController
168
+ {
169
+ #[Route('/login/success')]
170
+ public function loginSuccess(TexterInterface $texter)
171
+ {
172
+ $sms = new SmsMessage(
173
+ // the phone number to send the SMS message to
174
+ '+1411111111',
175
+ // the message
176
+ 'A new login was detected!'
177
+ );
178
+
179
+ $sentMessage = $texter->send($sms);
180
+
181
+ // ...
182
+ }
183
+ }
184
+
185
+ The ``send() `` method returns a variable of type
186
+ :class: `Symfony\\ Component\\ Notifier\\ Message\\ SentMessage ` which provides
187
+ information such as the message ID and the original message contents.
188
+
156
189
.. _notifier-chat-channel :
157
- .. _notifier-chatter-dsn :
158
190
159
191
Chat Channel
160
192
~~~~~~~~~~~~
@@ -170,24 +202,24 @@ The chat channel is used to send chat messages to users by using
170
202
:class: `Symfony\\ Component\\ Notifier\\ Chatter ` classes. Symfony provides
171
203
integration with these chat services:
172
204
173
- ============== ==================================== =============================================================================
174
- Service Package DSN
175
- ============== ==================================== =============================================================================
176
- AmazonSns ``symfony/amazon-sns-notifier `` ``sns://ACCESS_KEY:SECRET_KEY@default?region=REGION ``
177
- Discord ``symfony/discord-notifier `` ``discord://TOKEN@default?webhook_id=ID ``
178
- FakeChat ``symfony/fake-chat-notifier `` ``fakechat+email://default?to=TO&from=FROM `` or ``fakechat+logger://default ``
179
- Firebase ``symfony/firebase-notifier `` ``firebase://USERNAME:PASSWORD@default ``
180
- Gitter ``symfony/gitter-notifier `` ``gitter://TOKEN@default?room_id=ROOM_ID ``
181
- GoogleChat ``symfony/google-chat-notifier `` ``googlechat://ACCESS_KEY:ACCESS_TOKEN@default/SPACE?thread_key=THREAD_KEY ``
182
- LinkedIn ``symfony/linked-in-notifier `` ``linkedin://TOKEN:USER_ID@default ``
183
- Mattermost ``symfony/mattermost-notifier `` ``mattermost://ACCESS_TOKEN@HOST/PATH?channel=CHANNEL ``
184
- Mercure ``symfony/mercure-notifier `` ``mercure://HUB_ID?topic=TOPIC ``
185
- MicrosoftTeams ``symfony/microsoft-teams-notifier `` ``microsoftteams://default/PATH ``
186
- RocketChat ``symfony/rocket-chat-notifier `` ``rocketchat://TOKEN@ENDPOINT?channel=CHANNEL ``
187
- Slack ``symfony/slack-notifier `` ``slack://TOKEN@default?channel=CHANNEL ``
188
- Telegram ``symfony/telegram-notifier `` ``telegram://TOKEN@default?channel=CHAT_ID ``
189
- Zulip ``symfony/zulip-notifier `` ``zulip://EMAIL:TOKEN@HOST?channel=CHANNEL ``
190
- ============== ==================================== =============================================================================
205
+ ====================================== ==================================== =============================================================================
206
+ Service Package DSN
207
+ ====================================== ==================================== =============================================================================
208
+ AmazonSns ``symfony/amazon-sns-notifier `` ``sns://ACCESS_KEY:SECRET_KEY@default?region=REGION ``
209
+ :doc: ` Discord < notifier/discord >` ``symfony/discord-notifier `` ``discord://TOKEN@default?webhook_id=ID ``
210
+ FakeChat ``symfony/fake-chat-notifier `` ``fakechat+email://default?to=TO&from=FROM `` or ``fakechat+logger://default ``
211
+ Firebase ``symfony/firebase-notifier `` ``firebase://USERNAME:PASSWORD@default ``
212
+ Gitter ``symfony/gitter-notifier `` ``gitter://TOKEN@default?room_id=ROOM_ID ``
213
+ GoogleChat ``symfony/google-chat-notifier `` ``googlechat://ACCESS_KEY:ACCESS_TOKEN@default/SPACE?thread_key=THREAD_KEY ``
214
+ LinkedIn ``symfony/linked-in-notifier `` ``linkedin://TOKEN:USER_ID@default ``
215
+ Mattermost ``symfony/mattermost-notifier `` ``mattermost://ACCESS_TOKEN@HOST/PATH?channel=CHANNEL ``
216
+ Mercure ``symfony/mercure-notifier `` ``mercure://HUB_ID?topic=TOPIC ``
217
+ :doc: ` MicrosoftTeams < notifier/teams >` ``symfony/microsoft-teams-notifier `` ``microsoftteams://default/PATH ``
218
+ RocketChat ``symfony/rocket-chat-notifier `` ``rocketchat://TOKEN@ENDPOINT?channel=CHANNEL ``
219
+ :doc: ` Slack < notifier/slack >` ``symfony/slack-notifier `` ``slack://TOKEN@default?channel=CHANNEL ``
220
+ :doc: ` Telegram < notifier/telegram >` ``symfony/telegram-notifier `` ``telegram://TOKEN@default?channel=CHAT_ID ``
221
+ Zulip ``symfony/zulip-notifier `` ``zulip://EMAIL:TOKEN@HOST?channel=CHANNEL ``
222
+ ====================================== ==================================== =============================================================================
191
223
192
224
Chatters are configured using the ``chatter_transports `` setting:
193
225
@@ -238,6 +270,41 @@ Chatters are configured using the ``chatter_transports`` setting:
238
270
;
239
271
};
240
272
273
+ .. _sending-chat-messages :
274
+
275
+ The:class: `Symfony\\ Component\\ Notifier\\ ChatterInterface ` class allows
276
+ you to send messages to chat services::
277
+
278
+ // src/Controller/CheckoutController.php
279
+ namespace App\Controller;
280
+
281
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
282
+ use Symfony\Component\Notifier\ChatterInterface;
283
+ use Symfony\Component\Notifier\Message\ChatMessage;
284
+ use Symfony\Component\Routing\Annotation\Route;
285
+
286
+ class CheckoutController extends AbstractController
287
+ {
288
+ /**
289
+ * @Route("/checkout/thankyou")
290
+ */
291
+ public function thankyou(ChatterInterface $chatter)
292
+ {
293
+ $message = (new ChatMessage('You got a new invoice for 15 EUR.'))
294
+ // if not set explicitly, the message is send to the
295
+ // default transport (the first one configured)
296
+ ->transport('slack');
297
+
298
+ $sentMessage = $chatter->send($message);
299
+
300
+ // ...
301
+ }
302
+ }
303
+
304
+ The ``send() `` method returns a variable of type
305
+ :class: `Symfony\\ Component\\ Notifier\\ Message\\ SentMessage ` which provides
306
+ information such as the message ID and the original message contents.
307
+
241
308
.. _notifier-email-channel :
242
309
243
310
Email Channel
@@ -767,18 +834,87 @@ all configured texter and chatter transports only in the ``dev`` (and/or
767
834
chatter_transports :
768
835
slack :' null://null'
769
836
837
+ .. _notifier-events :
838
+
839
+ ..index ::
840
+ single: Notifier; Events
841
+
842
+ Using Events
843
+ ------------
844
+
845
+ The:class: `Symfony\\ Component\\ Notifier\\ Transport` ` class of the Notifier component
846
+ allows you to optionally hook into the lifecycle via events.
847
+
848
+ The ``MessageEvent::class `` Event
849
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
850
+
851
+ **Typical Purposes **: Doing something before the message is send (like logging
852
+ which message is going to be send, or displaying something about the event
853
+ to be executed.
854
+
855
+ Just before send the message, the event class ``MessageEvent `` is
856
+ dispatched. Listeners receive a
857
+ :class: `Symfony\\ Component\\ Notifier\\ Event\\ MessageEvent ` event::
858
+
859
+ use Symfony\Component\Notifier\Event\MessageEvent;
860
+
861
+ $dispatcher->addListener(MessageEvent::class, function (MessageEvent $event) {
862
+ // gets the message instance
863
+ $message = $event->getMessage();
864
+
865
+ // log something
866
+ $this->logger(sprintf('Message with subject: %s will be send to %s, $message->getSubject(), $message->getRecipientId()'));
867
+ });
868
+
869
+ The ``FailedMessageEvent `` Event
870
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
871
+
872
+ **Typical Purposes **: Doing something before the exception is thrown
873
+ (Retry to send the message or log additional information).
874
+
875
+ Whenever an exception is thrown while sending the message, the event class
876
+ ``FailedMessageEvent `` is dispatched. A listener can do anything useful before
877
+ the exception is thrown.
878
+
879
+ Listeners receive a
880
+ :class: `Symfony\\ Component\\ Notifier\\ Event\\ FailedMessageEvent ` event::
881
+
882
+ use Symfony\Component\Notifier\Event\FailedMessageEvent;
883
+
884
+ $dispatcher->addListener(FailedMessageEvent::class, function (FailedMessageEvent $event) {
885
+ // gets the message instance
886
+ $message = $event->getMessage();
887
+
888
+ // gets the error instance
889
+ $error = $event->getError();
890
+
891
+ // log something
892
+ $this->logger(sprintf('The message with subject: %s has not been sent successfully. The error is: %s, $message->getSubject(), $error->getMessage()'));
893
+ });
894
+
895
+ The ``SentMessageEvent `` Event
896
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
897
+
898
+ **Typical Purposes **: To perform some action when the message is successfully
899
+ sent (like retrieve the id returned when the message is sent).
900
+
901
+ After the message has been successfully sent, the event class ``SentMessageEvent ``
902
+ is dispatched. Listeners receive a
903
+ :class: `Symfony\\ Component\\ Notifier\\ Event\\ SentMessageEvent ` event::
904
+
905
+ use Symfony\Component\Notifier\Event\SentMessageEvent;
906
+
907
+ $dispatcher->addListener(SentMessageEvent::class, function (SentMessageEvent $event) {
908
+ // gets the message instance
909
+ $message = $event->getOriginalMessage();
910
+
911
+ // log something
912
+ $this->logger(sprintf('The message has been successfully sent and have id: %s, $message->getMessageId()'));
913
+ });
914
+
770
915
.. TODO
771
916
.. - Using the message bus for asynchronous notification
772
917
.. - Describe notifier monolog handler
773
918
.. - Describe notification_on_failed_messages integration
774
919
775
- Learn more
776
- ----------
777
-
778
- ..toctree ::
779
- :maxdepth: 1
780
- :glob:
781
-
782
- notifier/*
783
-
784
920
.. _`RFC 3986` :https://www.ietf.org/rfc/rfc3986.txt