Blog

Tenere viva la chat quando il telefono si mette in pausa

L'agente di Mythex può lavorare per minuti su una singola richiesta, e potresti guardare dal telefono — che si blocca, cambia app e cambia rete mentre lavora. Due bug facevano andare storto questo scenario. In uno, la chat trattava ogni segnale "la pagina è di nuovo visibile" come una prova che la connessione fosse morta, e ripeteva il ciclo fino a restare ferma su "Connecting…". Nell'altro, un telefono che aveva dormito durante la prima risposta di una nuova chat tornava con solo i primi pezzi, finché non si aggiornava la pagina a mano. Entrambi sono risolti.

Come la chat segue un turno in corso

Mentre l'agente lavora, la chat tiene aperto uno stream dai nostri server: ogni passo — un pensiero, una chiamata di strumento, un pezzo della risposta — arriva come evento. Se lo stream cade, la chat si riconnette e il server riproduce gli eventi recenti da un buffer che conserva gli ultimi 120 secondi. Quando il turno finisce, la chat chiede anche al server la cronologia salvata e riconcilia ciò che aveva mostrato con ciò che è stato memorizzato. Quest'ultimo passo recupera ciò che lo stream ha perso.

Per distinguere una connessione viva da una morta quando non succede nulla, il server invia un piccolo "ping" ogni 15 secondi.

Bug 1: il risveglio uccideva uno stream sano

I browser avvisano la pagina quando torna visibile: dopo un cambio scheda, dopo lo sblocco dello schermo. Noi usavamo questo segnale per controllare la connessione — e in pratica per interrompere lo stream e riconnetterci, dando per scontato che fosse morto mentre era nascosto.

Su telefoni e browser incorporati, questi eventi scattano molto più spesso di quanto muoiano gli stream — a ogni cambio di scheda, a ogni sblocco, e in alcuni browser incorporati ogni paio di secondi circa. Ognuno interrompeva uno stream perfettamente sano. La chat si riconnetteva, riproduceva, veniva interrotta di nuovo, e finiva ferma su "Connecting…". Poi diceva che il turno era terminato mentre l'agente stava ancora lavorando.

La soluzione: giudicare lo stream da come sta parlando

La chat ora registra quando lo stream di ogni progetto ha ricevuto l'ultima cosa in assoluto — eventi e ping da 15 secondi compresi. Un segnale "di nuovo visibile" interrompe uno stream solo se è rimasto silenzioso per 25 secondi: più dell'intervallo dei ping più un tratto di rete lento, quindi uno stream vivo non rientra mai in questa condizione. I test verificano che un ping conti come segno di vita, e che uno stream che ha appena inviato un ping non sia considerato morto.

La regola che ne abbiamo ricavato: la visibilità di una pagina dice qualcosa sulla pagina, non sulla connessione di rete. Chiedi alla connessione.

Bug 2: metà risposta dopo che il telefono si è risvegliato

Questo lo abbiamo potuto riprodurre ogni volta nel simulatore iOS:

  1. Avvia una nuova chat e invia una richiesta che richiede tempo.
  2. Lascia che il telefono vada in standby durante la build.
  3. Torna quando il turno è finito e il buffer di replay di due minuti è scaduto.

La chat mostrava i primi blocchi della risposta, segnati come completati — e restava così finché non aggiornavi la pagina.

Perché

Una nuova chat non ha ancora un thread — la conversazione salvata — finché il primo messaggio non ne crea uno. Questo succede dentro la funzione di invio, dopo che l'invio aveva già catturato il passo di riconciliazione, che pensava ancora che non ci fosse alcun thread. Quindi alla fine del primo turno in una nuova chat, la riconciliazione non vedeva alcun thread e tornava senza chiedere nulla.

Di solito nessuno se ne accorgeva, perché lo stream aveva comunque consegnato l'intero turno. Ma un telefono che aveva dormito durante il turno e tornava dopo che il buffer di replay di 120 secondi era scaduto non poteva recuperare gli eventi mancanti dallo stream — e la riconciliazione che avrebbe dovuto colmare il vuoto non era mai stata eseguita.

La soluzione

  • L'invio dice alla riconciliazione a quale thread appartiene il turno, così il primo turno di una nuova chat viene riconciliato come ogni altro. Se nel frattempo hai aperto un'altra chat quando arriva la risposta, il risultato viene scartato invece di essere mostrato nel posto sbagliato.
  • Una riconciliazione fallita viene ritentata. Un telefono che si risveglia con una connessione scarsa può trovare il turno concluso e poi non riuscire a recuperarlo. Ora questo viene ricordato, e la chat riprova quando la scheda torna visibile o la rete ritorna.
  • "Worked for" è onesto. Ogni risposta mostra per quanto tempo l'agente ha lavorato. Se la scheda non ha mai visto il messaggio di fine turno del server, prima riempiva quel dato con il proprio orologio — che andava dall'invio fino al risveglio del telefono, tempo di assenza compreso. Ora quel valore è segnato come stima, e viene sostituito dalla durata salvata non appena arriva la cronologia.

Cosa ne abbiamo ricavato

  • Testa sul dispositivo che le persone usano davvero, nel modo in cui lo usano. Entrambi i bug vivevano nello spazio tra "uno stream che funziona" e "un telefono in tasca".
  • Un ripiego che non viene mai eseguito non è un ripiego. Il passo di riconciliazione esisteva proprio per questo caso, e lo saltava in silenzio.
  • Riprova anche il recupero. Il momento in cui un telefono si risveglia è spesso quello in cui la connessione è al suo peggio.
  • Non mostrare una stima come un fatto. Una durata presa dall'orologio sbagliato è peggio di nessuna durata; segnala che è una stima, o sostituiscila.

Lo stesso lavoro ha anche sistemato alcune cose che vedrai mentre un turno è in corso: i passi della shell sono etichettati con il comando che fa il lavoro invece che con cd, gli screenshot nella chat mantengono l'angolo in alto a sinistra della pagina e si adattano alla colonna, e un nuovo progetto riceve il nome generato senza bisogno di aggiornare la pagina.

Se stai costruendo la tua app per i telefoni, le nostre guide su come costruire un'app web compatibile con il mobile e app native contro progressive web app coprono le basi. Altre informazioni sulla chat stessa sono nella documentazione della chat.

Mythex · Pricing · Crea qualsiasi cosa con l'AI · Template per siti web e app · Mythex a confronto · Glossario per creare app con l'AI · Strumenti gratuiti per creare app con l'AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)