Projet

Général

Profil

Development #2554

Possibilité d'envoyer un "lien d'action" dans les emails de workflows

Ajouté par Victor Claudet il y a environ 11 ans. Mis à jour il y a plus de 5 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Version cible:
-
Début:
27 février 2013
Echéance:
06 septembre 2018
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:

Description

L'idée serait de pouvoir d'insérer un lien dans un email qui pointe vers une action de workflow.
Ces liens permettent à des contacts qui n'accèdent pas au back-office de pouvoir tout de même agir sur une demande.

Ex: Je demande une validation du maire, je lui envoi un mail avec un récap de la demande initiale. Il valide en cliquant sur le lien oui ou le lien non. Le workflow réagit en conséquence.

Ex: Un technicien reçoit un mail d'intervention bâtiment sur son smartphone, il répare sur place et clic directement sur le lien dans son message smartphone (sms ou mail) et notifie directement le worklow du traitement du problème.


Fichiers

Révisions associées

Révision 76dcfc2f (diff)
Ajouté par Frédéric Péters il y a plus de 5 ans

expose /actions/ directory (#2554)

Révision ee488d19 (diff)
Ajouté par Frédéric Péters il y a plus de 5 ans

add possibility to send "action links" in emails (#2554)

Historique

#1

Mis à jour par Thomas Noël il y a environ 11 ans

Si je comprends, en guise d'authentification, le lien aurait juste un "token" (avec une durée de validité) ?

Dans ce cas, toute personne qui clique dessus pourra lancer l'action. C'est pratique mais pas très sécure, faut en être bien bien conscient (typiquement, si le mail est transféré, etc).

Autre soucis dans la demande : comment insérer le lien dans le mail, et comment dire quelle action il effectue ? Quelles actions vois-tu ? pour ma part je ne vois que des sauts...?

(Et sinon, juste pour savoir, qui fait cette demande ?)

#2

Mis à jour par Frédéric Péters il y a environ 11 ans

Perso je suis assez opposé à l'idée de déclencher une action sur base de l'accès (GET) à une URL, il peut trop facilement y avoir un accès automatique, pour vérifier qu'il n'y a pas de malware au bout, pour afficher une prévisu en tooltip, ce genre de trucs, qui font qu'il faut absolument pour moi passer par du POST.

En ce qui concerne les autorisations, j'imaginais en première lecture que les accès se faisaient quand même par des personnes authentifiées, ça m'effraierait assez que ce ne soit pas le cas. Et dans cette situation, les rôles existants suffisent, et on pourrait individuellement, bouton de transition par bouton de transition, avoir des URL qui afficheraient l'action et un bouton de validation. Celles-ci pourraient alors simplement être placées dans le mail (si l'objectif est de ne pas encombrer l'affichage par toute l'interface de backoffice).

#3

Mis à jour par Thomas Noël il y a environ 11 ans

Frédéric Péters a écrit :

Perso je suis assez opposé à l'idée de déclencher une action sur base de l'accès (GET) à une URL, il peut trop facilement y avoir un accès automatique, pour vérifier qu'il n'y a pas de malware au bout, pour afficher une prévisu en tooltip, ce genre de trucs, qui font qu'il faut absolument pour moi passer par du POST.

Il peut y avoir un mix : un GET (avec le token) amène sur une page qui demande à la personne de valider sa demande d'action (via un POST).

#4

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

  • Patch proposed mis à Non

Imaginer une vue qui donne une fonction particulière à n'importe qui sur un formulaire le temps d'une action ? Ça évite d'inventer le fait d'afficher juste un bouton, on réutilise la vue normale.

?function=xxx&signature=zzz
(on a déjà le code de signature et il y a #10922 pour gérer des signatures qui durent plus longtemps).
#5

Mis à jour par Thomas Noël il y a plus de 6 ans

Pourquoi pas, mais il faudrait que la fonction ne soit donnée que sur la demande liée, et rien d'autre... pas si simple.

Et il faudrait aussi éviter que les moteurs de recherche "cliquent" sur le lien (oui gmail je pense à toi), et se retrouvent devant des données perso (surtout dans le cas dont on parle au cd59, "professionnel de santé", tout est dit). Ça pourrait se passer par un machin genre captcha.

#6

Mis à jour par Benjamin Dauvergne il y a plus de 6 ans

Bon alors c'est peut-être plus simple de repartir du principe des trackings codes et de le muscler:
  • avoir plusieurs tracking codes
  • pour un tracking code pouvoir désigner le rôle que ça représente, pas forcément demandeur

Dans le mail on met un lien et le tracking code, la personne doit le retapper, impossible que Google suive ça automatiquement.

Oui bien on reste sur ça et on prévoit bêtement une page intermédiaire qui prévient de ce qui se passe et exige un POST de validation "Great power, great responsibility tout ça", tu peux ranger ça dans la case captcha si tu veux, Google passera pas ça non plus.

#7

Mis à jour par Thomas Noël il y a environ 6 ans

Une autre idée plus farfelue, de moi, c'est de mettre des mailto: dans le message, genre·

  mailto:publik+form23-33.action34.token4BD62G@ville.fr?subject:OK avec la demande 23-33 de M. Dugenou
  mailto:publik+form23-33.action42.token812HDC@ville.fr?subject:non à cette demande farfelue

(le tout présenté joliment en HTML, on verra pas ces liens moches, juste des
boutons).

Quand il clique le gars est donc invité à saisir un mail dans son logiciel de mail sur lequel il est déjà, il peut y écrire éventuellement une raison, une prose, ou pas, il cliquer sur "envoyer" et ça finira par arriver dans Publik dans la demande concernée.

Il peut même le faire offline un TGV sans wifi, ses décisions seront envoyées quand il synchronisera ses mails.

Y'a un poil de difficulté technique dans cette dernière solution "par mail" (avoir le bon robot de mail) mais je la trouve amusante.

#8

Mis à jour par Thomas Noël il y a environ 6 ans

Sinon, idée Benjamin :

On pourrait éventuellement étudier la possilité d'un formulaire HTML, ie d'une action par « POST » ... le risque est certainement moins grand selon
https://www.stonetemple.com/does-google-sniff-gmail-for-urls/

#9

Mis à jour par Anonyme il y a environ 6 ans

Benjamin Dauvergne a écrit :

Bon alors c'est peut-être plus simple de repartir du principe des trackings codes et de le muscler:
  • avoir plusieurs tracking codes
  • pour un tracking code pouvoir désigner le rôle que ça représente, pas forcément demandeur

Dans le mail on met un lien et le tracking code, la personne doit le retapper, impossible que Google suive ça automatiquement.

Oui bien on reste sur ça et on prévoit bêtement une page intermédiaire qui prévient de ce qui se passe et exige un POST de validation "Great power, great responsibility tout ça", tu peux ranger ça dans la case captcha si tu veux, Google passera pas ça non plus.

Je m'incruste dans la réflexion:
  1. mettre des FORM dans des émails est expérimental, il faut modifier le DOCTYPE, et les résultats ne sont pas encourageants : https://github.com/massimo-cassandro/email-forms-test
  2. mettre des mailto
  3. j'abonde pour le fonctionnement proposé dans le message#6 de Benjamin, et qui est très courant. Un lien pour le CTA dans l’émail (avec un token de validation) qui aboutit sur un FORM de réponse éphémère dans le navigateur (avec si besoin un couche de validation supplémentaire genre demander le numéro de suivi, ou reconfirmer son nom de famille ou son email, voir même un captcha)
Dans ce dernier cas, trois bonnes pratiques d'implémentation sont:
  1. 1 email = 1 demande à l'utilisateur
  2. le sujet du mail = l'action
  3. 1 email = 1 lien CTA
En extra, pour augmenter le taux de réponse (si c'est pas déjà le cas... désolé je débarque):
  1. inclure dans l'email une capture ou un GIF de l'interface du FORM qu'on demande à l'utilisateur de consulter pour lui montrer qu'on va pas le manger
  2. confirmer la validation de l'envoir du FORM avec un émail de remerciements avec un résumé des données entrées et les étapes à venir.

Voilà, si ça peut servir

#11

Mis à jour par Frédéric Péters il y a presque 6 ans

D'une discussion aujourd'hui,

  • ajout d'un identifiant (optionnel) aux actions de saut manuel
  • templatetag / directive restructuredtext / que sais-je, pour inclure un lien stylé bouton dans un email
  • page de destination affichant juste le nom du formulaire et le libellé de l'action
  • sur POST exécution du workflow
#12

Mis à jour par Josué Kouka il y a presque 6 ans

  • Assigné à mis à Josué Kouka
#13

Mis à jour par Josué Kouka il y a presque 6 ans

  • Echéance mis à 06 septembre 2018
#14

Mis à jour par Brice Mallet il y a presque 6 ans

  • Description mis à jour (diff)
#15

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Assigné à changé de Josué Kouka à Frédéric Péters

Soyons réalistes, il est maintenant trop tard; et comme j'en ai ma claque, je m'assigne le ticket.

#16

Mis à jour par Frédéric Péters il y a plus de 5 ans

Voilà un patch faisant le job, aussi dans wip/2554-email-action-links.

Pour reprendre d'un commentaire précédent :

ajout d'un identifiant (optionnel) aux actions de saut manuel

"identifier", tant qu'à faire je l'ai aussi tapé en classe CSS mais c'est accessoire.

templatetag / directive restructuredtext / que sais-je, pour inclure un lien stylé bouton dans un email

Deux temps, d'abord un templatetag, exemple :

{% action_button "do-accept" label="Accept!" %}

il crée un jeton et pose l'info dans le template (une chaine "---===BUTTON:%(token)s:%(label)s===---" qui ne sera pas touchée par la conversion rst.

Ensuite lors de l'envoi (et bien sûr ça casse la séparation wcs vs qommon mais c'est loin d'être la première fois), ce passage est remplacé dans les morceaux txt et html du message.

Pour la version texte ça fait [libellé] https://...

Pour la version HTML ça appelle le template qommon/email_button_link.html qui de base fait juste <a href="...">...</a> mais est repris dans publik-base-theme comme extends emails/button-link.html, pour ainsi obtenir des boutons/liens similaires à ceux des messages authentic.

page de destination affichant juste le nom du formulaire et le libellé de l'action

+ une phrase "Please confirm action."; c'est fait via un template django, on aura la main si jamais on veut.

sur POST exécution du workflow

Ici j'ai hésité entre exploiter le submit_form de ChoiceWorkflowStatusItem ou simplement passer par l'existant jump_and_perform, ce dernier m'a paru plus net.

Comme question à un moment je me suis demandé si dans le jeton, puis passer l'info dans le workflow, il y aurait sens à mentionner la liste des destinataires de l'email, mais je n'ai rien fait ça à ce sujet.

#17

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

Frédéric Péters a écrit :

Comme question à un moment je me suis demandé si dans le jeton, puis passer l'info dans le workflow, il y aurait sens à mentionner la liste des destinataires de l'email, mais je n'ai rien fait ça à ce sujet.

Je dirai que ça pourrait être bien, mais mieux si une session est ouverte vérifier qu'elle a les droits nécessaire pour l'action et prendre en compte l'identité de la personne exacte pour l'action et peut-être même pas demander de confirmation via POST dans ce cas. En fait je me demande l'intérêt de ne pas exiger d'authentification par défaut; que pour certains boutons l'action soit possible par un quidam et juste lui, mais dans le cas d'un mail envoyé à un rôle, c'est peut-être mieux que l'agent se connecte.

Une fois le jeton consommé, est-ce qu'on ne le marquerait comme étant usé (idéalement on devrait avoir un jeton par mail pour toutes les actions mais bon) ? Ici on va s'en sortir parce que pour un identifiant d'action donné suite au saut on ne devrait plus trouver les mêmes actions et donc TraversalError.

PS: aussi ça aurait été bien de pouvoir envoyer un mail par user/email et de coder cette information dans le lien en plus du numéro du jeton, mais j'en parle juste pour un monde idéal, ton patch fait largement le job.

#18

Mis à jour par Frédéric Péters il y a plus de 5 ans

Je dirai que ça pourrait être bien, mais mieux si une session est ouverte vérifier qu'elle a les droits nécessaire pour l'action et prendre en compte l'identité de la personne exacte pour l'action et peut-être même pas demander de confirmation via POST dans ce cas. En fait je me demande l'intérêt de ne pas exiger d'authentification par défaut; que pour certains boutons l'action soit possible par un quidam et juste lui, mais dans le cas d'un mail envoyé à un rôle, c'est peut-être mieux que l'agent se connecte.

Cet envoi il est fait pour des personnes qui veulent agir sans se connecter (la description du ticket est d'époque); maintenant on peut s'interroger sur le comportement quand c'est exploité par des agents connectés mais peut-être ailleurs ? (il y aurait par exemple à faire un retour vers la demande / un listing, après l'action, genre)

Une fois le jeton consommé, est-ce qu'on ne le marquerait comme étant usé (idéalement on devrait avoir un jeton par mail pour toutes les actions mais bon) ? Ici on va s'en sortir parce que pour un identifiant d'action donné suite au saut on ne devrait plus trouver les mêmes actions et donc TraversalError.

Il y a bien une suppression du jeton une fois l'action exécutée (self.token.remove_self()).

#19

Mis à jour par Benjamin Dauvergne il y a plus de 5 ans

  • Statut changé de Solution proposée à Solution validée

Ok ack. On verra ce que ça donne à l'usage.

#20

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Solution validée à Résolu (à déployer)
commit ee488d19f1eeb720a293942ea41df252921d3cc2
Author: Frédéric Péters <fpeters@entrouvert.com>
Date:   Wed Aug 8 13:34:43 2018 +0200

    add possibility to send "action links" in emails (#2554)
#21

Mis à jour par Frédéric Péters il y a plus de 5 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF