softphone: People panel with presence, click-to-call
ci / images (push) Canceled after 0s
ci / check (push) Canceled after 4s

People lists every extension with its status dot and a search box: a
right-hand column on wide screens, /me/people on small ones. Call uses the
browser softphone when it's on, else POST /api/me/click-to-call, which
originates to the user's desk phone first (409 if none is registered).
During a call: Transfer (blind), Talk first (consult), or drag the call
card onto a person; a held call card offers Complete transfer whenever
another call is active. useSoftphone moved to its own module.

e2e m5-t3: the dot changes ~30 ms after Asterisk's hint; click-to-call
rings 174 before 172. cdp click() takes a scope (People also has
Call/Transfer buttons). trunk-test ignores the RTCP-at-teardown EPERM
error seen once.

Task: M5-T3
This commit is contained in:
iamdoubz committed 2026-10-18 10:06:28 -05:00
1 parent c7fd4df77c
commit 609965bba5
16 files changed
+452 -33

No files matched your search

+6
View File
@@ -106,6 +106,12 @@ Right column on wide screens, a tab on mobile. Lists every extension with its
StatusDot, name and number, plus a search box. Click to call, or to transfer when
in a call (drop the active call onto a person = blind transfer; a menu offers attended).
As built (M5-T3): the tab is `/me/people`, shown only below the `lg` breakpoint. **Call** uses the
browser softphone when it's registered, and otherwise click-to-call: the desk phone rings first,
or a 409 comes back if no desk phone is registered. During a call each person shows **Transfer**
(blind) and **Talk first** (a consult call; the first call is held). A held call card offers
**Complete transfer** whenever another call is active, which also covers call waiting.
## 5. Browser softphone (`src/softphone/`)
### 5.1 Structure