¿Cuál es una solución fácil de usar para editar plantillas de correo electrónico con variables de reemplazo?

9

Estoy trabajando en un sistema en el que confiamos que muchos "administradores / gerentes" envíen correos electrónicos a los usuarios desde la base de datos. Una de las características clave es poder enviar correos electrónicos a varias personas al mismo tiempo, con información específica relevante para cada una de ellas. Otra característica clave es poder elaborar correos electrónicos a mano, ya que suele ser necesario modificarlos ligeramente cada vez, pero tener una plantilla básica ahorra mucho tiempo.

Para esto, tenemos la solución típica de "plantillas", donde tenemos una plantilla que se ve así:

Hello {{recipient.full_name}},

Your application to {{activity.title}} has been accepted. 
You have requested to participate on dates {{application.dates}}, in role {{application.role}}
Blah blah blah

El problema que tenemos es, obviamente, que (como esperábamos), los gerentes no tienen la idea completa de "variables", y hacen cosas como sobrescribirlas, lo que no les permite enviar correos electrónicos a más de una persona a la vez, suponiendo esos no van a ser reemplazados y que el sistema está roto, o incluso cosas inexplicables como "Hola {{John}}".

El gran problema es que esto no está relegado, como de costumbre, a una sección de "administrador" donde solo unos pocos usuarios avanzados tienen acceso para editar las plantillas que se envían automáticamente, y se espera que sepan lo que están haciendo. Todos los usuarios del sistema quedan expuestos a este problema.

La solución obvia sería reemplazar las variables antes de mostrar esta plantilla para que el usuario la edite, pero eso no funciona cuando se envían correos electrónicos a varias personas.

Esto parece un problema razonablemente común, y esperamos que alguien ya lo haya resuelto.

¿Has visto en alguna parte / creado / puedes pensar en buenas soluciones para este problema?

Actualizar

Lo que terminé haciendo en función de la respuesta de Daniel B fue detectar, en función de la posición del cursor y la posición de {{}} en el código si el usuario está actualmente "dentro de una variable" o "fuera". En el interior, muestro un pequeño fragmento de texto debajo del área de texto grande explicando que esto será reemplazado y que pueden eliminarlo por completo si lo desean, pero no pueden editarlo.

Hago esto en Click, onChange, onKeyDown, onKeyUp. Para los eventos "clave", si estamos dentro de una variable, solo devuelvo VERDADERO si el KeyCode es una de las pocas claves "de navegación". De lo contrario, devuelvo FALSE, lo que efectivamente impide la edición de esa variable.

No es perfecto, pero fue muy barato y parece efectivo.

Daniel Magliola
fuente
Comente a personas con más representantes que yo: (Soy nuevo en UX) ¿Podría etiquetar esta pregunta? Todas las etiquetas en las que estoy pensando todavía no existen aquí: plantillas variables interfaz de usuario fácil de usar editable por el usuario
¿Cómo se presentan estas plantillas? ¿Es solo texto sin formato en un editor?
ChrisF
En este momento, sí, cuando selecciona un grupo de personas y hace clic en "Mensaje", aparece un cuadro de diálogo "emergente" con un área de texto grande que tiene el contenido de la plantilla allí mismo. En realidad es markDown, aunque obviamente nuestros usuarios no están acostumbrados, parece texto sin formato. No tenemos un editor wysiwyg, y estamos abiertos a usar uno si ayuda, pero por sí solo no lo hace, la gente todavía no entenderá las variables
El problema raíz aquí es que sus gerentes no entienden las variables. A menos que solucione ese problema, está arrojando soluciones a los síntomas. No todos los problemas necesitan una solución de codificación.
Darknight el
Convenido. Me encantaría poder educar a las personas, pero obviamente no podemos pedirles que lean los manuales, por lo que estoy buscando ideas sobre cómo hacerles entender fácilmente. Ideas?
Daniel Magliola

Respuestas:

3

A pedido de los comentarios en la respuesta de ChrisF, aquí hay una solución que he usado en el pasado:

  • Utilice un WinTems RichTextBox para permitir al usuario editar el texto de la plantilla.
  • Permitir arrastrar / soltar (u otra inserción) de variables o marcadores de posición en RichTextBox.
  • No permita la edición de las propias variables al verificar alrededor del lugar actual del cursor para los delimitadores de sus variables (los símbolos {{y}}, en su ejemplo).

Mi implementación terminó pareciéndose a esto:

Ejemplo de RichTextBox

Tiene resaltado opcional de la variable para diferenciarla del texto estándar.
Los delimitadores variables están realmente allí, simplemente tienen los mismos colores de primer plano y fondo.

Obviamente, esto es bastante diferente a su implementación, que está basada en HTML. Probablemente me gustaría ver cómo se implementa el editor de Gmail; parece ser similar a un área de texto, pero puede tener imágenes en línea (emoticones, etc.), que es similar al comportamiento que está buscando.

Daniel B
fuente
4

Consideraría cambiar la forma en que se presenta la plantilla al usuario para que pueda hacer que las partes que serán cambiadas por el código no sean editables. Algo como esto:

Bosquejo

Los bits que no desea que el usuario cambie ahora no son editables. Puede incluir un botón de cierre para que puedan eliminar los elementos si no los necesitan. También puede incluir texto explicativo y / o información sobre herramientas para explicar qué {{...}}significan los bits y por qué deben dejarse solos.

Usar algo como Silverlight / WPF WrapPanelpara cada párrafo podría proporcionarle algo que permita que cada parte (editable y no editable) fluya a medida que el texto controlado por el usuario crece y se reduce.

ChrisF
fuente
El principal problema con esto es que no puedo hacer que los cuadros de texto sean "en línea" y "multilínea" ... Y, por lo tanto, el diseño sería extremadamente extraño ... Si pudieras editar ese "Estimado" y la variable se movería correcto, y había otro cuadro de texto correcto que envuelto mágicamente, esto sería IMPRESIONANTE. Pero no veo cómo puedo implementar esto. La alternativa con la que hemos tratado de trabajar es tener bloques "no editables" dentro de un área de texto grande, para que no pueda cambiar su contenido, pero puede eliminarlos (con una "X"). No hemos podido hacer que esto funcione. ¿Lo has visto en alguna parte? ¡¡¡Gracias!!!
@DanielMagliola bueno, algo como Silverlight / WPF WrapPanelpara cada párrafo podría darte algo como lo que quieres.
ChrisF
@DanielMagliola en el pasado, he podido lograr esto con un WinTems RichTextBox. Las "variables" se pueden arrastrar y soltar en el cuadro de texto enriquecido, y se le aplicará un estilo para que quede claro que es un marcador de posición. La parte difícil es evitar cambios en las variables. Una solución es verificar la ubicación actual del cursor para los caracteres de su etiqueta y no permitir la edición si ese es el caso.
Daniel B
Olvidé mencionar esto, esta es una aplicación HTML, pero aún así esa idea es aplicable. Me gusta la "comprobación de la posición del cursor y no permitir la idea de edición", ¡gracias por eso!
Daniel Magliola
@DanielB: En realidad, ¿puedes responder eso? ¡Creo que tienes el ganador! ¡¡Gracias!!
Daniel Magliola