Blogi

Chatin pitäminen hengissä, kun puhelin nukkuu

Mythexin agentti voi työskennellä minuutteja yhden pyynnön parissa, ja saatat seurata sitä puhelimelta — joka lukittuu, vaihtaa sovellusta ja vaihtaa verkkoa sen työskennellessä. Kaksi virhettä teki tästä ongelman. Ensimmäisessä chat kohteli jokaista „sivu on taas näkyvissä” -signaalia todisteena siitä, että yhteys oli katkennut, ja silmukoi, kunnes se jäi odottamaan „Yhdistetään…”. Toisessa puhelin, joka nukkui uuden chatin ensimmäisen vastauksen läpi, palasi vain muutamaan ensimmäiseen palaan siitä, kunnes sivu ladattiin uudelleen käsin. Molemmat on korjattu.

Miten chat seuraa käynnissä olevaa vuoroa

Kun agentti työskentelee, chat pitää auki virran palvelimiltamme: jokainen vaihe — ajatus, työkalukutsu, vastauksen pala — saapuu tapahtumana. Jos virta katkeaa, chat yhdistää uudelleen, ja palvelin toistaa viimeaikaiset tapahtumat puskurista, joka säilyttää viimeiset 120 sekuntia. Kun vuoro päättyy, chat pyytää myös palvelimelta tallennetun historian ja sovittaa näytetyn sisällön tallennettuun. Tämä viimeinen vaihe tavoittaa kaiken, minkä virta jätti väliin.

Jotta elävän ja kuolleen yhteyden erottaa, kun mitään ei tapahdu, palvelin lähettää pienen „ping”-viestin 15 sekunnin välein.

Virhe 1: herääminen tappoi terveen virran

Selaimet kertovat sivulle, kun se tulee taas näkyviin: välilehden vaihdon jälkeen, näytön lukituksen avauduttua. Käytimme sitä vihjeenä tarkistaa yhteys — käytännössä keskeyttää virta ja yhdistää uudelleen olettaen, että se oli kuollut piilossa ollessaan.

Puhelimilla ja upotetuissa selaimissa nämä tapahtumat tapahtuvat paljon useammin kuin virrat katkeavat — joka välilehden vaihdon, joka avauksen, ja joissain upotetuissa selaimissa muutaman sekunnin välein. Jokainen niistä keskeytti täysin terveen virran. Chat yhdisti uudelleen, toisti tapahtumat, keskeytettiin uudelleen ja jäi lopulta odottamaan „Yhdistetään…”. Sitten se ilmoitti, että vuoro oli päättynyt, vaikka agentti oli yhä töissä.

Korjaus: arvioi virta sen perusteella, puhuuko se

Chat kirjaa nyt, milloin kunkin projektin virta viimeksi vastaanotti jotain — sekä tapahtumia että 15 sekunnin pingit. „Taas näkyvissä” -signaali keskeyttää virran vain, jos se on ollut hiljaa 25 sekuntia: pidempään kuin pinkin väli plus hidas verkkohyppy, joten elävä virta ei koskaan kvalifioidu. Testit varmistavat, että ping lasketaan elonmerkiksi ja että juuri pingannutta virtaa ei käsitellä kuolleena.

Sääntö, jonka otimme tästä: sivun näkyvyys kertoo jotain sivusta, ei verkkoyhteydestä. Kysy yhteydeltä itseltään.

Virhe 2: puolikas vastaus puhelimen heräämisen jälkeen

Tämän pystyimme toistamaan joka kerta iOS-simulaattorissa:

  1. Aloita uusi chat ja lähetä pyyntö, joka vie aikaa.
  2. Anna puhelimen nukkua rakennuksen läpi.
  3. Palaa, kun vuoro on päättynyt ja kahden minuutin toistopuskuri on vanhentunut.

Chat näytti vastauksen ensimmäiset palat merkittyinä valmiiksi — ja pysyi niin, kunnes sivu ladattiin uudelleen.

Miksi

Uudella chatilla ei ole ketjua — tallennettua keskusteluhistoriaa — ennen kuin ensimmäinen viesti luo sen. Se tapahtuu lähetysfunktion sisällä, sen jälkeen, kun lähetys oli jo tallentanut sovittamisvaiheen, joka yhä oletti, ettei ketjua ole. Joten ensimmäisen vuoron lopussa uuden chatin sovittaminen näki ei ketjua ja palasi hiljaa pyytämättä mitään.

Yleensä kukaan ei huomannut sitä, koska virta oli jo toimittanut koko vuoron. Mutta puhelin, joka nukkui vuoron läpi ja palasi sen jälkeen, kun 120 sekunnin toistopuskuri oli vanhentunut, ei saanut puuttuvia tapahtumia virrasta — eikä sovittamista, jonka piti täyttää aukko, ollut koskaan ajettu.

Korjaus

  • Lähetys kertoo sovittamiselle, mihin ketjuun vuoro kuuluu, joten uuden chatin ensimmäinen vuoro sovitetaan kuten mikä tahansa muu. Jos olet avannut toisen chatin, kun vastaus saapuu, tulos hylätään sen sijaan, että se näytettäisiin väärässä paikassa.
  • Epäonnistunut sovittaminen yritetään uudelleen. Puhelin, joka herää huonolla yhteydellä, voi huomata vuoron päättyneen mutta epäonnistua sen hakemisessa. Se muistetaan nyt, ja chat pyytää uudelleen, kun välilehti näytetään taas tai verkko palaa.
  • „Työskenteli” on rehellinen. Jokainen vastaus näyttää, kuinka kauan agentti työskenteli. Jos välilehti ei koskaan nähnyt palvelimen vuoron lopun viestiä, se täytti luvun omalla kellollaan — joka laski lähetyksestä siihen asti, kun puhelin heräsi, poissaoloaika mukaan lukien. Luku on nyt merkitty arvioksi ja korvataan tallennetulla kestolla, kun historia saapuu.

Mitä opimme

  • Testaa laitteella, jota ihmiset oikeasti käyttävät, tavalla jolla he sitä käyttävät. Molemmat virheet elivät kuilussa „toimiva virta” ja „taskussa oleva puhelin” välillä.
  • Varasuunnitelma, joka ei koskaan aja, ei ole varasuunnitelma. Sovittamisen vaihe oli olemassa juuri tätä tilannetta varten, ja se ohitettiin hiljaa.
  • Yritä palautusta uudelleen. Hetki, jolloin puhelin herää, on usein se, jolloin sen yhteys on huonoimmillaan.
  • Älä näytä arvausta faktana. Kesto väärästä kellosta on pahempi kuin ei mitään; merkitse se tai korvaa se.

Jos rakennat omaa sovellustasi puhelimille, oppaamme mobiiliystävällisen verkkosovelluksen rakentamisesta ja natiivien sovellusten ja progressiivisten web-sovellusten eroista kattavat perusteet. Lisää chatista itsestään on chatin dokumentaatiossa.

Mythex · Pricing · Rakenna mitä tahansa tekoälyllä · Verkkosivu- ja sovellusmallipohjat · Mythex vertailussa · Tekoälysovellusten rakentamisen sanasto · Ilmaiset työkalut tekoälysovellusten rakentamiseen · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 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 简体中文 繁體中文(香港) 繁體中文(台灣)