Jakie jest przyjazne dla użytkownika rozwiązanie do edytowania szablonów e-mail ze zmiennymi zastępującymi?

9

Pracuję nad systemem, w którym polegamy na wielu „administratorach / menedżerach” wysyłających e-maile do użytkowników z bazy danych. Jedną z kluczowych funkcji jest możliwość wysyłania wiadomości e-mail do kilku osób jednocześnie, podając szczegółowe informacje dotyczące każdej z nich. Inną kluczową cechą jest możliwość ręcznego tworzenia wiadomości e-mail, ponieważ zwykle konieczne jest ich nieznaczne modyfikowanie za każdym razem, ale posiadanie podstawowego szablonu oszczędza dużo czasu.

W tym celu mamy typowe rozwiązanie „szablonów”, w którym mamy szablon wyglądający mniej więcej tak:

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

Problem, który mamy, jest oczywiście taki, jak oczekiwaliśmy, że menedżerowie nie rozumieją całej idei „zmiennych” i robią takie rzeczy, jak nadpisywanie ich, co nie pozwala im wysyłać wiadomości e-mail do więcej niż jednej osoby na raz, zakładając, że nie zostaną one zastąpione i że system jest uszkodzony, a nawet niewytłumaczalne rzeczy, takie jak „Hello {{John}}”.

Dużym problemem jest to, że jak zwykle nie jest to przenoszone do sekcji „admin”, w której tylko kilku zaawansowanych użytkowników ma dostęp do edycji szablonów, które są automatycznie wysyłane i oczekuje się, że będą wiedzieć, co robią. Każdy użytkownik systemu zostaje narażony na ten problem.

Oczywistym rozwiązaniem byłoby zastąpienie zmiennych przed wyświetleniem tego szablonu do edycji przez użytkownika, ale nie działa to w przypadku wysyłania wiadomości e-mail do kilku osób.

Wydaje się, że jest to dość powszechny problem i mamy nadzieję, że ktoś już go rozwiązał.

Czy widziałeś / stworzyłeś / potrafisz wymyślić dobre rozwiązania tego problemu?

Aktualizacja

Ostatecznie zrobiłem na podstawie odpowiedzi Daniela B. Wykrywanie, na podstawie pozycji kursora i pozycji {{}} w kodzie, czy użytkownik jest obecnie „wewnątrz zmiennej”, czy „na zewnątrz”. W środku pokazuję mały fragment tekstu pod dużym obszarem tekstowym, wyjaśniając, że zostanie on zastąpiony i że mogą go całkowicie usunąć, jeśli chcą, ale nie mogą go edytować.

Robię to onClick, onChange, onKeyDown, onKeyUp. W przypadku zdarzeń „kluczowych”, jeśli znajdujemy się w zmiennej, zwracam PRAWDA tylko wtedy, gdy keyCode jest jednym z kilku kluczy „nawigacyjnych”. W przeciwnym razie zwracam FAŁSZ, co skutecznie zapobiega edycji tej zmiennej.

Nie jest idealny, ale był bardzo tani i wydaje się skuteczny.

Daniel Magliola
źródło
Komentarz do osób z większą liczbą przedstawicieli niż ja: (jestem nowy w UX) Czy możesz otagować to pytanie? Wszystkie tagi, o których myślę, jeszcze nie istnieją: szablony zmienne interfejs użytkownika przyjazny dla użytkownika edytowalny
Jak prezentowane są te szablony? Czy to tylko zwykły tekst w edytorze?
ChrisF
W tej chwili tak, kiedy wybierzesz grupę ludzi i klikniesz „Wiadomość”, pojawi się okno dialogowe „pop-in” z dużym obszarem tekstowym, który zawiera treść szablonu. To właściwie markDown, chociaż oczywiście nasi użytkownicy nie są do tego przyzwyczajeni, wygląda jak zwykły tekst. Nie mamy edytora wysiwyg i jesteśmy otwarci na użycie go, jeśli to pomoże, ale samo w sobie nie robi, ludzie nadal nie zrozumieją zmiennych
Problemem korzeń tutaj, jest to, że menedżerowie nie rozumiejąc zmienne. Jeśli nie rozwiążesz tego problemu, twoje rozwiązania rzucania na objawy. Nie wszystkie problemy wymagają rozwiązania w zakresie kodowania.
Darknight
Zgoda. Chciałbym móc edukować ludzi, ale oczywiście nie możemy prosić ich o przeczytanie instrukcji, więc szukam pomysłów, jak uczynić to dla nich zrozumiałym. Pomysły?
Daniel Magliola,

Odpowiedzi:

3

Na prośbę z komentarzy w odpowiedzi ChrisF, oto jedno rozwiązanie, z którego korzystałem w przeszłości:

  • Użyj RichTextBox WinForms, aby umożliwić użytkownikowi edycję tekstu szablonu.
  • Zezwalaj na przeciąganie / upuszczanie (lub inne wstawianie) zmiennych lub symboli zastępczych w RichTextBox.
  • Nie zezwalaj na edycję samych zmiennych, sprawdzając wokół bieżącego miejsca kursora ograniczniki zmiennych (w twoim przykładzie symbole {{i}}).

Moja implementacja wyglądała mniej więcej tak:

Przykład RichTextBox

Opcjonalnie wyróżnia zmienną, aby odróżnić ją od tekstu standardowego.
W rzeczywistości istnieją ograniczniki zmiennych, po prostu mają te same kolory pierwszego planu i tła.

Oczywiście różni się to od implementacji opartej na HTML. Prawdopodobnie przyjrzałbym się, jak zaimplementowano edytor Gmaila; wydaje się być podobny do obszaru tekstowego, ale może mieć wbudowane obrazy (emotikony itp.), które są podobne do zachowania, którego szukasz.

Daniel B.
źródło
4

Rozważę zmianę sposobu prezentacji szablonu użytkownikowi, aby można było uniemożliwić edytowanie części, które zostaną zmienione przez kod. Coś takiego:

makieta

Bity, których użytkownik nie chce zmieniać, nie są teraz edytowalne. Możesz dołączyć przycisk zamykania, aby mogli usunąć elementy, jeśli ich nie potrzebują. Możesz także dołączyć tekst objaśniający i / lub podpowiedzi, aby wyjaśnić, co {{...}}oznaczają bity i dlaczego należy je zostawić w spokoju.

Użycie czegoś takiego jak Silverlight / WPF WrapPaneldla każdego akapitu może dać ci coś, co pozwala na przepływ każdej części (edytowalnej i nieedytowalnej), gdy tekst kontrolowany przez użytkownika rośnie i kurczy się.

ChrisF
źródło
Główny problem polega na tym, że nie mogę sprawić, by pola tekstowe były zarówno „wstawiane”, jak i „wielowierszowe” ... A zatem układ byłby bardzo dziwny ... Gdybyście mogli edytować ten „Drogi”, a zmienna poruszałaby się tak, a po prawej było jeszcze jedno pole tekstowe, które magicznie zapakowane, byłoby NIESAMOWITE. Ale nie widzę, jak mogę to zaimplementować. Alternatywą, nad którą próbowaliśmy pracować, jest posiadanie „nieedytowalnych” bloków wewnątrz dużego obszaru tekstowego, abyś nie mógł zmienić ich zawartości, ale możesz je usunąć (za pomocą „X”). Nie byliśmy w stanie sprawić, by to zadziałało. Widziałeś to gdzieś? Dzięki!!!
@DanielMagliola oraz coś takiego jak Silverlight / WPF WrapPaneldla każdego akapitu może dać ci coś takiego, jak chcesz.
ChrisF
@DanielMagliola w przeszłości udało mi się to osiągnąć za pomocą WinForms RichTextBox. „Zmienne” można przeciągać i upuszczać w polu tekstowym richtext, a stylizacja zostanie do niego zastosowana, aby było jasne, że jest to symbol zastępczy. Trudną częścią jest zapobieganie zmianom zmiennych. Jednym z rozwiązań jest sprawdzenie aktualnego położenia kursora dla znaków w tagach i, jeśli tak nie jest, zabronienie edycji.
Daniel B
Zapomniałem wspomnieć o tym, to jest aplikacja HTML, ale nadal ten pomysł ma zastosowanie. Podoba mi się „sprawdzanie pozycji kursora i nie zezwalanie na edytowanie”, dziękuję za to !!
Daniel Magliola,
@DanielB: Właściwie, czy możesz udzielić odpowiedzi, myślę, że masz zwycięzcę! Dziękuję Ci!!
Daniel Magliola,