11 · Meetings & calls
Two real-time communication tools live in the portal:
- Meetings (
/meetings) — scheduled video/voice meetings. - Calls — softphone access via SIP, used through the phone icon in the top bar.
Meetings
Schedule, host, and review meetings without leaving the portal.
Layout
+-----------------------------------------------------------+
| Meetings. [+ New meeting]|
|-----------------------------------------------------------|
| [My meetings] [All org meetings] Status — all ▾ |
|-----------------------------------------------------------|
| Live now |
| Acme weekly SCHEDULED · JITSI Join → |
| Upcoming |
| Internal sync SCHEDULED · INTERNAL |
| Past |
| Beta kickoff ENDED · JITSI |
+-----------------------------------------------------------+
📷 Screenshot placeholder: screenshots/meetings.png
Meetings are grouped into Live now, Upcoming, and Past. The My meetings / All org meetings toggle switches scope, and there's a status filter (Scheduled / In progress / Ended / Cancelled).
Scheduling
+ New meeting (/meetings/new):
- Title and optional description.
- When (date + time) and duration in minutes (defaults 30).
- Provider — choose one:
- Internal (browser) — a built-in room (see note below)
- Jitsi — a Jitsi room; the platform generates the URL
- External (link) — paste any meeting URL (Teams, Zoom, etc.)
- Optionally tick Enable recording.
- Pick participants from the list of portal users.
- Schedule meeting.
Participants are portal users only. The meeting creator becomes the host. There is no calendar-invite email and no field for external email attendees — invited users see the meeting in their list and can Accept or Decline.
Joining
Open a meeting and click Join now (a meeting auto-starts when its first participant joins). What happens next depends on the provider:
- Jitsi / External — a button opens the room in a new tab.
- Internal — shows an in-portal room placeholder with a room key; live audio/video transport for the internal provider is not yet wired up.
The host can Start, End, or Cancel a meeting; the host can also Delete it.
In-meeting chat
Every meeting page has a Chat panel — a simple text chat for people in the meeting, alongside a Participants list showing each person's status (Invited / Accepted / Declined / Joined / Left).
There is no real-time collaborative notes tab and no automatic action-item-to-task conversion.
Recording
If recording was enabled on the meeting:
- Recording is uploaded as chunks server-side (to object storage), with an optional manifest key.
- The meeting page shows a Recording card with chunk count, total size, and duration once chunks exist.
Recording is a per-meeting flag and a server-side upload mechanism; it does not start automatically based on attendee count, and there is no in-page recording playback yet.
Calls (softphone)
The phone icon (📞) in the top bar opens the softphone — a SIP
client (SIP.js) embedded in the browser. There is also a full-screen
softphone at /softphone, designed to be installed as a PWA with
Keypad / Recents / Contacts tabs.
+----------------------------+
| ● Ready |
|----------------------------|
| [ Enter number ] |
| 1 2 3 |
| 4 5 6 |
| 7 8 9 |
| * 0 # |
| [ Call ] [ Disconnect ] |
+----------------------------+
📷 Screenshot placeholder: screenshots/softphone.png
Setup
A SIP trunk must be configured before the softphone works:
- Org-level SIP settings (enabled, WebSocket URL, realm) are set by
an admin under Admin → SIP settings (
/admin/settings/sip). - Per-user credentials (extension + password) are set by an admin for each user via the SIP service — they are not auto-provisioned.
Until SIP is configured the phone icon is greyed out and clicking it explains how an admin can set it up.
Making a call
- Click 📞 → the panel opens.
- Click Connect to register with the SIP server (the full-screen
/softphoneapp auto-connects on load). - Enter a number on the keypad → Call.
- The call is logged automatically.
Inbound calls
When a call comes in:
- The phone button pulses and the panel shows the incoming number.
- A browser notification fires (if you've granted permission).
- Click Answer to take the call, or Decline to reject it.
Inbound calls show the raw caller number. There is no automatic match against CRM contacts and no customer-card pop-up.
During a call
The active-call view shows the call duration and a Hang up button.
Mid-call controls such as mute, hold, transfer, and call recording are not currently available in the softphone.
Call history
/calls (titled "Call log") lists calls for the organisation —
direction, number, the user who handled it, status, duration, and start
time, with KPI tiles (total / answered / missed / average duration) and
an In / Out / Missed filter. Non-admins see only their own calls;
admins see the whole org.
Call-log rows are not clickable and there is no recording playback from this page.
Permissions
| Action | Required |
|---|---|
| See / join meetings | any user (their meetings) |
| Schedule meetings | any user |
| Use softphone | any user with a SIP extension provisioned |
| Configure org SIP settings | admin |
| Set a user's SIP extension | admin |
| View the call log | full org log = admin; own calls = any user |
Common workflows
Internal sync
- + New meeting → pick the Internal or Jitsi provider.
- Add the team as participants.
- At meeting time, open it and Join now.
Outbound call
- Click 📞 → Connect if not already registered.
- Enter the number → Call.
- The call appears in
/callsafterwards.
Review call history
/calls→ filter by In / Out / Missed.
See also
- Admin → SIP settings —
/admin/settings/sip - CRM — the
/softphonePWA can dial CRM contacts