WEBVTT

00:00:02.156 --> 00:00:06.806 align:middle
En Mailtrap, cuando enviamos emails en producción,
recuerda que podemos comprobar cada email:

00:00:06.856 --> 00:00:10.966 align:middle
si fue enviado, entregado, abierto,
rebotado (¡lo cual es importante!)

00:00:10.966 --> 00:00:16.756 align:middle
y más. Mailtrap nos permite establecer una URL de webhook
para que nos envíe información sobre estos eventos.

00:00:17.316 --> 00:00:20.516 align:middle
Además, ¡descubriremos dos
nuevos componentes de Symfony!

00:00:20.516 --> 00:00:22.436 align:middle
Busca tu terminal e instálalos:

00:00:22.726 --> 00:00:28.816 align:middle
composer require webhook remote-event El
componente webhook nos proporciona una única ruta

00:00:28.816 --> 00:00:30.346 align:middle
a la que enviar todos los webhooks.

00:00:30.796 --> 00:00:33.626 align:middle
Analiza los datos que nos
envían -llamados carga útil-,

00:00:33.966 --> 00:00:37.946 align:middle
los convierte en un objeto de evento
remoto, y lo envía a un consumidor.

00:00:38.466 --> 00:00:41.536 align:middle
Puedes pensar en los eventos remotos
como algo similar a los eventos Symfony.

00:00:41.756 --> 00:00:43.946 align:middle
En lugar de que tu
aplicación envíe un evento,

00:00:44.046 --> 00:00:47.156 align:middle
lo hace un servicio de terceros,
de ahí lo de evento remoto.

00:00:47.556 --> 00:00:51.826 align:middle
Y en lugar de oyentes de eventos, decimos
que los eventos remotos tienen consumidores.

00:00:53.066 --> 00:00:58.576 align:middle
Ejecuta git status para ver qué ha añadido
la receta: config/routes/webhook.yaml.

00:00:58.896 --> 00:01:01.196 align:middle
¡Genial! Eso añade el controlador webhook.

00:01:01.516 --> 00:01:08.496 align:middle
Comprueba la ruta con: symfony console
debug:route webhook Comprueba la primera.

00:01:08.686 --> 00:01:10.856 align:middle
La ruta es /webhook/{type}.

00:01:10.856 --> 00:01:14.226 align:middle
Así que ahora tenemos que
configurar algún tipo.

00:01:14.416 --> 00:01:20.526 align:middle
los webhooks de terceros -como los de Mailtrap o los de un
procesador de pagos o un sistema de alertas de Supernova-

00:01:20.786 --> 00:01:22.856 align:middle
pueden enviarnos cargas útiles muy diferentes,

00:01:23.196 --> 00:01:26.106 align:middle
por lo que normalmente necesitamos crear
nuestros propios analizadores y eventos remotos.

00:01:26.266 --> 00:01:31.126 align:middle
Dado que los eventos de correo electrónico son bastante estándar,
Symfony proporciona algunos eventos remotos out-of-the-box

00:01:31.126 --> 00:01:35.086 align:middle
para estos: MailerDeliveryEvent
y MailerEngagementEvent.

00:01:35.196 --> 00:01:38.606 align:middle
Algunos puentes de correo, incluido el
puente Mailtrap que estamos utilizando,

00:01:38.836 --> 00:01:43.086 align:middle
proporcionan analizadores para cada carga útil
de webhook del servicio para crear estos objetos.

00:01:43.486 --> 00:01:44.636 align:middle
Sólo tenemos que configurarlo.

00:01:45.056 --> 00:01:48.636 align:middle
En config/packages/, crea
un archivo webhook.yaml.

00:01:48.636 --> 00:01:57.356 align:middle
Añade: framework, webhook, routing, mailtrap (este
es el tipo utilizado en la URL), y luego service.

00:01:57.356 --> 00:02:03.546 align:middle
Para averiguar el identificador de servicio del analizador
Mailtrap, ve a la documentación de Symfony Webhook.

00:02:04.986 --> 00:02:09.906 align:middle
Busca el identificador de servicio
del analizador Mailtrap, cópialo...

00:02:09.906 --> 00:02:12.526 align:middle
y pégalo aquí: Ahora
necesitamos un consumidor.

00:02:13.926 --> 00:02:19.016 align:middle
Crea una nueva clase llamada EmailEventConsumer
en el espacio de nombres App\Webhook.

00:02:21.916 --> 00:02:28.886 align:middle
Esto necesita implementar ConsumerInterface desde
RemoteEvent Añade el método consume() necesario.

00:02:30.556 --> 00:02:33.526 align:middle
Para indicar a Symfony qué tipo
de webhook queremos que consuma,

00:02:33.776 --> 00:02:40.956 align:middle
añade el atributo #[AsRemoteEventConsumer]
con mailtrap: Encima de consume(),

00:02:40.956 --> 00:02:42.826 align:middle
añade un docblock para ayudar a nuestro IDE:

00:02:43.706 --> 00:02:49.116 align:middle
@param MailerDeliveryEvent|MailerEngagementEvent
$event:

00:02:49.936 --> 00:02:53.076 align:middle
Estos son los eventos remotos de correo
genéricos que proporciona Symfony.

00:02:54.056 --> 00:02:57.526 align:middle
Dentro, escribe $event-> para
ver los métodos disponibles.

00:02:58.346 --> 00:03:01.786 align:middle
En una aplicación real, aquí sería donde
harías algo con estos eventos como guardarlos

00:03:01.786 --> 00:03:05.186 align:middle
en la base de datos o notificar a un
administrador si un correo electrónico rebota.

00:03:05.566 --> 00:03:09.446 align:middle
En realidad, si un correo electrónico rebota
varias veces, puede que quieras actualizar algo

00:03:09.446 --> 00:03:12.976 align:middle
para evitar que se vuelva a intentar, ya que esto puede
perjudicar la fiabilidad de tu correo electrónico.

00:03:13.586 --> 00:03:17.536 align:middle
Pero para nuestros propósitos,
sólo dump($event): Una última cosa:

00:03:17.886 --> 00:03:22.276 align:middle
el controlador del webhook envía el evento remoto
al consumidor a través de Symfony Messenger,

00:03:22.556 --> 00:03:26.776 align:middle
dentro de una clase de mensaje
llamada ConsumeRemoteEventMessage.

00:03:27.426 --> 00:03:31.186 align:middle
Para manejar esto de forma asíncrona y
mantener tus respuestas webhook rápidas,

00:03:31.606 --> 00:03:36.156 align:middle
en config/packages/messenger.yaml,
bajo routing,

00:03:36.926 --> 00:03:42.706 align:middle
añade
Symfony\Component\RemoteEvent\Messenger\ConsumeRemoteEventMessage y

00:03:43.036 --> 00:03:46.096 align:middle
envíalo a nuestro transporte async: ¡Vale!

00:03:46.096 --> 00:03:47.736 align:middle
Estamos listos para hacer una
demostración de este webhook. ¡ Eso

00:03:47.966 --> 00:03:48.656 align:middle
a continuación!
