Van stoppen tot een geschreven samenvatting: de fasen, de notities en wat er mis kan gaan.
Op stop drukken beëindigt de opname en zet al het andere in gang. Het geluid gaat naar de servers van Chui, wordt getranscribeerd en wordt samengevat. Op een telefoon staat de opname al veilig op het apparaat voordat dat allemaal gebeurt: is er geen verbinding, dan wacht ze en wordt ze geüpload zodra die er is. Door een slecht netwerk gaat niets verloren en je hoeft nergens op te drukken.
Op een Mac of Windows gaat een opname niet verloren als Chui werd afgesloten terwijl die nog aan het stoppen was: de volgende keer dat Chui opent, vindt het die opname en uploadt het haar naar de vergadering die je was begonnen, met de notities erbij (sinds build 236).
Een vergadering doorloopt ze en de app laat zien waar die is:
Een melding laat weten wanneer de tekst en de samenvatting van een vergadering klaar zijn. Er staat geen titel en geen inhoud in.
Chui is geen transcriptieproduct. Het idee is dat je tijdens de vergadering twee regels noteert — een naam, een getal, wat je hebt beloofd — en Chui die laat samenvoegen met wat er werkelijk is gezegd. De samenvatting wordt uit beide geschreven; de getypte regels sturen haar, in plaats van er letterlijk in te verschijnen. Notities kun je ook na de vergadering schrijven of verbeteren.
list_meetings() geeft het overzicht: id, titel, datum, duur, status en verder niets. get_meeting() geeft van één vergadering de samenvatting, de notities, de duur en hoeveel sprekers er zijn herkend — meestal de juiste plek om te stoppen. De transcriptie is een aparte, veel duurdere leesactie: zie Terugvinden wat er is gezegd.
De vergadering waarin je nu zit, staat ook in dat overzicht, gemarkeerd als in_progress, zodat een assistent die de vraag „waar zit ik nu middenin?” krijgt, die kan beantwoorden. Er is geen transcriptie en geen samenvatting tot de opname binnen is — Chui transcribeert een vergadering nadat die is afgelopen — en ook geen definitieve lengte, dus wat er in plaats daarvan terugkomt, is hoe lang ze al bezig is, wanneer Chui voor het laatst geluid van het apparaat ontving, en de notities die erin worden getypt, terwijl ze worden getypt. Een assistent kan die notities lezen, ze aanvullen en zeggen dat de vergadering nog niet is afgelopen; hij moet haar niet melden als een lege of mislukte vergadering, want zo zien die ontbrekende stukken er van buitenaf uit.
Het betekent „niet afgelopen”, niet „nu bezig”, en dat verschil is goed om te kennen. Chui weet dat een opname is afgelopen wanneer het apparaat dat meldt, en drie heel verschillende dingen zien er vanaf de server precies hetzelfde uit: een gesprek dat op dit moment wordt gevoerd; een gesprek dat een minuut geleden is gestopt en waarvan het geluid nog wordt geüpload; en een telefoon die midden in de vergadering is uitgevallen en nooit meer iets zal melden. Daarom krijgt een assistent de opdracht niet te beweren dat de microfoon aanstaat.
Wat hij in plaats daarvan krijgt, is één beperkt feit. Terwijl een vergadering wordt opgenomen, stuurt de telefoon elke negentig seconden een stuk geluid op, dus Chui weet hoe lang geleden het nieuwste stuk van die opname binnenkwam — en verder niets. Een lange tussenpoos betekent dat er geen nieuw geluid voor is binnengekomen: de opname kan gepauzeerd zijn, de telefoon kan offline zijn, of de vergadering kan zijn afgelopen zonder dat Chui het te horen kreeg. Een korte tussenpoos bewijst ook niet dat ze live is, want een telefoon die via een nieuwe verbinding een oudere opname inhaalt, ziet er net zo recent uit. Chui geeft het getal door in plaats van een oorzaak te noemen, en waar het helemaal niets kon controleren, zegt het niets in plaats van te gokken.
Chui geeft een vergadering zelf een titel, meestal uit de agenda-uitnodiging of uit wat er is gezegd, dus de naam is vaak een gok. Je kunt hem verbeteren in de app of door het tegen een assistent te zeggen — rename_meeting(). Ook de notities die tijdens de vergadering zijn getypt, kan een assistent verbeteren, en daar vraagt hij eerst naar, want de nieuwe tekst vervangt ze allemaal tegelijk en de oude worden nergens bewaard. prepare_update_meeting() leest de notities terug zoals ze zijn en zoals ze zouden worden, en op dat moment is er nog niets gebeurd; pas nadat je ja zegt, schrijft update_meeting() ze weg, en het schrijft precies de tekst die je te zien kreeg. Een assistent moet de hele tekst sturen met de wijziging erin, anders is de rest weg. Als de notities intussen zijn veranderd — bijvoorbeeld op een ander apparaat — wordt er niets geschreven en moet hij het opnieuw vragen.
De samenvatting kun je op dezelfde manier verbeteren — een verkeerde naam, een verkeerd getal, een besluit dat precies andersom is opgeschreven. prepare_update_summary() leest de samenvatting terug zoals die is en zoals die zou worden, op dat moment is er nog niets gebeurd, en pas nadat je ja zegt, schrijft update_summary() precies de tekst weg die je te zien kreeg en vervangt daarmee alles. De transcriptie kan niet worden bewerkt — niet door een assistent en niet in de app; het is wat er is gezegd.
Een samenvatting die met de hand is verbeterd, is daarna een gewone samenvatting en niets beschermt haar: een spreker een naam geven, de notities wijzigen, een persoon in de vergadering samenvoegen of splitsen, een van hen een andere naam geven of om een nieuwe samenvatting vragen, zorgt ervoor dat Chui de samenvatting opnieuw schrijft op basis van de transcriptie en de notities, en de verbetering wordt vervangen. Gaat de fout dus over wie er sprak of wat er in een notitie stond, verbeter dan dat — de samenvatting volgt vanzelf een minuut of twee later.
Een wekelijkse stand-up is één vergadering die steeds terugkomt, en Chui weet welke opnames daar edities van zijn — uit de agendareeks waartoe ze behoren, die bij de opname wordt opgeslagen in plaats van achteraf opgezocht. get_series() geeft de eerdere edities van één vergadering, nieuwste eerst, zodat „wat hebben we vorige week afgesproken?” en „wat stond er nog open van de keer daarvoor?” één aanroep zijn en daarna een get_meeting(), in plaats van een zoektocht door titels die misschien niet op elkaar lijken. Een vergadering die zonder agenda-item is opgenomen, hoort bij geen enkele reeks, en het antwoord zegt dat in plaats van leeg terug te komen.
Een vergadering kan terugkomen met de markering afgebroken (cut short) of gedeeltelijk (partial). Daarmee zegt Chui dat de opname niet het hele gesprek beslaat — de app werd onderbroken, of de opname is na een crash opnieuw opgebouwd en het einde ervan is nooit op het apparaat opgeslagen. Vat samen wat er is, als fragment; beschrijf het niet als de hele vergadering. Een vergadering heeft zo'n markering niet als er niets misging, en een geïmporteerd bestand heeft er nooit een, want er is geen vergaderklok om het mee te vergelijken.
get_coverage() stelt die vraag rechtstreeks en beantwoordt hem in één zin: of de opname de vergadering beslaat, hoe lang het bestand is, hoe lang de vergadering duurde en welk deel ervan in de opname terechtkwam. Niets in een transcriptie laat dit zien — twintig minuten van een vergadering van negentig minuten leest precies als een volledige vergadering van twintig minuten — dus het loont om het te vragen voordat je iemand vertelt wat er is afgesproken. Het onderscheidt ook „niemand heeft dit gemeten” van „dit is in orde”, en dat is niet hetzelfde antwoord.
De samenvatting is die notities verweven met wat er is gezegd, dus als een van beide verandert, schrijft Chui haar een minuut of twee later vanzelf opnieuw — een spreker een naam geven of een notitie verbeteren is meestal genoeg. In de app toont „De samenvatting opnieuw schrijven” (Write the summary again) een rustige regel terwijl Chui haar herschrijft (sinds build 248). Een assistent kan er ook rechtstreeks om vragen, en dat is het enige wat hij hier kan doen dat bij elke aanroep echt geld kost: een ronde van een taalmodel over de hele vergadering, en voor een vergadering die nooit is getranscribeerd ook nog een transcriptieronde over het geluid. Bovendien gooit het de bestaande samenvatting weg. Daarom wordt er eerst naar gevraagd: prepare_resummarise_meeting() leest de samenvatting terug die zou verdwijnen en zegt welke van de twee rondes een ja zou kopen, en er wordt niets uitgegeven; pas nadat je ja zegt, start resummarise_meeting() de ronde. Als Chui de samenvatting intussen al vanzelf opnieuw heeft geschreven, zegt Chui dat en brengt het niets in rekening. Een vergadering waarin Chui geen woorden hoorde, kan niet opnieuw worden samengevat, en Chui zegt dat in plaats van te betalen om twee keer naar de stilte te luisteren.
Heeft Chui het soort opname verkeerd ingeschat, verander het dan. Onderaan een samenvatting noemt een knop voor wat voor soort opname Chui haar hield, zoals een memo, een interview of een vergadering (sinds build 248). Kies een ander soort en de samenvatting wordt opnieuw geschreven in die vorm, met de oude gedimd tot de nieuwe binnen is; met dezelfde knop kun je de keuze ook teruggeven aan Chui. Via tekst schrijft shape meegeven aan prepare_resummarise_meeting() de samenvatting opnieuw in de vorm die je noemt, en bewaart die voor die vergadering; auto geeft de keuze terug aan Chui.
Een korte notitie, voor één stem (sinds build 235). Een opname met maar één stem erin, zoals een gedachte die je tegen jezelf uitspreekt, kan in plaats daarvan terugkomen als een korte notitie: de gedachte zelf, netjes gemaakt, zonder kopjes of namen van sprekers, en gemarkeerd met een gloeilampje in je vergaderingen. Sinds build 236 geldt dat ook voor een lange opname van uren, die eerder als twee stemmen kon worden gelezen en als vergadering werd behandeld.
Een eigen vorm, één keer geleerd. Heeft een vergadering van je eigen kopjes — de weekreview is altijd cijfers, risico's, verzoeken — zeg het één keer tegen een assistent en Chui schrijft hem voortaan zo. Een terugkerende vergadering leer je hem met set_series_shape() (vanuit elke vergadering ervan; get_series() leest hem terug), een label met summary_shape in update_label() (list_labels() toont hem). Chui begint nog steeds met een kort «in het kort» en eindigt met volgende stappen en open vragen. De vorm van een terugkerende vergadering gaat voor die van een label; twee labels met verschillende vormen laten de keuze aan Chui. Een lege vorm geeft de keuze terug aan Chui. Het hoort bij het betaalde abonnement en wordt in woorden gevraagd — er is geen knop voor in de app.
Een transcriptie komt terug als speaker_0, speaker_1 … — de spraakherkenning kan de stemmen uit elkaar houden, maar ze geen naam geven. Als je er een een naam geeft in de app, of via een assistent met name_speaker(), komt die naam overal waar de vergadering wordt gelezen in de plaats van het label, wordt de persoon aan de lijst toegevoegd zodat Chui hem bij de volgende vergadering kan voorstellen, en wordt de samenvatting rond die naam herschreven.
Geef je in de app een stem een naam, dan begint de lijst met „Ik”, met de naam van je account ernaast: met één tik komt je naam bij die stem, precies zoals je account hem spelt (sinds build 249).
Een stem van de ene vergadering op de volgende herkennen gebeurt alleen bij mensen die voor zichzelf „Herkenning van je eigen stem” (Own-voice recognition) hebben aangezet (Instellingen, op verzoek gewijzigd). Hun stem komt al met naam binnen in hun eigen vergaderingen en in vergaderingen van hun bedrijf waarvoor ze waren uitgenodigd; elke andere stem begint als speaker_0, speaker_1 … en krijgt met de hand een naam. Een naam die Chui aan een stem gaf, verander je met één tik, net als elke andere.
Een naam die Chui uit het gesprek heeft afgeleid en die nog niemand heeft bevestigd, verschijnt als een gewone naam die alleen een gok is. Als je erop tikt, krijg je „Ja, dit is …” (Yes, this is …), waarmee hij vast wordt, en „Dit is niet …” (Not …), waarmee hij wordt verwijderd. Via een assistent noemt get_meeting() zulke namen onder tentative_speaker_names; de stem dezelfde naam geven bevestigt hem, en prepare_reject_speaker_name() en daarna reject_speaker_name() verwijdert hem.
Elke fout zegt welke het is en wat je kunt doen: het bestand werd afgebroken voordat het was opgeslagen; het geluid is nooit aangekomen; het formaat kan niet worden gelezen; de transcriptie kwam tijd tekort (de opname is veilig — probeer het later opnieuw); de samenvatting is niet geschreven, maar de transcriptie is er wel. De meeste bieden aan het opnieuw te proberen.
Kan een samenvatting niet worden geschreven door een fout aan de kant van Chui, dan probeert Chui het ongeveer een dag lang elk uur vanzelf opnieuw (sinds build 230), zodat een probleem 's nachts de vergadering niet laat wachten op „De samenvatting opnieuw schrijven” (Write the summary again).
Een vergadering verwijderen vernietigt de opname, de transcriptie, de samenvatting en de notities, overal waar ze bestaan, voorgoed — en daarmee alles wat Chui uit dat gesprek had geleerd over de mensen die erin zaten. Elke openbare link ernaar werkt niet meer. Chui onthoudt dat de vergadering is verwijderd, zodat een telefoon die het geluid nog heeft, het weggooit in plaats van het later opnieuw te uploaden. Niets haalt er nog iets van terug.
In de app is het Vergadering verwijderen (Delete meeting) onderaan de vergadering, of een veegbeweging over de rij, en in beide gevallen vraagt Chui het eerst in een paneel dat de naam van de vergadering noemt.
Een assistent kan het ook, en daar wordt op dezelfde manier naar gevraagd — in twee stappen, want dit is een van de dingen die niet ongedaan kunnen worden gemaakt. prepare_delete_meeting() leest terug om welke vergadering het gaat: hoe ze heet, wanneer ze was, hoe lang ze duurde, of je er notities in hebt getypt en of iemand buiten Chui haar via een link leest. Op dat moment is er nog niets gebeurd. Pas nadat je ja zegt, vernietigt delete_meeting() haar, en het accepteert niets anders dan het antwoord op die vraag — er is geen manier om het te richten op een vergadering die je niet zojuist te zien kreeg. Een collega die een vergadering kan openen die iemand met het team heeft gedeeld, kan haar niet verwijderen; dat kan alleen degene die haar heeft opgenomen.
Je stopte de opname in de pauze en begon daarna opnieuw, of de opname viel uit en Chui sloeg de rest van de vergadering apart op. Hoe dan ook staat één gesprek in je lijst als twee rijen, met twee samenvattingen en twee sets sprekers.
Vraag een assistent ze samen te voegen. prepare_merge_meetings() leest ze allebei terug — welke blijft bestaan, hoe lang elk is, hoe lang de pauze ertussen was en hoe lang de samengevoegde opname zou worden — en op dat moment is er nog niets gebeurd. Pas nadat je ja zegt, voert merge_meetings() het uit, en het accepteert niets anders dan het antwoord op die vraag.
Wat het doet: de twee opnames worden achter elkaar gezet, in de volgorde waarin ze zijn gemaakt, in de eerdere vergadering, die haar id en datum houdt. De latere vergadering wordt daarna verwijderd. Chui leest de samengevoegde opname opnieuw vanaf het begin, zodat de vergadering eindigt met één transcriptie, één samenvatting en één set sprekers voor het hele gesprek — dat duurt een paar minuten. Notities die in een van beide vergaderingen zijn getypt, blijven bewaard, op volgorde, waarbij die van de tweede helft op de tijdlijn zijn opgeschoven.
Er gaat daarbij nooit geluid verloren. Elke seconde van beide opnames zit in de vergadering die blijft, nagemeten, voordat de andere rij wordt aangeraakt. Wat niet terugkomt, zijn de woorden: beide samenvattingen en beide transcripties worden vervangen, inclusief verbeteringen die met de hand in een van beide zijn aangebracht, en niets zet de twee rijen terug. Ongedaan maken kan niet.
Nog twee dingen die goed zijn om te weten voordat je erom vraagt. Als de twee helften door verschillende mensen worden gezien — de ene gedeeld met je bedrijf, de andere voor jezelf gehouden — dan wordt de samengevoegde vergadering gezien door wie de meest besloten van de twee kon zien, zodat niets wat je voor jezelf hield door het samenvoegen bij iemand anders terechtkomt. En als een van beide helften aan een agenda-item was gekoppeld, houdt de samengevoegde vergadering die koppeling, zodat ze in haar eigen reeks blijft.
Drie dingen weigert Chui, en dat zegt het voordat je beslist, niet erna.
Het voegt geen twee opnames samen die het niet eerlijk aan elkaar kan zetten — twee helften die met verschillende instellingen zijn opgenomen, of één gemaakt op een telefoon en één op een Mac — in plaats van een bestand te maken dat als de verkeerde vergadering wordt afgespeeld. Het voegt geen twee rijen samen die op hetzelfde moment begonnen en even lang duurden: dat is één gesprek dat Chui twee keer heeft bereikt, niet twee helften van één, en samenvoegen zou een vergadering opleveren die alles twee keer zegt. Verwijder in dat geval een van de twee.
En het kan nog niets samenvoegen wat in een browsertabblad is opgenomen. Een opname die in de browser is gemaakt, schrijft haar index gaandeweg weg in plaats van op één plek aan het eind, en Chui heeft geen manier om twee daarvan aan elkaar te zetten. De opnames zelf zijn in orde en spelen normaal af; alleen samenvoegen kan Chui niet. Twee helften van een vergadering die je wilt samenvoegen, moeten zijn opgenomen op een telefoon, een Mac of een Windows-pc.
En bij een gratis account weigert Chui als de vergadering die zou blijven nog niet is gelezen — eentje waarbij iets misging, bijvoorbeeld — en de tien vergaderingen van de maand al zijn verbruikt: het lezen van de samengevoegde opname zou de eerste lezing zijn, die zou voor deze maand meetellen, en beide helften zouden tegelijk vastzitten. Een betaald account heeft zo'n limiet niet; anders kunnen ze volgende maand worden samengevoegd. Wat een account kost legt uit welke beperkingen een gratis account heeft.
Nergens in Chui is hier een knop voor. Het is een reparatie die je opmerkt terwijl je de twee vergaderingen leest, en daar hoort het vragen erom ook thuis.
Andersom: je liet de telefoon op tafel liggen, of de laptop openstaan, en drie gesprekken kwamen in één opname terecht. Chui sloeg één vergadering op met één samenvatting, die over alle drie gaat en dus over geen enkele.
In builds 238 en 239 splitste een opname op een telefoon zichzelf al tijdens het opnemen bij elke lange stilte in aparte vergaderingen; sinds build 240 maakt «Nieuwe opname» op een telefoon weer één opname die doorloopt tot «Stoppen» (Een vergadering opnemen).
Chui merkt het meestal zelf. Nadat een opname van een halfuur of langer is gelezen, gaat Chui na of het eigenlijk meerdere vergaderingen zijn — vooral aan de hand van wie er praat: waar sommige mensen voorgoed stoppen en anderen beginnen, daar eindigt een vergadering. Elk zo'n punt toetst Chui aan waar het gesprek over gaat, aan je agenda en aan een eventuele pauze, en pas als die overeenkomen, toont het vergaderscherm een kaart: „Lijkt op 3 aparte vergaderingen” (Looks like 3 separate meetings), met elk stuk, de tijd ervan, een titel en de mensen erin. Haal het vinkje bij een stuk weg om het samen te houden met het stuk ernaast; „Splitsen in N” (Split into N) knipt het, en „Het is één vergadering” (It’s one meeting) laat de kaart voorgoed verdwijnen.
Of vraag waar de breuk zit. find_split_points() antwoordt met het eigen voorstel van Chui — dezelfde stukken die de kaart laat zien, met de namen — en noemt ook de lange stiltes: hoe ver in de opname elke stilte zit, hoe lang ze duurde, wat er als laatste vóór werd gezegd en wat als eerste erna. Het verandert niets wat je kunt zien. Als je zegt dat het één vergadering is, is keep_as_one_meeting() de getypte versie van „Het is één vergadering”.
Vraag dan om de knip. prepare_split_meeting() noemt elk stuk dat zou ontstaan — wanneer het begint, hoe lang het is en wat er als eerste in wordt gezegd — en op dat moment is er nog niets gebeurd. Pas nadat je ja zegt, voert split_meeting() het uit, en het accepteert niets anders dan het antwoord op die vraag.
Wat het doet: het geluid wordt precies gesplitst waar je hebt aangegeven, en elk stuk wordt een eigen vergadering. Het eerste stuk houdt de id, de datum, de titel en de gepubliceerde link van deze vergadering; de rest zijn nieuwe vergaderingen, die beginnen op de tijden waarop ze echt zijn opgenomen. Niets wordt opnieuw opgenomen en niets wordt opnieuw getranscribeerd — Chui weet op welke seconde elk woord werd gezegd, dus de woorden van het eerste uur blijven gewoon bij het eerste uur, en de namen bij de stemmen blijven precies zoals ze zijn. Je notities gaan mee met het stuk waarin ze zijn getypt. Chui schrijft daarna voor elk stuk een nieuwe samenvatting, wat minder dan een minuut duurt.
Het telt niet mee voor de tien vergaderingen per maand van een gratis account. Er wordt niets opnieuw ter transcriptie verstuurd, dus er valt niets te rekenen: als je vóór de knip negen vergaderingen had verbruikt, zijn het er daarna ook negen.
Wat je verliest, is de samenvatting van de hele opname — en wat die samenvatting heeft toegevoegd aan wat Chui weet over de mensen erin; dat schrijft Chui opnieuw op basis van de nieuwe samenvattingen. Er gaat geen geluid verloren en geen woord. Ongedaan maken kan niet: de stukken weer samenvoegen met merge_meetings() zou werken, maar dat leest de samengevoegde opname helemaal opnieuw en duurt een paar minuten.
Chui weigert de knip, nog voordat het je iets vraagt, in vier gevallen: een stuk dat korter dan tien seconden zou zijn; een opname die in een browsertabblad is gemaakt, waarvan Chui de index nog niet kan knippen; een vergadering die het nog aan het lezen is; en een vergadering waarvoor het geen tijden per woord heeft — dat zegt het dan, en de vergadering opnieuw laten lezen lost dat op.
Een vergadering die Chui heeft samengesteld nadat het opnameapparaat stopte met versturen, kan meteen worden gesplitst of met een andere vergadering worden samengevoegd (sinds build 247). Stuurt dat apparaat later de rest van zijn opname, dan komt het deel dat Chui nog niet had binnen als een aparte vergadering.
De enige knop hiervoor staat op de kaart die Chui laat zien als het vermoedt dat een opname uit meerdere vergaderingen bestaat; een knip ergens anders vraag je in woorden.