Questo articolo è il secondo di una serie. Leggete la prima parte, Tutte chiacchiere e niente pulsanti: la Conversational UI
Nella prima parte di questo articolo, abbiamo parlato dei principi base delle interfacce conversational e perché dovreste prenderne in considerazione la realizzazione per il vostro prodotto. Qui, esamineremo un po’ più approfonditamente i pattern più specifici e vedremo in che modo potete tradurli in forma conversational.
Voglio presentare alcuni casi come esempi per illustrare i problemi della progettazione di una conversational interface ed esaminare alcune delle soluzioni che abbiamo trovato in Meekan.
Validare l’input#section1
Con una GUI tipica, quando si chiede a un utente di fornire più informazioni (solitamente compilando una form), avete molti modi per essere sicuri di ottenere una risposta pulita ed utile prima di procedere con l’elaborazione di questa. È un indirizzo email valido? È un numero di telefono? Questo username è disponibile? Potete restringere l’input perché siano solo numeri o qualcosa da scegliere in una lista predeterminata.
In una conversazione non c’è questo privilegio. La persona con cui state parlando è libera di digitare (o dire) qualunque cosa, quindi sta a voi costruire le vostre domande in maniera appropriata ed elaborare le risposte nella maniera più intelligente possibile.
Fate il mining della richiesta per le informazioni#section2
Supponiamo che il vostro robot stia distribuendo delle t-shirt. Deve chiedere all’utente la taglia e il colore. Se l’utente inizia con “Voglio una maglietta rossa taglia M”, avete già tutto quello che vi serve bell’e pronto.
Ma se è il robot ad aprire la conversazione, o se l’utente semplicemente dice “Posso avere una maglietta?”, voi dovrete mettere assieme i pezzi mancanti.
Date suggerimenti#section3
Quando è possibile, evitate le domande aperte e cercate di dimostrare che tipo di risposta vi interessa. Se l’insieme delle possibili risposte è piccolo, elencatele e basta.
Che taglia di maglietta porti? Abbiamo M, L e XL
Come regola generale, dovreste gestire ogni item separatamente. Chiedete la taglia: quando avete la risposta, chiedete del colore. Mischiare vari dettagli in una frase renderà il parsing corretto più difficile, quindi ponete domande in modo che vengano incoraggiate risposte specifiche.
Riconoscere#section4
Quando la risposta è valida, ripetetela per essere sicuri di averla compresa correttamente e proseguite.
Capito. Taglia L. E che colore vorresti?
Spiegate cosa è andato storto#section5#section5
Se l’input non è valido, spiegate di nuovo cosa vi aspettavate (rispetto a quello che avete ricevuto). Se possibile, siate smart nel distinguere tra risposte che non capite e risposte che hanno senso ma che non potete accettare.
E che colore vorresti?
viola
Sono spiacente, non abbiamo il viola. Abbiamo bianco, grigio, marrone, rosso, arancio, rosa e nero. Che colore vorresti?
brbrbl
Chiedo scusa, “brbrbl”? È un colore? Abbiamo bianco, grigio, marrone, rosso, arancio, rosa e nero. Che colore vorresti?
grigio
Cool! Quindi, una t-shirt grigia taglia L!
Perdonare è divino#section6
Ricordate, gli utenti stanno parlando con voi, non stanno puntando a cose in un elenco. Hanno più di un modo per dire cosa vogliono. Se chiedete la taglia di una t-shirt, “extra-large”, “XL” o addirittura “la taglia più grande che avete” possono tutti significare la stessa cosa. “Thursday”, “thu”, “thrusday” (sì, con un errore) ed eventualmente “domani” potrebbero tutti indicare lo stesso giorno.
Cambiare tasks#section7
Torniamo per un attimo alla nostra cara vecchia GUI. Un’app tradizionale può eseguire diverse funzioni, che solitamente sarebbero separate in finestre discrete (o pagine, o schermate). Se ho un calendario, probabilmente mi mostrerà tutte le mie riunioni mensili sullo schermo, quando voglio modificarne una, passo ad uno schermo differente e ritorno al precedente schermo quando ho finito.
Ma una conversazione è solo una lunga serie di frasi. Come passate tra varie funzioni? Come sapete su quale task state lavorando al momento? Vediamo come va a finire.
L’utente inizia un nuovo task:
Meekan, fissami una riunione del team per domani
Il robot passa nel suo stato “programma una nuova riunione” e comincia a raccogliere le informazioni di cui ha bisogno. Ma succede qualcosa: l’utente non è più interessato a programmare una nuova riunione e vuole invece controllare la sua agenda per giovedì.
Meekan, quanti impegni ho giovedì?
Questo è l’equivalente del premere il pulsante “chiudi” sulla finestra Nuova Riunione o premere Esc sulla tastiera. Abbiamo alcuni modi per gestirlo.
Resistere al cambiamento#section8
Quando il robot capisce che l’utente vuole passare ad un task differente, chiede all’utente di terminare prima il task attuale:
Abbiamo una riunione attiva in corso. Dì “cancella” se vuoi eliminare la riunione corrente.
Tipicamente prendereste questa strada se il task attuale richiedesse molto investimento per la creazione e l’annullamento farebbe perdere tutto quello che è stato fatto finora.
Seguite il flusso#section9
Di nuovo, l’utente chiede un cambio di task. Il task corrente non è troppo importante quindi il robot si sposta rapidamente nella nuova missione. Quando succede così, è importante dire all’utente cosa sta succedendo: se state eliminando il task attuale e vi state spostando su uno nuovo.
In questo caso, il robot si aspetta che l’utente confermi la presenza ad una riunione imminente, ma l’utente sta invece iniziando un nuovo e scorrelato meeting:
Chris ti ha invitato alla riunione per il lancio di progetto venerdì alle 10am. Vuoi che Accetti o Declini?
Pianifica un nuovo meeting per domani con @jesse
Okay, salto la conferma per ora.
Sto confrontando i vostri calendari per un meeting domani (…)
Tornare indietro#section10
Allora, abbiamo annullato il task A a favore del nuovo task B. Adesso che B è finito, dobbiamo tornare di nuovo al task A?
In Meekan, abbiamo scoperto che tornare al task precedente sarebbe il modo corretto e smart di agire, ma spesso causa confusione (per esempio, l’utente non si è reso conto che si è tornati al task A e ha cercato di iniziarne uno da zero). Se decidete di tornare indietro, la chiave è di comunicarlo in maniera appropriata. In questo modo, l’utente sa cosa è appena successo e le aspettative da entrambe le parti della conversazione sono allineate.
Tornando al nostro esempio della t-shirt, questo avrebbe perfettamente senso:
Che taglia porti? Abbiamo medium, large, ed extra-large
large
Capito. Taglia large. E che colore ti piacerebbe?
anzi, fai extra large
Ok, extra-large. E che colore ti piacerebbe?
Timing out#section11
Questo accade frequentemente in una chat. State parlando di qualcosa e poi andate a pranzo o dovete partecipare a un meeting. Quando tornate, non vi ricordate più che conversazione stavate facendo. Piuttosto frequentemente, il canale è pieno di altre persone che parlano di altre cose e quello che stavate dicendo è finito nel dimenticatoio.
Il robot dovrebbe esserne cosciente. Se l’utente inizia qualcosa, sparisce per un intero giorno, ritorna e comincia qualcosa di nuovo, il robot può tranquillamente presumere che il task di ieri dovrebbe essere terminato.
Aspettare input critico#section12
A volte avete bisogno di un’informazione senza cui non potete proprio procedere. Magari è l’indirizzo email dell’utente che viene richiesto per le operazioni di base del robot. Magari avete bisogno di cancellare prima qualcosa e non potete procedere senza la conferma dell’utente.
In un ambiente GUI, potete far apparire una finestra modale. Bloccherà l’accesso a tutto finché l’utente non risponde a questa domanda: “Sei sicuro di voler cancellare tutto?” La finestra rimarrà lì finché l’utente non cliccherà “Sì” o “Cancella”.
Replicare questo comportamento in una conversazione richiede che il robot rifiuti di fare qualsiasi cosa finché non ottiene quell’informazione vitale da parte dell’utente. Questo fa partire un loop che può diventare molto noioso molto in fretta. Assicuratevi di spiegare esattamente di cosa avete bisogno e perché ne avete bisogno. Preparate qualche versione di questa spiegazione, così se l’utente dovesse cercare di evitarlo più e più volte, il robot non diventi ripetitivo (con l’effetto di peggiorare ancora di più la situazione).
Per fare il mio lavoro, devo accedere al tuo calendario. Segui questo link per collegare il tuo calendario.
Programma una nuova riunione domani
Devi davvero collegare il tuo calendario qui per godere dei miei superpoteri di scheduling.
Ho impegni domani?
Non vedo l’ora di cominciare a lavorare sui tuoi programmi! Per favore, collega il tuo calendario così posso fare le mie magie.
Non si tratta di una situazione ideale: pensate attentamente se davvero non potete proseguire finché non avete quella particolare informazione. Se in qualche modo è possibile, fate una stima ragionata e procedete o almeno permettete delle funzionalità limitate e chiedete di nuovo quell’informazione quando ne avete assoluto bisogno.
Scegliere da una lista#section13#section13
A seconda del lavoro del vostro robot, potreste alla fine raggiungere un punto in cui l’utente deve scegliere da una lista. Ricordate: nessun menu drop-down, nessuna combo box, nessun radio button. Se avete una lista di item e avete bisogno che l’utente ne selezioni uno o più, dovete dare ad ogni item un nome o un numero unico così che gli utenti possano dire quale opzione preferiscono.
Meekan, cancella quel meeting che ho domani
Hai 3 meeting domani, quale vuoi che cancelli?
(1) Lancio progetto alle 10 am
(2) Team stand-up alle 11 am
(3) 1-on-1 con Jake alle 2:30 pmCancella 3
Ok, sto cancellando “1-on-1 con Jake” domani. Invio una notifica a Jake a questo riguardo.
Assegnare un numero ai meeting sulla lista dà agli utenti un modo semplice per far riferimento ad un item su cui vogliono concentrarsi.
Cosa c’è dopo?#section14#section14
Non ci sono ancora regole: dobbiamo crearcele noi. Diciamo a tutti cosa funziona e cosa non funziona per noi. Condividiamo, parliamo e scriviamo di questo argomento. È un momento incredibile per essere un pioniere.
Spero che i miei esempi vi abbiano fatto venire delle idee. Considerate questo articolo come una piattaforma di lancio per le vostre avventure nella terra dei robot. Adesso andate a creare un robot! (e parlatene con tutti!)
Nessun commento
Altro da ALA
Webwaste
Uno strumento essenziale per catturare i vostri progressi lavorativi
Andiamo al cuore dell’accessibilità digitale
JavaScript Responsabile, Parte II
JavaScript Responsabile: parte prima