Presence and status
Topic: How SPARKS determines your presence, publishes it to Matrix and Microsoft, and optionally uses a server-side aggregator.
See also: User Profiles (profile status message), Settings, Incoming call (ringtone vs. presence).
At a glance
| Question | Short answer |
|---|---|
| Where do I set my status? | Top toolbar → status menu (e.g. Available, Busy, Away, Do not disturb, Offline). |
| Can others see my status? | Matrix: other Matrix users typically see your presence in chat (per homeserver rules). Microsoft Teams / Outlook: only if a Microsoft work/school account is connected and the app is allowed to update presence. |
| What is the “server aggregator”? | Optional (deployment-dependent): your org may enable a backend that combines signals (devices, calendar, meetings, manual choice, optional Microsoft import). Without it, the classic direct client behaviour applies. |
| What happens in sleep mode or when the screen is off? | See Sleep, screen off, and network. |
Overview
Presence describes whether you are reachable and how — e.g. available, busy, away, do not disturb, or offline.
In SPARKS this state can:
- Be shown inside the app (toolbar, contacts).
- Be sent to your Matrix homeserver (others see it according to Matrix rules).
- Be sent to Microsoft when a Microsoft 365 / Teams account is connected (Teams/Outlook may show it — subject to license and policy).
If your organization enables it, a backend server may aggregate all relevant signals. This document calls that aggregated presence or the server aggregator.
Two operating modes
A) Classic mode (no server aggregator)
- SPARKS talks directly to Matrix (presence) and, when connected, to Microsoft Graph (presence).
- There is no single central “source of truth” on a SParks server; behaviour is similar to typical chat clients with Microsoft integration.
B) Aggregated mode (server aggregator enabled)
When the environment is configured accordingly (e.g. account server sign-in and backend flags):
- Your canonical presence is computed and stored on the server.
- The app sends events to the server (e.g. active/idle, in a meeting, calendar busy).
- The server derives one status and may forward it to Matrix and/or Microsoft — depending on configuration and your privacy settings.
Whether mode A or B applies is decided by deployment / IT, not by a single end-user toggle. Ask your administrator if unsure.
Changing status in the UI
- Top toolbar → click your status or name → choose a status (Available, Busy, …).
- Optional: duration or until time — depending on the dialog SPARKS shows.
This is your manual choice. Depending on mode, it may be combined or overridden by calendar, meetings, or device state (see below).
What feeds into presence?
| Source | User-facing meaning |
|---|---|
| Device / session | The app periodically reports that you are still there (“heartbeat”). Without such signals, the system may assume you left the device. |
| Mouse & keyboard | Activity is reported; after a quiet period, idle may be reported. |
| Window visibility | If the tab goes to the background or the window is hidden, the app may report hidden, which often maps to away rather than “available”. |
| SPARKS meeting / call | While in a SPARKS meeting or call, status is often busy with high priority. |
| Calendar | Busy blocks from the calendar may mark you busy when aggregation and calendar integration are enabled (organizer/participant rules depend on setup). |
| Manual selection | Toolbar choice (e.g. Do not disturb). Weight vs. calendar can be configured (calendar first vs manual first). |
| Microsoft | When connected, Microsoft presence can be imported into aggregation and/or your SPARKS status can be written to Microsoft — depending on mode and settings. |
Priority (simplified)
With the server aggregator, decisions are usually made roughly in this order:
- Active SPARKS meeting / call — often highest (busy / in call).
- Calendar busy and/or manual status — order can be set to calendar first or manual first in settings (when available).
- Microsoft import (if enabled) — may contribute “busy” when Microsoft reports it.
- Idle / hidden — often away when no higher-priority rule applies.
- Otherwise available when the device is still considered active.
Multiple devices (e.g. PC and laptop)
With aggregation, each signed-in device can send signals. While at least one device stays active, you often remain online. If no device reports within the server timeout, presence may become offline.
The timeout is configured on the server, not in the app.
Sleep, screen off, and network
Background tab or locked screen (computer still running)
- Visibility may change (tab hidden → “hidden”). Status may move toward away while heartbeats still arrive.
Sleep / suspend (system sleeps)
- The app cannot send reliable heartbeats.
- After a configured silence period (often on the order of two minutes, deployment-specific), the device is no longer “active” → aggregated presence may become offline (“no active device”).
- Browsers do not expose a dedicated “system sleep” event; sleep is modelled as missing signals.
Network disconnected
- SPARKS may report offline and, depending on settings, propagate that toward Matrix/Microsoft.
Settings: Privacy → “Presence (server)”
Only shown when the app uses the server aggregator and you are signed in with the organization account (e.g. OIDC/Keycloak).
Under Settings → Privacy, you may see:
| Option (labels may vary slightly) | Meaning |
|---|---|
| Use calendar busy in aggregated presence | Whether calendar blocks contribute “busy”. |
| Include Microsoft Graph presence as a source | Whether Microsoft-read presence is an input (import). |
| Share aggregated presence externally | Whether the server may push presence to Matrix / Microsoft (when server dispatch is enabled). |
| Priority: calendar vs. manual | Which wins when both apply. |
If this block does not appear, your deployment likely uses classic mode.
Colleagues’ presence
When your organization uses organization membership, the app may query peers in the same organization for their aggregated status. For privacy, device lists and internal policy details are not exposed — only the visible status.
For administrators (pointers)
Developer documentation lives in the Vistameet-Teams repository, not in this user manual. Starting points:
- Concept:
docs/KONZEPT_PRESENCE_MULTI_DEVICE_MS_MATRIX.md - Server env:
server/.env.example(PRESENCE_*keys) - Client env: e.g.
VITE_PRESENCE_USE_AGGREGATOR,VITE_PRESENCE_SERVER_DISPATCH,VITE_PRESENCE_USE_SSE(see project.env.example)
FAQ
Why does Teams show a different status than SPARKS?
Microsoft may combine other clients, policies, and licenses. SPARKS synchronizes best effort only.
Why am I offline though the PC is on?
Common causes: sleep, long idle, or network — see Sleep, screen off, and network.
Does SPARKS store device IDs?
In aggregated mode, a pseudonymous device id per installation may be used to distinguish devices — confirm with your privacy policy / DPA.
User documentation last updated: April 2026. Features may change with product releases; see technical docs or release notes for details.