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

Construyendo Tu Startup: Preparándose para Recordatorios

by
Difficulty:IntermediateLength:MediumLanguages:
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Delivering Notifications
Building Your Startup: Dynamic Ajax Forms for Scheduling

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

Final 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 guío a través de lanzar una startup desde concepto hasta realidad usando mi app Planeador de Reuniones como un ejemplo de la vida real. Cada paso a lo largo del camino, liberaré el código de Planeador de Reuniones como ejemplos de código abierto de los que puedes aprender. También mencionaré asuntos relacionados con negocios de startups según se presenten.

En esta serie de dos partes, describiré como construimos la infraestructura para recordatorios y su entrega. Este episodio se enfocará en la infraestructura y experiencia de usuario detrás de la configuración de recordatorios.

Si todavía no has probado Planeador de Reuniones, ve y programa tu primera reunión. Participo en los comentarios de abajo, ¡así que cuéntame qué opinas! Estoy especialmente interesado si quieres nuevas características o sugerir temas para futuros tutoriales.

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

Cómo Trabajarán los Recordatorios

Inicialmente, había creado algunas opciones simples de recordatorio en la tabla UserSetting. Sin embargo, me di cuenta de que los usuarios iban a querer mucha más flexibilidad y control sobre cuándo y cómo llegan sus recordatorios.

La gente debería ser capaz d establecer su recordatorios 30 minuto antes, 3 horas antes y 48 horas antes--o solo 1 hora antes. Debería depender completamente de ellos. Ellos deberían también ser capaces de elegir si quieren recibir recordatorios vía correo electrónico, SMS o ambos. Planeador de Reuniones no soporta SMS todavía, pero lo hará pronto--habrá un tutorial acerca de eso también.

Aquí hay un ejemplo de la flexibilidad que ofrece el Calendario de Apple:

Meeting Planner Reminders - Apple Calendar Reminder Alerts

Permitiendo a las Personas Configurar Recordatorios.

Construyamos la infraestructura para soportar cualquier número de recordatorios de reunión personalizables por el usuario.

Meeting Planner Reminders - Create a Reminder

La Tabla de Recordatorio

Primero, creé una tabla de Recordatorio para soportar uno o más peticiones de recordatorio por usuarios para todas sus reuniones. Como es típico con Yii2, creé la tabla con una migración.

Aquí está el comando de consola de Yii para crear la migración de base de datos.

Después personalizé este archivo esqueleto con las propiedades que necesito:

Sin un recordatorio es 48 horas antes, duration_friendly y unit serán 48 y UNIT_HOURS, mientras que el campo duration será establecido en segundos, e.g. 48*60 minutos * 60 segundos o 172,800 segundos antes de una reunión. Esto ayudará a simplificar la interfaz de usuario y a procesar recordatorios.

Reminder_type especificará email, SMS o ambos.

Después usé Gii, su generador de andamio de código, para crear código MVC rápidamente para el controlador, modelo y vistas. La interfaz de usuario inicial estuvo lista en minutos. Puedes ver la forma para crear un recordatorio arriba y el índice del recordatorio abajo.

Meeting Planner Reminders - A persons customizable reminders

Inicializando Recordatorios para Usuarios Existentes y Nuevos

Para cuando comencé a trabajar en recordatorios, la gente ya estaba usando Planeador de Reuniones para programar reuniones. Así que tuve que inicializar la tabla Reminder para personas existentes también así como para cada nueva persona registrada.

Decidí que debería haber tres Recordatorios por defecto para usuario al principio, programado para 3 horas, 1 día y 3 días antes de una reunión. El código de abajo crea estos recordatorios para un usuario:

Pero qué hace processNewReminder? Construye renglones en otra tabla que describiré abajo.

Procesando Recordatorios

Es grandioso que ahora tenemos una manera para que los usuarios proporcionen elecciones por defecto de recordatorios para reuniones. ¿Pero cómo sabe el sistema cuándo enviar recordatorios a cada usuario para sus reuniones? Eso es más complicado.

Por rezones de rendimiento, decidí que sería mejor construir una tabla MeetingReminder en sí misma. Esto haría una nota de los recordatorios por defecto del usuario ya que las reuniones son programadas y dan seguimiento de cuándo mandar estos recordatorios para cada reunión. Es básicamente una tabla de recordatorio de reunión específica reflejando las preferencias configuradas de recordatorio de cada participante.

Mientras los tiempos de reunión son actualizados, las entradas de la tabla MeetingReminder para esa reunión necesitarán cambiar. De manera similar, si una persona actualiza sus preferencias de recordatorio, los recordatorios programados en la tabla MeetingReminder también necesitarán ser actualizados.

Creemos la migración para la tabla MeetingReminder:

Aquí está el código de migración; es bastante simple. Básicamente, para cada recordatorio, hay un MeetingReminder que corresponde al recordatorio para un usuario para una reunión. Sabe que un recordatorio es due_at en una cierta hora y tiene un estado que determina si ya se ha enviado:

El trabajo de monitoreo en el fondo será capaz de acomodar la tabla MeetingReminder por tiempo restante y saber rápidamente cuál conjunto de recordatorios necesita en verdad ser entregado. Y podría llevar seguimiento de cuales han sido enviados para cada reunión y participante.

Nota: Hasta ahora, no hay una característica que permita a las personas personalizar recordatorios para una reunión específica, así que no hay interfaz de usuario con la tabla MeetingReminder. Podría agregar esto después.

Como se mencionó antes, la tabla MeetingReminder creo mucha complejidad sutil.

  • Si la gente agrega, edita o borra recordatorios, esto debe reflejarse en los recordatorios de reunión preconfigurados.
  • Si la gente cambia el tiempo de una reunión o la cancela, los recordatorios de reunión deben estar actualizados para reflejar esto.
  • Si una persona elige no asistir a una reunión, estos recordatorios deben ser deshabilitados.

Por último, construir la funcionalidad de recordatorio requirió mucha funcionalidad de ayudante.

Aquí hay una función ayudante que crea un MeetingReminder para un usuario específico para su recordatorio de reunión específico. Si la reunión ya ha pasado, el estado refleja eso:

Así que, siempre que un recordatorio es creado, hay código que crea todas las entradas de MeetingReminder para cada una de las reuniones del usuario:

Básicamente, el código encuentra todas las reuniones de una persona, ya sea el organizador o participante y crea una entrada MeetingReminder para cada uno de los recordatorios de esa persona. Por ejemplo, una persona con tres preferencias de recordatorio por defecto y tres reuniones programadas tendrá nueve entradas en la tabla MeetingReminder.

Manejando la Creación de Nuevos Recordatorios

Cuando una persona crea un nuevo recordatorio, tenemos código que establece la duración basada en sus preferencias y después crea un nuevo MeetingReminder para todas sus reuniones pendientes:

Manejando Cambios a los Recordatorios

Si un usuario modifica un recordatorio, necesitamos actualizar la tabla MeetingReminder para ese reminder_id:

Si el tiempo due_at para un recordatorio ya ha pasado, entonces establecemos su estado como completo.

Manejando Cuando las Reuniones Han Finalizado

Cuando una Reunión es finalizada, el tiempo es establecido y necesitamos configurar MeetingReminders basados en los ajustes de Recordatorio de cada participante. El método setMeetingReminders hace esto:

Manejando Cuando los Tiempos de Reunión Cambian

De manera similar, cuando el tiempo de una reunión es cambiado después del hecho (aún no soportado en el conjunto actual de características), creé una función simple para remover y reconstruir MeetingReminders para el nuevo tiempo:

Una característica que parece simple al principio resulta que requiere mucho detalle y vigilancia.

¿Qué Sigue?

Has visto el fundamento para recordatorios. En el siguiente tutorial, te mostraré como monitoreamos el tiempo para saber cuándo y cómo entregar recordatorios. Y te mostraré cómo podemos entregar los recordatorios vía correo electrónico (SMS vendrá después).

Meeting Planner Reminders - Example of a Reminder Email

Mientras estás esperando, prueba la característica recordatorio, programa tu primera reunión y después actualiza tus preferencias de recordatorio. También, apreciaría si compartes tu experiencia abajo en los comentarios y siempre estoy interesado en tus sugerencias. También puedes contactarme en Twitter @reifman directamente.

También estoy empezando a experimentar con WeFounder badado en la implementación de las nuevas reglas de crowdfunding de SEC. Por favor considera seguir ahí nuestro perfil. Escribiré más acerca de esto como parte de nuestra serie.

Mira nuestros próximos tutoriales en la serie Construyendo Tu Startup con PHP. Además de recordatorios, también hay mucho trabajo pulido y unas cuántas características grandes por venir.

Enlaces Relacionados

Advertisement
Advertisement
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.