Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii

Construyendo tu Startup: Entregando Notificaciones

by
Read Time:8 minsLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Responsive Email for Gmail
Building Your Startup: Preparing for Reminders

Spanish (Español) translation by Rafael Chavarría (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Este tutorial es parte de la serie Construyendo Tu Startup Con PHP en Envato Tuts+. En esta serie, te estaré guiando a través de lanzar una startup desde concepto hasta realidad usando mi app Planificador de Reuniones como un ejemplo de la vida real. Cada paso a lo largo del camino, liberaré el código del Planificador de Reuniones como ejemplos de código abierto de los que puedes aprender. También abordaré asuntos de negocios relacionados con startups según se presenten.

En el episodio anterior, describí la construcción de la infraestructura para llevar seguimiento de cambios a reuniones para que podamos saber como compartir actualizaciones con participantes. En este episodio, cubriré el monitoreo de la bitácora y la entrega de notificaciones de correo de los cambios.

Si no has probado nuestro Planificador de Reuniones, ve y programa tu primera reunión. A la par que tus colegas y amigos respondan, verás las notificaciones en acción. Participo en la sección de comentarios de abajo, así que por favor comparte tu retroalimentación. Estoy especialmente interesado si quieres sugerir nuevas características o temas para futuros tutoriales.

Como recordatorio, todo el código del Planificador de Reuniones está escrito en el Framework Yii2 para PHP. Si quisieras aprender más acerca de Yii2, revisa nuestra serie paralela de tutoriales Programando con Yii2.

Monitoreando Actualizaciones de Reuniones

Con el MeetingLog del episodio anterior, vamos a monitorear regularmente cuando los cambios tienen unos minutos de haberse realizado y consolidarlos en una sola actualización para los otros participantes u organizador de reunión.

Nuestro proceso DaemonController actionFrequent revisará Reuniones con actualizaciones recientes cada pocos minutos:

Eligiendo a las Personas Correctas a Notificar

Meeting::findFresh() mira la bitácora de entradas que son más viejas que MeetingLog::TIMELAPSE, actualmente cinco minutos. Cuando las encuentra, mira a cada uno de los actores involucrados en hacer cambios y los notifica por medio de Meeting::notify():

Si el organizador de la reunión realizó el cambio, entonces los participantes necesitan ser notificados. Si un participante hizo el cambio, entonces el organizador (y en un futuro los participantes) necesitan ser notificados; reuniones de varios participantes serán implementadas en tutoriales posteriores.

Creando un Resumen de Texto en la bitácora de Reunión

En la interfaz actual del Planificador de Reuniones, un numero de cambios registrados refieren a objetos idénticos y se pueden cancelar entre sí. Por ejemplo, si das clic al switch para un lugar, primero se va a rechazar. Necesitas dar clic de nuevo para aceptarlo. Ambos cambios se registran.

Tuve que escribir código extra para crear un resumen conciso y textualmente preciso del registro.

Por ejemplo, aquí está el historial de MeetingLog de las acciones. Nota la repetición de acciones por Cloudster que se cancelan entre sí en los mismos lugares y horarios:

Meeting Planner Notifications - Example MeetingLog History of ActionsMeeting Planner Notifications - Example MeetingLog History of ActionsMeeting Planner Notifications - Example MeetingLog History of Actions

Una representación textual básica diría:

Cloudster agregó nota Gracias por el recordatorio. Estaría seguro de., tiempo aceptado Jue 9 Jun a las 12:00 PM, tiempo aceptado Vie 10 Jun a las 12:00 PM, tiempo rechazado Vie 10 Jun 12:00 PM, tiempo rechazado Jue 9 Jun a las 12:00 PM, tiempo rechazado Mié 8 Jun a las 12:30 PM, lugar rechazado Chaco Canyon Organic Café, lugar aceptado Chaco Canyon Organic Cafe, lugar rechazado Chaco Canyon Organic Cafe, lugar aceptado No Bones Beach Club y lugar rechazado No Bones Beach Club.

Cómo creamos un resumen textual simple de los cambios resultantes que hicieron para la notificación de correo como se muestra abajo:

Meeting Planner Notifications - The Final Email Notification with Text SummaryMeeting Planner Notifications - The Final Email Notification with Text SummaryMeeting Planner Notifications - The Final Email Notification with Text Summary

Dentro de Meeting::notify(), pedimos un historial de actividad para esta reunión desde la última notificación:

Aquí está el código que construye una cadena textual de lo que ocurrió. Probablemente haré trabajo de pulido en el futuro para limpiar la claridad de la descripción. Por ejemplo, la versión final proporciona una lista gramatical apropiada con el uso adecuado de comas después 'y' para la última vez.

Esencialmente, getHistory es específico del usuario. La consulta de abajo acomoda acciones en orden inverso porque en su mayoría, el último cambio tiene el impacto dominante.

En el futuro, habrá múltiples participantes cuyas acciones se encimarán en tiempo, así que agrupamos el historial por actor_id.

Después, estoy siguiendo el $current_actor mientras construimos la textualización de manera que solo mencionemos el nombre una vez, por ejemplo "Jeff realizó estas acciones. John realizó estas acciones," y no "Jeff realizó esto, John realizó esto, Jeff realizó esto y John realizó esto y John realizó esto."

De manera similar, estoy dando seguimiento a la mención de objetos en $items_mentioned e ignorando los eventos anteriores, solo otorgando la última acción dominante en un lugar u horario, por ejemplo "Jeff aceptó No Bones Beach Club" y no "Jeff rechazó No Bones Beach Club, Jeff aceptó No Bones Beach Club."

El código fue intrincado y divertido de escribir. La textualización resultante (mostrada abajo) es divertida de observar.

Entregando la Notificación de Correo Electrónico

En el tutorial Refinando Plantillas de Email, describí el cambio a nuestras nuevas plantillas responsivas Oxygen. Esto requirió una revisión de la plantilla notify-html.php y requerirá cada vez más pulido con el tiempo.

Aquí hay un extracto de la plantilla:

Enviando el Correo Electrónico

Entregando el correo se hace de manera similar a nuestras invitaciones de reunión con la extensión SwiftMailer de Yii2 por medio de la configuración Mailgun SMTP.

¿Qué sigue?

Espero que hayas disfrutado estos tutoriales de dos partes sobre notificaciones. Encontré el construir el registro y crear la descripción textual del historial retador y divertido de desarrollar. Y probó ser útil depurando y resumiendo las actualizaciones de reuniones para las notificaciones. Sin embargo, probarlo no fue fácil ya que siempre había estampas de tiempo y tareas de fondo que necesitaban ser manipuladas para verificar que el código estaba funcionando.

Por favor prueba la funcionalidad de las notificaciones programando tu primera reunión. Deberías recibir notificaciones regulares mientras tus invitados respondan. También, apreciaría si compartes tu experiencia abajo en los comentarios y siempre estoy interesado en tus sugerenicas. También puedes contactarme en Twitter @reifman directamente.

También estoy comenzando a experimentar con WeFunder basado en la implementación de las nuevas reglas de crowdfunding de SEC. Por favor considera seguir nuestro perfil. Puede que escriba acerca de esto más como parte de nuestra serie.

Espera nuevos tutoriales en la serie Construyendo Tu Startup Con PHP. Hay unas cuantas grandes características por venir.

Enlaces Relacionados

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.