Development #2554
Possibilité d'envoyer un "lien d'action" dans les emails de workflows
0%
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
add possibility to send "action links" in emails (#2554)
Historique
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 ?)
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).
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).
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).
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.
Mis à jour par Benjamin Dauvergne il y a plus de 6 ans
- 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.
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.
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/
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:Je m'incruste dans la réflexion:
- 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.
- mettre des
FORM
dans des émails est expérimental, il faut modifier leDOCTYPE
, et les résultats ne sont pas encourageants : https://github.com/massimo-cassandro/email-forms-test - mettre des
mailto
- 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)
- 1 email = 1 demande à l'utilisateur
- le sujet du mail = l'action
- 1 email = 1 lien CTA
- 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 - 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
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
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.
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Fichier 0001-add-possibility-to-send-action-links-in-emails-2554.patch 0001-add-possibility-to-send-action-links-in-emails-2554.patch ajouté
- Fichier 0001-templates-add-button-link-tempalte-for-w.c.s.-2554.patch 0001-templates-add-button-link-tempalte-for-w.c.s.-2554.patch ajouté
- Fichier 0001-expose-actions-directory-2554.patch 0001-expose-actions-directory-2554.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
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.
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.
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()).
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.
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)
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
expose /actions/ directory (#2554)