sorcio / python-italia-telegram-bot

0 stars 0 forks source link

[feature] Onboarding di nuovi utenti #6

Open sorcio opened 5 years ago

sorcio commented 5 years ago

Sembra che una delle funzioni che consideriamo più importanti sia inviare un messaggio di accoglienza agli utenti all'ingresso. La funzionalità è meno banale di quello che potrebbe sembrare perché vogliamo coprire diversi requisiti:

1) mostrare accoglienza a chi entra (anche solo un generico benvenuto) 2) fornire informazioni preliminari (cosa aspettarsi dal gruppo, chi contattare in caso di problemi) 3) in particolare modo, mostrare il codice di condotta della comunità (CoC) (in futuro potrebbe essere sostituito da un codice di condotta del gruppo) 4) assicurarsi che l'utente abbia preso visione del CoC 5) aprire una conversazione privata tra il bot e ciascun utente, in modo che il bot possa inviare segnalazioni in privato all'utente (ad esempio warning in caso di interventi di moderazione) 6) limitare l'utente, impedendo invio di messaggi, prima che l'utente abbia confermato di aver preso visione del CoC


Come prima proposta, l'esperienza dell'utente potrebbe essere di questo tipo:

1) (sul gruppo) al momento del join, l'utente riceverà un singolo messaggio pubblico che contiene una versione stringata del benvenuto, e un invito a cliccare un pulsante che inizierà una conversazione privata con il bot; contestualmente l'utente sarà limitato a tempo indefinito e non potrà inviare messaggi. 2) (in privato) se l'utente clicca il pulsante, aprirà una conversazione privata con il bot [nota-1]. Nella conversazione privata l'utente può fare "Start". 3) (in privato) dopo aver fatto "Start", il bot invierà un messaggio di benvenuto più ampio, che includa la descrizione del gruppo, gli scopi, e un link al CoC. Inoltre ci sarà una richiesta esplicita di leggere il CoC per continuare. Un ulteriore pulsante [nota-2] chiederà conferma della visione del CoC. 4) (in privato) dopo aver confermato la visione del CoC, il bot invierà un ulteriore messaggio. Il messaggio ringrazierà per la conferma e rinforzerà (sì, per la terza volta) il benvenuto. Conterrà link con comandi utili che possono essere eseguiti sia sul gruppo che in privato. Ad esempio potremmo prevedere un comando per mandare privatamente segnalazioni agli admin. Sarà presentata una lista degli admin e un reminder di contattarli in caso di necessità, disagio e violazioni del CoC. Infine un link al gruppo stesso con un invito a iniziare a chattare. 5) (sul gruppo) la restrizione sull'invio dei messaggi sarà rimossa contemporaneamente al punto 4.

[nota-1] Da chiarire cosa succede se l'utente era già in contatto con il bot (e se ci interessa che lo stesso bot possa gestire gruppi multipli). [nota-2] Il link al CoC potrebbe essere una pagina hostata dal bot stesso; la pagina potrebbe a sua volta contenere un link al bot con un token univoco per confermare la visione del testo. La difficoltà di questo approccio è che non su tutti i sistemi cliccare un link a Telegram dal browser è efficace.

MattiaFailla commented 5 years ago

Vorrei chiarire i dubbi sulle tue due note

nota-1: Ho verificato con tgbot che è possibile "resettare" lo start del bot, con la possibilità di risalire al gruppo di provenienza. In questo modo non ci cambia nulla (sia che il bot sia in un solo gruppo o in più gruppi)

nota-2: Sarebbe interessante integrare telegra.ph per il CoC. Gestire invece il discorso della lettura completa della pagina può risultare macchinoso e complesso (come comunico al bot il token?).

Il meccanismo di benvenuto è implementabile e sicuramente più funzionale.

Kavuti commented 5 years ago

L’esperienza utente proposta mi sembra ottimale. Per la nota-2 confermo che telegra.ph potrebbe fare al caso nostro in quanto è perfettamente integrato in telegram e consente la formattazione del testo, anche per una lettura più apprezzabile. Per la nota-1 probabilmente non ci saranno problemi, se Mattia ha in mano dei test stiamo apposto. Unica cosa penso ci convenga implementare il tutto facendo in modo che sia disattivabile in maniera indipendente dal modulo welcome

iflare3g commented 5 years ago
  1. (sul gruppo) al momento del join, l'utente riceverà un singolo messaggio pubblico che contiene una versione stringata del benvenuto, e un invito a cliccare un pulsante che inizierà una conversazione privata con il bot; contestualmente l'utente sarà limitato a tempo indefinito e non potrà inviare messaggi.

Quando l'utente al momento del join riceve il messaggio pubblico con il pulsante per la conversazione privata, come ci comportiamo nel caso in cui un altro utente, a caso, decida di cliccare su quel pulsante ? Se è qualcuno che è già in chat, può arrivare alla conversazione privata, ma blocchiamo la scrittura ?

D'accordissimo su telegra.ph, è fatto molto bene e comodo grazie alla Instant View

Kavuti commented 5 years ago

Quando l'utente al momento del join riceve il messaggio pubblico con il pulsante per la conversazione privata, come ci comportiamo nel caso in cui un altro utente, a caso, decida di cliccare su quel pulsante ?

Il problema non si presenterebbe se riuscissimo a visualizzare un popup all'utente che sta scrivendo ma non ha completato tutta la procedura. In alternativa il pulsante potrebbe semplicemente attivare il bot e spostare sulla conversazione, poi sarà il bot stesso a valutare se l'utente deve effettuare la procedura, se l'ha già effettuata ma aveva arrestato il bot o se non deve farla proprio.

sorcio commented 5 years ago

Grazie per i feedback sulla proposta!

Aggiungo chiarimenti sulla base di quello che ho capito.

Il link pubblico sul gruppo amerei che fosse evitabile. Ma non mi sembra di aver trovato nessuno strumento di Telegram che consenta una comunicazione puntuale a un utente singolo. Però credo che la questione non presenti problemi pratici (se non il fastidio di vedere questo messaggio a ogni join) perché il bot sa chi sono le persone in stato di attesa, quindi se clicca qualcuno di diverso non presenterà lo stesso flusso. Inoltre al link si può aggiungere informazione specifica, ad esempio un token che identifichi quell’evento di join. Ma forse non serve.

Telegra.ph è carino ed è una buona idea. Ci tengo a ricordare che non ha l’esclusiva sull’Instant View. Possiamo costruire e presentare qualunque pagina con Instant View, che aiuterebbe nel problema dell’uscita da Telegram di cui parlavo. Se fosse problematico anche quello, il CoC potrebbe essere mostrato direttamente in messaggi Telegram.

Il discorso del token di accettazione forse non era chiaro. Io ho immaginato che ogni pagina potesse generare un token univoco (magari a scadenza) specifico di quell’utente. Il link conterrà il token e lo passerà al bot, che potrà verificare che esattamente quel link è stato cliccato. Funziona anche come blanda misura antispam, senza ricorrere a un vero e proprio captcha: difficile che uno spam bot esegua tutte le operazioni richieste. Per poterlo fare, il bot deve avere capacità di hostare pagine web dinamiche. Se gestisce già i webhook allora è banale, e in ogni caso non troppo complesso.

sorcio commented 5 years ago

Il problema non si presenterebbe se riuscissimo a visualizzare un popup all'utente che sta scrivendo ma non ha completato tutta la procedura.

Conosci modi per realizzare questo?

iflare3g commented 5 years ago

Ma se invece di farlo già approdare sul gruppo pubblico e mostrare popup o click al button, non sarebbe meglio farlo approdare solo dopo aver parlato con il bot in privato ? Un po' come accade su @pythontalk che al join di un utente, viene richiesto di compilare un quiz su Python e alla fine viene indirizzato al canale principale

Più che altro perchè il discorso dei pulsanti ad ogni join potrebbe creare del rumore in chat quando capita che joinano più utenti in frangenti ristretti Ve lo dico per esperienza in un canale e non era piacevole come UX

sorcio commented 5 years ago

Ma se invece di farlo già approdare sul gruppo pubblico e mostrare popup o click al button, non sarebbe meglio farlo approdare solo dopo aver parlato con il bot in privato ?

Mi arrendo nuovamente alla mia ignoranza telegrammiana e domando: come funzionerebbe? Significa che il punto di approdo non è più il gruppo stesso ma qualcosa di diverso, ad esempio il bot, oppure un gruppo anticamera? Se è così allora introdurrebbe un costo (rendere il gruppo meno visibile e meno raggiungibile, negare accesso in sola lettura, maggiore complessità di gestione) e non so se valga il beneficio (evitare qualche messaggio di join). Siccome è una decisione difficile sia da implementare che da invertire vorrei avere più elementi, e coinvolgere gli altri admin.

Magari lo stesso beneficio si può ottenere, almeno in parte, assicurandosi che i messaggi siano compatti, eliminando i messaggi di join generati da Telegram, o magari addirittura eliminando i messaggi di benvenuto dopo che l'utente ha iniziato/concluso la procedura?

iflare3g commented 5 years ago

No no, il punto di ingresso è sempre il gruppo. Solo che al join viene iniziata una conversazione in privato col bot, una sorta di: "Completa questi veloci steps per avere accesso completo al gruppo", una volta finita la procedura di cui abbiamo parlato , facciamo che l'ultimo step sia la conferma di lettura del CoC viene mandato al gruppo pubblico e diventa a tutti gli effetti un membro Una sorta di anticamera, così si evita qualsiasi "rumore" nel gruppo pubblico , verrebbe mostrato solo il classico messaggio di benvenuto

Su @pythontalk funziona proprio in questo modo: Join al gruppo, inizio conversazione privata in cui bisogna compilare il quiz (@pythontalk_gatebot ), finite le 20 domande del quiz, si entra ufficialmente nel gruppo con un messaggio di benvenuto e il punteggio ottenuto compilando il quiz

sorcio commented 5 years ago

No no, il punto di ingresso è sempre il gruppo. Solo che al join viene iniziata una conversazione in privato col bot

Oh, grazie, avevo frainteso. Avevo escluso questa opzione perché, da precedenti discussioni, mi avevano fatto capire che un bot non può iniziare una conversazione privata con un utente che non l'abbia prima autorizzato. Da quello che capisco, per evitare che i bot possano iniziare spam in privato verso utenti Telegram.

Da quello che descrivi sembra che sia diverso. Cosa mi manca? :)

iflare3g commented 5 years ago

C'è un unica restrizione per evitare quel discorso: il bot può creare la conversazione , ma non iniziarla! Nel senso che, una volta che il bot contatta l'utente tramite chat_id, è quest'ultimo a dover cliccare start e iniziare a parlare

Schermata 2019-07-09 alle 10 36 51

Questo è quello che chiede il gate bot di python talk al join

sorcio commented 5 years ago

C'è un unica restrizione per evitare quel discorso: il bot può creare la conversazione , ma non iniziarla! Nel senso che, una volta che il bot contatta l'utente tramite chat_id, è quest'ultimo a dover cliccare start e iniziare a parlare

Perdona l'ottusità ma non sto riuscendo a capire. Credo che, oltre all'acume, mi manchi l'esperienza Telegram. Cosa significa "creare la conversazione ma non iniziarla"? Cosa significa "contatta l'utente"?

Ho provato ad accedere a @pythontalk per vedere io stesso ma non vedo il gruppo.

iflare3g commented 5 years ago

Questo è il link giusto, perdonami https://t.me/python_talk

Che praticamente ti apre una nuova chat con il bot, ma devi cliccare tu "start" per farlo parlare, da solo non può far nulla

Come si vede dall'immagine che ho postato nel commento, sono io che ho dovuto inviargli start per avviarlo come accade con ogni bot, però sono stato reindirizzato da lui quando ho cliccato join al canale

sorcio commented 5 years ago

Ho provato a entrare in quel gruppo e l'esperienza è questa: 1) un messaggio pinnato mi dice di premere un link per iniziare a chattare 2) se faccio "Join" vengo mutato istantaneamente 3) a differenza di quel che hai detto, non sono stato contattato da nessun bot (che mi sembra che sia, appunto, la cosa che escludevamo). Probabilmente se non interagisco con il bot io stesso non vado da nessuna parte.

Se è davvero così, e non è un difetto temporaneo, allora non è il tipo di esperienza che vorrei riprodurre. Già la proposta di questo issue mi sembra che crei fin troppo attrito per nuovi utenti e mi piacerebbe semplificarla. Chiedergli anche di trovare il link giusto è troppo (anche se un problema che dobbiamo porci è: cosa succede se l'utente perde il link?)

iflare3g commented 5 years ago

Allora è stato cambiato il flusso 👎 , quando sono entrato io era come ti avevo descritto che sinceramente non mi ha creato fastidio, tanto mi ha contattato il bot e ho dovuto fare il quiz Dici che sarebbe troppo invasivo l'esser contattato dal bot per completare la procedura ?

sorcio commented 5 years ago

Dici che sarebbe troppo invasivo l'esser contattato dal bot per completare la procedura ? Il punto mi sembrava fosse che non è possibile farlo in Telegram.

Kavuti commented 5 years ago

Attenzione, da quello che ho capito, si parla dello spostare la view dell'utente sulla chat non ancora iniziata con il bot. Questo comporta che se l'utente va indietro, la chat non è creata tantomeno avviata (come sappiamo).

A me piacerebbe fare in modo che ad ogni messaggio che l'utente provi a scrivere, gli si notifichi che non può farlo senza intasare di messaggi il gruppo. Ho provato a cercare la cosa del popup ma sembra che non ci siano widget disponibili per mandare popup da un bot se non l'utilizzo dei popup creati da telegram quando si cerca di effettuare il login in un sito tramite Telegram (cosa che devo ancora capire e che vedo molto poco utilzzata, sarà perché è recente).

iflare3g commented 5 years ago

In realtà un flusso del genere dovrebbe essere tranquillamente implementabile:

In un discorso del genere, anche se l'utente va indietro dopo essersi trovato nella "view" di conversazione col bot, comunque rimane in read only quindi se vuole essere un membro a tutti gli effetti è obbligato a parlare col bot e a completare la procedura richiesta

Che io sappia, questo flusso è tranquillamente fattibile con le attuali API di TG

MattiaFailla commented 5 years ago

Vorrei chiarire i dubbi di tutti perchè mi sembra che stiamo facendo tanta confusione.

Il flusso più idoneo e sicuramente che genera meno problemi è il seguente:

Vorrei ricordare a tutti che se scegliamo di usare tgbot (che consiglio vivamente) siamo molto più comodi per i seguenti motivi:

In secondo luogo, la gestione di un di un token risulta macchinoso e inutile se con le API possiamo accedere al callback del pulsante.

Spero di aver risolto alcuni dubbi e fatemi sapere se per voi va bene.

iflare3g commented 5 years ago
  • Utente entra nel gruppo e viene mutato. Il bot, sul gruppo, invita l'utente a contattarlo (tramite bottone) per essere abilitato a parlare.

Sarebbe stato carino senza dover cliccare sul pulsante, ma nella documentazione non vedo nessun modo di "mandare" l'utente nella chat col bot, cioè è possibile scrivergli però all'utente arriverebbe solo la notifica di un nuovo messaggio, "fisicamente" resta sul gruppo. Quindi, a questo punto, concordo col pulsante