Virtual tour notes: from the Zoom call to the guest card

Agreed scope — design v3, 2026-10-30 evening (v2 trimmed on Fede's call: "one thing at a time, start small") · pilot: Western Slope · owner Fede

  • Today a virtual tour runs on PropFlow's Zoom. The call's notes reach Clara only if the agent texts them back.
  • Scope now, three steps: Zoom tells us when a tour's transcript is ready and we store it (step 1, live). Clara reads it and writes the recap on the guest card (step 2, live). Every virtual tour gets its own Zoom room (step 3, in build).
  • Parked until the steps have run on real tours: better post-tour texts, promises, digest, a Zoom user per customer. Listed under "Later, not now" so the ideas are not lost.
  • Zoom side is set up (Fede, Oct 30 afternoon): account-level app, scopes, audio-only transcript recording. One step left: pointing Zoom at our receiver once it is deployed.
What changed since the morning
  • The tour link is our Zoom (Fede's user), not the customer's. Zoom emailed Fede the recording and summary. The "customer connects their Zoom" option is dropped.
  • Kat did answer Clara's check-in at 11:20 AM: "They liked it, they're going to be starting grad school Jan." It is on Sam's guest card. Today's path worked; the note was just thin.
  • A richer recap is on the card: Clara's note from the Zoom transcript was queued onto the same card at 12:38 PM. The transcript was pulled by hand from Zoom's share link.
  • The recording ran 1 h 23 min: 23 minutes of tour, then Kat left it running on her phone and it caught an hour of office radio and coworker chatter. A privacy problem, not a storage one.
  • Our own Zoom recap pipeline (the one that posts our standups) did not see this meeting. We asked Smith why. The product gets its own receiver anyway: production automation never runs on a Mac mini.

The pipeline

ON ZOOM Virtual tour bookedby text, email or call Zoom room for this tourmade by Clara at booking Unique link sentconfirmation + calendar invite The callagent and prospect join INTO CLARA Zoom: summary readyand the transcript Zoom calls our routesigned, in production Raw transcript savedon the tour record Clara writes the note3 to 5 lines, from the raw text AFTER THE CALL Note postedguest card + conversation Two textsto the prospect and the agent Promises pulled outwho, what, by when Clara keeps or remindsunkept ones: daily digest
Figure 1. Grey boxes happen in Zoom; purple boxes are ours. The note goes to the guest card through our PMS adapter, so nothing in the note engine names a PMS.

Zoom configuration, read Nov 2 2026

Risk: one host user, one live meeting at a time. Every tour room is created on one Zoom user, fedechagu@gmail.com (Fede's personal account, Owner, Licensed), and that user's feature list shows no concurrent-meeting add-on. Two virtual tours that overlap would share one host and the second room could not run. Count today, Nov 2 2026, read-only from production: 30 tours booked in the next 14 days, 2 of them virtual (Barcelona Apartments today 11:00 AM with a Zoom room; 2841 Morningside Court Nov 3 4:30 PM as a phone call), 0 overlapping. The account is Zoom Workplace Pro (Fede, Nov 2 2026): one live meeting per host. Fede is adding clara@propflowai.co as the licensed host user for tour rooms (in progress Nov 2 2026); the concurrency question is open, options below.

Overlapping virtual tours: options for Fede's pick (no recommendation yet)
OptionWhat it meansCostWhat we build
1 Zoom Business2 concurrent meetings per host; Clara host user stays the only hostplan upgrade (Fede)nothing new
2 One Clara Zoom seat per leasing-agent hosteach agent who gives virtual tours gets a Clara-owned licensed Zoom user; rooms created under the agent's seatone Pro seat per host (Fede)host user picked per tour from the assigned agent
3 Rooms on the agent's own calendar videoTeams for Outlook hosts, Microsoft Meet/Google Meet for Google hosts; the agent is the host; no Zoom seatsnonerecordings, transcripts and the auto-end/host-notice rules rebuilt on those platforms
What the live configuration says (Nov 2 2026, read with the production app's token)
ItemValue
Host userfedechagu@gmail.com today (Owner, Licensed, account cj2wCpQmRbas6myeCiLjOg); clara@propflowai.co being added as the host user Nov 2 2026 (user id 5Ixdl-f2TH6YYfys5E4VpA, pending activation at the time of writing).
Room creationPOST /users/me/meetings (PR #24158), no alternative hosts, agent joins as a plain participant
Room settingsjoin before host on (0 min), waiting room off, passcode in link, cloud recording on, auto-delete 7 days
App scopesuser read/settings, meeting write/read/update-status/summary, cloud recording read; missing: list meetings, list users (participant events were missing until 21:00Z). Nov 2 21:00Z: meeting:read:participant:admin added by Fede; participant_joined / participant_left / participant_jbh_joined subscribed.
Events subscribedrecording and summary events known to the code; participant events not subscribed (issue #24557)
Phone join test (Nov 2 2026, Willows room 89767286424)Works with the Zoom app (Fede tapped the link on his phone: room name and slot time shown, joined; the room stayed "waiting", so nothing started 14 h early). Browser without the app: works now, no login, no app. Before (Nov 2 2026, 21:25Z): both phones got an app wall because Zoom's "On mobile browser" sub-setting (API in_meeting.join_from_mobile) read off on both Zoom users even though the account toggle was on. After Fede's go ("we should not require login or apps, fix it"), the sub-setting was turned on for clara@propflowai.co and fedechagu@gmail.com (21:32Z, ledgered, read back on). Re-run headless: iPhone shows "Join from browser", then a name box and a Join button, no sign-in; Android shows the same link (the emulator's app-intent overlay kept the click from navigating, so only the link is proven there). Rooms require no sign-in: authentication off, no registration, no waiting room, join before host on, cloud recording on (room 89767286424 read back). Participant-joined events were not captured because #24604 was not live yet. Join-before-host at 0 min stays as is (Fede: understand why first before any window).
Before: iPhone app wall
Before, iPhone
After: iPhone shows Join from browser
After, iPhone
After: name box and Join, no login
Name, then Join
After: Android shows Join from browser
After, Android
Real rooms checked83828436184 (Barcelona, Nov 2) and 88373748730 (Morningside, Nov 3), both host fedechagu@gmail.com, both still "waiting" (never started)

Zoom account changes

SettingChange toWhyStatus
AI Companion meeting summaryOn, starts by itself in every meeting the user hosts, shared with the host onlyIt is the signal our pipeline reacts toverify name on screen
Cloud recordingAudio only plus audio transcript, video off, recording starts by itselfBackup transcript, tiny files, no video of someone's homeverify names
Recording retentionDelete after 7 daysPrivacy (today's hour of office radio)verify it exists on our plan
Join before hostOn (already)Kat ran today's call aloneconfirmed today
Zoom app for our accountA server-to-server app with meeting, recording and summary access; it calls our production routeLets Clara make rooms and receive transcriptsFede, once our route exists we hand over the exact settings

Steps

StepShipsProof
1. ReceiveMerged and live (Oct 30). Our route checks Zoom's signature and stores the raw transcript on the tour. Matched by the company's Zoom meeting id plus the tour slot; one tour in the slot or no match, never a guess.Proven twice on real calls (below).
2. NoteMerged and live (Oct 30), no switch. Clara writes the recap from the raw transcript onto the guest card and the prospect's conversation, through the existing note door. The conversation shows it as a titled card with the topics on the left (merged Oct 30 night, two PRs).Proven end to end on Oct 31 with nobody in the loop (below). Lane done.

One step at a time: step 2 starts only after step 1 has caught a real tour. Anything beyond these three needs Fede's go.

Step 3 — One Zoom room per tour (shipped Oct 31)

The note

The raw transcript is the source and is stored whole on the tour (Fede, Oct 27 and Oct 30). Zoom's own summary is not used: on today's call it had the rent as "$23.95" and said utilities were included, a line from a coworker reading another listing after the tour. The note is six lines at most, only what changes what the team does next, each line "Topic: what was said":

  • The topics come from the call, not from a list: Move-in, Household, Pets, Parking, Price, Repairs they want first, Application, Lease length, whatever was actually discussed. A topic nobody raised gets no line.
  • About the home: if they said whether they want it, in their own words.
  • Said they would: who said they would do what, written down only. Nobody acts on it yet.
  • Never a rating. No hot, warm, cold, score or verdict (Fede, Oct 30: "too speculative"). The team draws its own conclusion from the words.

Example from the Willows test call, written by Clara from the stored transcript with these rules:

About the home: "I like this" — said he'd be ready to sign. Household: Two roommates and one dog. Move-in: Moving from Vail, Colorado; asked if the home could be ready in 2 weeks. Repairs they want first: Stains on the carpet cleaned and the fence fixed before signing. Application: Asked for the application link; his dad will be the cosigner. Said they would: Prospect said he'd be ready to sign once the carpet and fence are taken care of.

It lands on the tour record, on the guest card through the existing note door (the one Kat's texted notes use), and in the prospect's conversation as an internal note. A transcript that does not match a tour, or matches a cancelled one, is stored and flagged; no note is written. A call under two minutes gets no note. Today's texts to the agent and the prospect keep going out unchanged.

Later, not now

Ideas raised on Oct 30, each parked until the steps above have run on real tours and Fede says go. Kept here so they are not lost.

IdeaWhat it would do
Skip "how was the tour?" (built, #24546, Nov 2)Built as: a virtual tour's check-in reads the Zoom call first. Clara's recap already on the card, or a call that never connected (no call, under 2 minutes or 20 words, host never on), and the agent gets no "how was the tour?". A real call with no recap still gets the ask. The prospect's follow-up is unchanged.
Plan decided once at booking; a later room never changes renter copy (built, #24555, Nov 2)Built as: a virtual tour stores what its confirmation told the renter, phone call or video room. Every reminder, calendar invite and host notice reads that. A room added afterwards stays for the host only; the renter keeps hearing "our team will call you". Origin: Patricia Reed (Situs) was told a call, then her reminders sent a Zoom link (#24549).
Rooms end themselves (built, #24567, Nov 2)Built as: every tour room is closed by Clara at slot end + 15 min, whoever is in it. Origin: a prospect's phone sat in a Situs tour room from 10:59 to 12:20 MT with no host. Second half parked (#24557): "no second participant by start + 15 min → ended, never-connected" needs Zoom participant events, which is a Zoom app change and Fede's call.
Never connected: tell the host, offer the renter a new time (design, Fede yes/hold)When a virtual tour never connected, Clara tells the host what the call showed and offers the renter a new time. Nothing is sent today; this is a new outbound, so it waits on Fede.
"Someone is waiting in your Zoom": host notice on join (decided, not built)Decided by Fede, Nov 2 2026 ("I think that's also a good notification to add when someone joined"). When a participant joins a tour's Zoom room and the host is not in it, Clara texts the host at once, e.g. "Patricia just joined your 11:00 Zoom for 8195 and is waiting; join here: <link>". Text to the host; email instead when the host is not opted in to texts; exactly one notification, never both. Nothing goes to the prospect. Needs the same Zoom participant events as the rooms rule (issue #24557: subscribe meeting.participant_joined / participant_left, scope meeting:read:participant:admin, Fede's Zoom app change); ships right after it as a small PR. A new staff-facing message, so it rides the existing virtual-tour setting (no new switch). Proof: Willows with a real phone; Fede turns it on at Situs.
Attendance from the callBoth people on the call marks the tour attended, so the application link goes out at call end instead of two hours later.
Promises"Kat will send the bedroom dimensions" and "Sam will get back next week" become things Clara does, asks for, or schedules; unkept ones in a daily digest.
A Zoom user per customerOne meeting at a time per Zoom license; a user per customer on our account lets tours overlap. An onboarding checklist line.

Why: Patricia Reed, Situs, Nov 2 2026. 11:00 AM MT virtual tour, host Deiby. Her Oct 31 confirmation promised a phone call; a Zoom room was attached 2.5 h later and the reminders sent the Zoom link. She joined the room four times (10:54-10:57, 10:59-11:40, 11:40-12:00, 12:00-12:20 MT), alone, 81 minutes in total. The host never joined; he was working the call plan (called 10:35, voicemail 10:46). Nobody was told she was waiting. With this notice Deiby would have had a text at 10:54.

Proof path

RungResult, Oct 30 evening
Step 1, real callPassed. Fede joined a fresh Zoom room pointed at the Willows test company and talked for 40 seconds. Zoom's end-of-meeting event reached production in 2 seconds and matched the booked 4:00 PM virtual tour by link and slot. The recording and transcript events followed and the raw transcript was stored on the tour (1,041 characters, 11 cues).
Step 2, replay of that callPassed after one fix. First run wrote nothing: the prospect on file was not the name Fede joined under, and the model took that as "no tour happened". A real prospect often joins as a device name or on a partner's account, so the rule now reserves "nothing" for calls where nobody mentions the home, moving in, renting or the application. Second run: recap written, guest card note sent to the PMS (card 362 at the Willows, confirmed by the robot), thread entry on the prospect's conversation (production screenshot taken).
Step 1, second real call (hands-off)Passed for receiving, no note by design. Fede called the test room again after the note step was live. All three Zoom events arrived within two minutes and the transcript was stored. The matcher refused to pick a tour because two test tours overlapped the slot (our test setup), and the call itself was "testing 1, 2, 3", so no note was due either way. The refusal is the designed behavior: one tour in the slot or nothing.
Step 2, automaticPassed (Oct 31, 10:07 AM MT). Nobody touched anything. A scripted phone caller dialed into the Willows test Zoom room and talked for three minutes about the home (move-in, household and a dog, parking, price, repairs, laundry, promises). Zoom's three events arrived, the transcript was stored on the one booked tour, and 14 seconds after the transcript event Clara's recap was on the tour record, in the prospect's conversation and queued to the guest card. Three earlier scripted calls that morning were correctly skipped: two spoke for under two minutes (the recap floor), one was a phone-side error. Quality note: the recap kept three topics and dropped the "About the home" and "Said they would" lines the prompt asks for; filed as a follow-up.
Next real Western Slope virtual tourPending; the note is read by a person on the card.

The first recap written for the test call used the four fixed labels and a "hot" rating. Fede's review of the card the same night: the plain run of sentences was "sloppy", the rating "too speculative", and the categories must follow the topic. Both fixed and merged that night: a titled card with the labels on the left, and the rules above. Every line is in the transcript; nothing was added.

Fixed the same night: the conversation page labelled the entry "Team to Clara"; it now reads as Clara's card.

Open items

  1. Zoom event subscription: done by Fede, Oct 30 evening; validated against production.
  2. Leftover for Fede (one click): delete the test Zoom room "Willows virtual tour test" (89964195279) in the Zoom app. Our server app lacks the meeting-delete scope; the room is harmless, nothing points at it anymore.
  3. Later: an eval for the recap rules (issue #23948); rotate the Zoom client secret, since it passed through chat during setup.

Answered Oct 30: the hosting Zoom account is PropFlow's (same account as Smith's standup pipeline, different app type). Smith's receiver never saw the meeting because his app is bound to one Zoom user. Zoom bills recording by storage, not minutes; one meeting at a time per license.

Today's tour

One virtual tour today across all customers: Sam Kavajecz, Pomona Park Townhomes unit 301, Western Slope, 10:00 AM Mountain, Kat hosting on the company Zoom link (PropFlow's Zoom). Booked by email at 8:50 AM.

StepHappenedNotes captured
Confirmation, Zoom link, reminder to Samyes text and email, 8:50 and 9:00 AMn/a
Booking text to Kat with the linkyes 8:50 AMn/a
The Zoom callyes recording ran 1 h 23 min: 23 min of tour, then an hour of office soundfull transcript in Zoom
Clara asks Kat "How was the tour?"yes 11:00 AM; Kat answered 11:20 AMon the card "They liked it…"
Zoom summarylanded in Fede's inbox (account owner), pulled by handrecap queued 12:38 PM
"How was your tour?" text to Samset for 12:30 PM (slot end + 2 h), before the recap landednot checked for this page

Rules this follows

Sources

PropFlow Docs