El autor del artículo cuenta cómo logró aplicar habilidades de programación para automatizar los procesos de rutina de su propio evento de boda.Para la mayoría de las personas, el 3 de septiembre de 2016 fue el sábado más común, pero en mi memoria esta fecha permanecerá para siempre, porque fue en este día que mi esposa y yo celebramos una boda.

Al planificar una boda, debe tener en cuenta muchos puntos: comida, decoración y decoración, lámparas de mesa (sí, separadas de la decoración), flores, alojamiento para invitados, transporte, entretenimiento y la elección del lugar. En general, cuando planifica una boda, se enfrenta a muchas incógnitas, pero estaba seguro de una cosa: ninguna boda puede prescindir de un montón de listas, listas anidadas que no terminan hasta el final. Mientras más listas flotaban ante mis ojos, más a menudo comencé a pensar en cómo mejorar el proceso de preparación. Fue dolorosamente ineficiente y todo el trabajo se realizó manualmente. Estaba seguro de que la tecnología ciertamente podría ayudar a mejorar al menos algunos de los puntos.
Te sorprenderá saber que invitar a personas a una boda es costoso (más de 380 libras por persona). Primero debe enviar invitaciones preliminares con una fecha y una breve notificación, y solo entonces, de pleno derecho, con una descripción más detallada del evento. Todo esto, además, se envía por correo, lo que significa que es lento. Los intentos de "atrapar" a los invitados y obtener una respuesta de ellos acerca de si quieren venir a las vacaciones con comida y bebida gratis (aunque, al parecer, ¿quién no quiere?) Toma mucho tiempo. Y, por último, enviar invitaciones no es respetuoso con el medio ambiente, ya que las tarjetas de papel son algo único, se olvidan rápidamente y se vuelven inútiles para cualquiera.
Pero volvamos a las listas. Dividimos a los invitados en varios grupos:
- Los que te gustaría ver en el festival
- Los que respondieron la segunda invitación pidiendo una respuesta.
- Los que aceptaron la invitación.
- Los que aceptaron la invitación y eligieron la comida.
Pero me gustan las listas: tienen algunos requisitos predefinidos que los convierten en un gran objeto para la automatización.
Mensaje en una botella
Estaba seguro de que todos los huéspedes potenciales, independientemente de su edad, tenían un teléfono móvil, lo que significaba que había llegado el momento de Twilio. El código proporcionado aquí se puede omitir de forma segura si lo desea, ya que siempre está disponible en el
repositorio de GitHub correspondiente.
El SMS como canal de comunicación se adapta perfectamente a mis necesidades. Podría configurar el envío masivo de mensajes, procesando las respuestas de manera rápida y eficiente. Al hacer los primeros bocetos de trabajo del producto y considerando las opciones de la base de datos, intenté hacer algo simple que pudiera compartirse fácilmente y no quería dedicar mucho tiempo a la apariencia. Al final, me encontré con la biblioteca de python gspread, que me permitió leer y escribir en
tablas de google . Esta no era la opción más rápida, sino más bien flexible, lo que facilitaba el acceso a las tablas y la lectura de los resultados.
Para el primer aviso,
creé una tabla con tres columnas:
- Nombre
- Número de teléfono
- Confirmation_status (estado de confirmación)
- Estado del detalle de contacto
- Message_count (El número de mensajes enviados al invitado fue útil en el futuro)
Después de completar la entrada de datos básicos,
ejecuté la lista a través de
gspread , que envió un SMS a cada invitado que posee un número de teléfono móvil:
import json import time import gspread from oauth2client.client import SignedJwtAssertionCredentials from twilio.rest import TwilioRestClient
Y dado que los SMS de texto generalmente se ven un poco aburridos, agregué un poco de
Unicode para darle vida. Así es como se veía el mensaje para los invitados afortunados:

A continuación, utilicé Flask como servidor web, realicé mi solicitud de URL para que Twilio Messaging señalara / mensajes, y agregué verificaciones simples para analizar respuestas:
@app.route("/messages", methods=['GET', 'POST']) def hello_guest(): if "yes" in body_strip: # confirmation_status wks_attendees.update_acell("F"+str(guest_confirmation_cell.row), 'Accepted') # « » resp.message(u"\u2665" + "Thanks for confirming, we'll be in touch!" + u"\u2665") # r , elif "no" in from_body.lower(): # « » wks_attendees.update_acell("F"+str(guest_confirmation_cell.row), 'Declined') # resp.message("Sorry to hear that, we still love you though!") else: # , resp.message("You sent a different keyword, we need a yes or a no, you sent: "+ from_body) return str(resp)


El primer mensaje se envió a las 8:37 a.m. del 19 de febrero, y la primera confirmación se recibió un poco más tarde a las 8:40. A las 9:38, ya había recibido 23 confirmaciones, es decir, ¡el 32% de las respuestas estaban en mi bolsillo! 2 días después del inicio del envío masivo, el 58% de los invitados ya han confirmado su participación. A pesar del éxito evidente, mi futura esposa aún no ha quedado 100% impresionada con mi servicio de SMS para invitaciones de boda, y decidí agregar más funcionalidades a la aplicación.
Estadísticas! Podría crear una lista de invitados actualizada y proporcionarla a pedido, dándole a mi futura novia un comentario instantáneo. El código resultó ser bastante simple, ya que ya había configurado algunos de los contadores más simples en la tabla antes, y por lo tanto todo se redujo a obtener el contenido de las celdas individuales y agregarlas a SMS:
Ejemplo de SMS enviado por este código:

Puede que no se vea muy hermoso, pero es muy informativo.
El hecho de que Lauren ahora pudiera seguir las actualizaciones automáticas de la lista de invitados nos ahorró muchos dolores de cabeza. Como resultado, recibí su aprobación para la integración generalizada de SMS, y pronto esta herramienta se utilizó en casi todos los procesos donde era posible. Algunas de las aplicaciones eran obvias, por ejemplo, enviando notificaciones por SMS sobre el lanzamiento de un sitio de bodas (hecho, por cierto, en
Heroku ), o trabajando con listas de regalos de bodas y muchas otras soluciones de las que estoy orgulloso hasta el día de hoy.
Fiesta gloriosa
Después de compilar la lista de invitados y recopilar respuestas, llegó a la lección, que generalmente se pospone hasta más tarde, descubriendo las preferencias de gusto de los invitados. El primer paso fue enviar otro SMS informando a los invitados sobre la necesidad de visitar el sitio web y seleccionar las categorías de alimentos servidos usando el formulario de Google. El formulario parecía bastante ordinario, pero llenaba el mismo archivo en el que había datos sobre los visitantes. Por lo tanto, ahora teníamos una mesa de visitantes que aceptaban invitaciones y una mesa que completaba el formulario de selección de alimentos. Si estuviéramos hablando de cualquier herramienta de automatización ordinaria, tendría que esperar a que los invitados elijan lentamente sus platos, pero mi boda se celebró con el apoyo de Twillio, y esto significa que podría obtener una respuesta de los invitados con un mínimo esfuerzo.
Fue necesario verificar dos tablas con el nombre de los invitados y actualizar el estado de los platos seleccionados al recibir nueva información. Esto requirió algunas campanas y silbatos adicionales en el código, pero tan pronto como terminé con ellos, pude ejecutar el script tan pronto como sea necesario, recibiendo SMS con la última información en la salida:
import json import time import gspread from oauth2client.client import SignedJwtAssertionCredentials from twilio.rest import TwilioRestClient
Ahora que tenía una lista precisa de invitados y una lista de platos constantemente actualizada, tenía sentido hacer públicas estas estadísticas utilizando la aplicación principal. Para esto, solo era necesario agregar el contenido de las celdas correspondientes a la respuesta de SMS:

Esta medida resultó ser muy útil, ya que permitió a la empresa que cumplía las vacaciones estar al tanto de nuestro progreso y proporcionó información muy práctica de aquellos que aún no habían hecho su elección. El siguiente contendiente para la automatización fue el proceso de recibir respuestas de los invitados. Para hacer esto, solo era necesario revisar la lista, encontrar en ella "violadores" que no eligieron sus platos y enviarles mensajes.
for num in range(2, 72):

El gran día se acercaba más rápido de lo que podíamos imaginar. Lo único que tuvimos que hacer fue enviar el último SMS, recordando a los invitados los detalles básicos y la necesidad de armarse con un paraguas, lo que ayudaría a protegerse del típico verano lluvioso británico:

En conclusión
Organizar una boda nunca es fácil. En cualquier momento, puede parecerle que muchos aspectos del evento están fuera de su control. La automatización definitivamente me facilitó la vida al proporcionar un canal directo de comunicación con los huéspedes e innumerables herramientas para seguir sus respuestas y recordarles cualquier necesidad de decidir y responder. Ella nos ayudó a tomar uno de los asuntos más tediosos que acompañan tales eventos en nuestras propias manos, y nos permitió liberar mucho tiempo y enfocarnos en otros componentes importantes de un evento tan importante en nuestras vidas.
Crear soluciones escalables para tareas complejas nunca es fácil, e incluso una de las versiones finales de mi aplicación apenas podría hacer frente a las tareas en algunos lugares. Inicialmente, planeé desarrollar una solución más completa, con visualización del progreso, integración de voz, menos dependiente de los scripts de CLI, pero el tiempo prevaleció en esta carrera. En general, estoy satisfecho con cómo resultó todo. No hay sistemas de comunicación perfectos. Siempre debe usar el canal que sea más adecuado para su audiencia, ya sea
SMS ,
voz ,
chat ,
video o
semáforo .
Si desea hablar sobre la automatización de bodas, envíeme un correo electrónico en
Twitter .
