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

Creando su startup: Enviando recordatorios

Read Time: 10 mins
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Dynamic Ajax Forms for Scheduling
Building Your Startup: The Dashboard Foundation

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

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

Este tutorial forma parte de la serie Creando su Startup con PHP en Envato Tuts +. En esta serie, te estoy guiando a través del lanzamiento de un inicio de concepto a realidad utilizando mi aplicación de Meeting Planner como un ejemplo de la vida real. Cada paso a lo largo del camino, voy a lanzar el código de Meeting Planner como ejemplo en código abierto del que puede aprender. También me ocuparé de asuntos relacionados de negocios con el startup a medida que surjan.

En este tutorial en dos partes, describo cómo construí la infraestructura para los recordatorios y su entrega. Hoy, voy a guiarlo a través de monitoreo cuando entregar recordatorios y cómo enviar los correos electrónicos.

Si aún no ha probado Meeting Planner, siga adelante y programe su primera reunión. Participo en los hilos del comentario abajo, así que ¡dígame lo que usted piensa! Me interesa especialmente si desea sugerir nuevas funciones o temas para futuros tutoriales.

Como recordatorio, todo el código para Meeting Planner está escrito en el Framework Yii2 para PHP. Si desea obtener más información acerca de Yii2, consulte nuestra serie paralela Programación con Yii2.

Tiempo de supervisión para recordatorios

A medida que pasa el tiempo, debemos vigilar la tabla MeetingReminder para saber cuándo entregar recordatorios. Idealmente, queremos que los recordatorios sean entregados exactamente a tiempo, ej. Al minuto.

Ejecución de tareas de fondo

La puntualidad depende de la periodicidad con que ejecutamos las tareas de fondo para el monitoreo. Actualmente, en nuestra etapa pre-alpha, los estoy ejecutando cada cinco minutos:

Este script llama a MeetingReminder::check(), que encuentra los recordatorios de reunión que se deben y las solicitudes a process():

Procesamiento de un recordatorio

MeetingReminder::process() reúne los detalles necesarios para crear un correo electrónico de recordatorio. Esto incluye el destinatario del recordatorio, los detalles de la reunión y la hora:

La función User::checkEmailDelivery() verifica que el usuario no ha bloqueado los correos electrónicos del sistema (o de personas en particular). Se asegura de que está bien enviar el recordatorio:

Aquí tiene el método User::checkEmailDelivery. En primer lugar, comprueba si el usuario ha bloqueado completamente el correo electrónico (o no) o si el mensaje se envía desde un usuario bloqueado:

La nueva plantilla de correo electrónico de recordatorio

En el episodio Entregando tu invitación de la reunión, escribí sobre el envío de mensajes de correo electrónico dentro del marco Yii. En refinando plantillas de correo electronico, describí la actualización de las plantillas para nuestras nuevas plantillas de respuesta basadas en oxígeno.

Aquí está la nueva plantilla de correo electrónico reminder_html.php:

Incluye la fecha, la hora y la ubicación elegida (con una dirección y un enlace de mapa). También he agregado los principios de un área de opciones útil con un comando inicial, "Informales que estoy llegando tarde":

Meeting Planner - Reminder of Your Meeting EmailMeeting Planner - Reminder of Your Meeting EmailMeeting Planner - Reminder of Your Meeting Email

Al hacer clic en él, enviaremos por correo electrónico o SMS a los otros participantes que podrían tardar entre cinco y diez minutos. No hay nada más que hacer o escribir mientras tiene prisa.

Tal vez una eventual versión móvil de Meeting Planner conocerá su ubicación GPS y hacerles saber aproximadamente cuán lejos está usted. He empezado a seguir ideas como esta en Asana para la planificación de productos—preguntaré a las diosas editoriales de Envato Tuts+ (mostradas a continuación) si puedo escribir sobre la implementación de seguimiento de características y emisiones en un futuro tutorial.

Meeting Planner Reminders - Game of Thrones Daenerys Targaryen and Dragon our editorial goddessMeeting Planner Reminders - Game of Thrones Daenerys Targaryen and Dragon our editorial goddessMeeting Planner Reminders - Game of Thrones Daenerys Targaryen and Dragon our editorial goddess

Mejoras en los recordatorios

El correo electrónico de recordatorio puede utilizar algunas funciones mejoradas:

  • Completar la implementación de correo electrónico que se ejecuta tarde.
  • Visualización de la información de contacto de otros participantes, como números de teléfono y direcciones de correo electrónico. El correo electrónico que se ejecuta tarde puede mostrar sólo la información de contacto de la persona que llega tarde.
  • Muestra un mapa de Google estático que muestra la ubicación de la reunión.
  • Enlace a una función para solicitar o requerir una reprogramación de la reunión.
  • Enlace a no sólo el mapa, sino las direcciones de la ubicación.
  • Enlace para ajustar los recordatorios.

Resulta que la mayoría de estas características requieren más trabajo del que hay espacio para este tutorial.

Por ejemplo, la idea de enviar un correo electrónico de ejecución tarde parece una característica simple, ¿verdad? Es un buen ejemplo del reto que los frameworks MVC a veces imponen a los desarrolladores. La implementación de una función de correo electrónico de última ejecución requería código a través de varios archivos, incluida una nueva plantilla de correo electrónico.

Implementación de la función de ejecución tardía

Meeting Planner Reminders - Late Notice EmailMeeting Planner Reminders - Late Notice EmailMeeting Planner Reminders - Late Notice Email

En lugar de compartir todos los cambios de código necesarios para esta función, resumiré los lugares en los que era necesario cambiar el entorno:

  • El correo electrónico de recordatorio necesitaba un enlace con un nuevo comando
  • El COMMAND_RUNNING_LATE tenía que ser definido en el modelo y controlador de la reunión, y tenía que mostrar un mensaje de confirmación.

He aquí un ejemplo de lo que ves después de pedir que se envíe un aviso tardío:

Meeting Planner Reminders - Late Notice ConfirmationMeeting Planner Reminders - Late Notice ConfirmationMeeting Planner Reminders - Late Notice Confirmation
  • El método sendLateNotice() tuvo que ser construido en Meeting.php
  • La plantilla de correo electrónico de late-html.php tenían que ser construida. Esto incluye una opción para que el otro participante anuncie que están "tarde también".
  • El método UserContact::buildContactString() tuvo que completarse para incluir información de contacto para la persona que se está ejecutando tarde.
  • El ACTION_SENT_RUNNING_LATE tuvo que ser creado para registrar el envío de un aviso tardío en nombre de esta persona en el MeetingLog.
  • El método sendLateNotice() tuvo que comprobar el registro y mostrar un error si el aviso tardío ya se había enviado una vez.

Esto es lo que muestra el aviso tardío enviado:

Meeting Planner Reminders - Error message - Late Notice Already SentMeeting Planner Reminders - Error message - Late Notice Already SentMeeting Planner Reminders - Error message - Late Notice Already Sent

Era un montón de código para implementar lo que parecía una simple adición.

Esperé a probar la función hasta que todos los cambios anteriores se habían hecho, y me sorprendió gratamente que todos trabajaron exactamente como se pretende. Sólo tuve que hacer algunos cambios cosméticos en el texto.

Implementación de la información de contacto del participante

Si bien esta función ya existía para los archivos iCal, necesitaba completar esta función para las invitaciones de reunión basadas en correo electrónico. Así que extendí UserContact::buildContactString($user_id,$mode) para $mode = 'html'.

Aquí está el código actualizado:

Estoy seguro de que necesitará un poco de pulido a medida que avanzamos en las pruebas alfa y beta, pero la funcionalidad ya está ahí.

Puede ver los detalles de contacto mostrados en el aviso completo anterior, pero aquí está el segmento que genera:

Meeting Planner Reminder - Contact DetailsMeeting Planner Reminder - Contact DetailsMeeting Planner Reminder - Contact Details

Pulido de Recordatorios

Las cosas fueron tan bien en general con estas últimas mini-características que he añadido el enlace para ajustar sus recordatorios para el correo electrónico de recordatorio original también.

Con todo este nuevo código, estoy seguro de que estaré puliendo la función de recordatorios y mejorándola regularmente durante las próximas semanas. Sin embargo, como planificador de reuniones se ha unido, más funcionalidad es a menudo posible—a menudo con poco trabajo porque hay un framework y una base. El modelo de datos limpios y el framework MVC hacen regularmente mejoras incrementales relativamente sencillas.

Todo esto es lo que hace que la construcción de un startup tanto divertido y desafiante. Y trabajando con dragones (algunos días no puedo creer que me pagan para hacer esto).

¿Que sigue?

Meeting Planner ha hecho un tremendo progreso en los últimos meses. Estoy empezando a experimentar con WeFunder basado en la implementación de las nuevas reglas de crowdfunding de la SEC. Por favor considere seguir nuestro perfil. Espero escribir sobre esto más en un futuro tutorial.

Y, sin duda, la aplicación todavía tiene un montón de deficiencias—por favor asegúrese de publicar sus comentarios en los comentarios o abrir un ticket de soporte.

Espero que hayas disfrutado este episodio. Vea los próximos tutoriales en nuestra serie Creando su Startup Con PHP, todavía hay trabajo polaco por delante, pero también funciones más grandes.

Por favor, siéntase libre de añadir sus preguntas y comentarios a continuación; Generalmente participo en las discusiones. También puede contactarme directamente en Twitter @reifman.

Enlaces relacionados

Advertisement
Did you find this post useful?
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.