Wingmanby Adept Apps

Wingman: Administrator Guide

Applies to Wingman 1.0.0. Download as PDF.

Wingman shows, on a Lightning record page, which other users have the same record open. This guide covers installing it, setting it up, deciding who is visible, and what to check when something looks wrong.

Inside Salesforce the component is called Record Presence Indicator, and that is the name to look for in Lightning App Builder, in Setup and in the permission sets.

1. What it does

When two or more people open the same record, each sees a small row of avatars for the others, with a count such as "2 other people are viewing this record". Hovering over an avatar shows the person's name. People use it to notice a colleague is already working on a record, and to coordinate before both make changes.

It is one component that works on every object, standard or custom. There is nothing to configure per object.

What it does not do:

  • It does not lock records or prevent anyone from editing.
  • It does not show who viewed a record in the past. It shows who is looking now.
  • It is not available on Experience Cloud sites or in Salesforce Classic.

2. Requirements

  • Lightning Experience.
  • Platform Cache. Enterprise, Unlimited, Performance and Developer editions include it.
  • Internal users. The component shows viewers' full names, so it is not offered for Experience Cloud pages.

3. Install

  1. Install the package from its AppExchange listing.
  2. When asked who to install for, choose Install for Admins Only.

Why "Admins Only" matters: whoever the package is installed for is automatically made a visible viewer. Installing for admins only leaves you in control of everyone else through permission sets, which is what lets you make particular people hidden. If you choose "Install for All Users", every user becomes a visible viewer and the only way to hide someone is to edit their profile.

Installing for admins grants access to the System Administrator profile and to custom administrator profiles.

4. Set up in three steps

Start at the Wingman app: open the App Launcher, find Wingman, and open its Wingman Setup tab. It runs a check for steps 1 and 2 the moment it opens, shows a green tick or an amber warning against each, and gives a button that opens the right Setup page for anything that is missing. Come back to it and click Check again after each step. Step 3 cannot be checked automatically, so the page describes it instead. Only administrators see this page; anyone else is told to ask an administrator.

The Wingman Setup tab: green ticks beside Step 1, Cache capacity, and Step 2, Permission sets, with buttons that open Permission Sets and Lightning App Builder
The Wingman Setup tab with both checks passed.

Step 1. Give the cache partition capacity (required)

Presence is kept in a Platform Cache partition named PresenceCache. A package install always creates this partition empty, with 0 MB, and Salesforce does not let a package allocate capacity for itself. Until you do, nothing can be stored and nobody will ever see anybody.

  1. In Setup, enter Platform Cache in Quick Find and open it.
  2. Click Edit next to PresenceCache.
  3. Under Org Cache Allocation, give it 3 MB of Provider Free capacity. This is a free allowance that belongs to the package, so it does not come out of your organization's own cache allowance. If Provider Free is not offered in your org, allocate 1 MB of your own Org cache instead; presence works the same either way.
  4. Save.
The PresenceCache partition's edit page in Setup. Under Org Cache Allocation, the Provider Free field holds 3 and is outlined in red
The PresenceCache partition in Setup, with 3 MB entered under Provider Free in the Org Cache Allocation section.

Use the full 3 MB: that is the whole of the free allowance that comes with Wingman, it is yours only for this package, and leaving part of it unused saves nothing. Wingman does not need that much (1 MB covers several thousand records being viewed at the same moment), which is why 1 MB of your own Org cache is enough if you have to use it instead. Session cache is not used; leave it at 0.

If this step is missed, an administrator who opens a record with the component on it sees a notice after about 40 seconds with the record in view, with an Open Platform Cache in Setup link. Other users see nothing.

A contact record with the administrator notice under the highlights panel: Record presence is not working: the PresenceCache partition is not storing anything, with an Open Platform Cache in Setup link
The notice an administrator sees on a record while the partition has no capacity. Other users see nothing.

After every package upgrade, come back to this page and set the allocation again. Permission set assignments and page layouts survive an upgrade, but in our tests on a Developer Edition org the partition came back with 0 MB after each upgrade. The Wingman Setup tab shows it at once, and the administrator notice above appears on records.

Step 2. Assign a permission set to each user

Give every user who should take part one of the two permission sets described in the next section. Almost everyone gets Presence Indicator User.

Users with neither permission set never see the component, and no error is shown to them. Administrators already have access from the install and do not need a permission set.

Step 3. Add the component to a record page

  1. Open a record of the object you want, click the gear icon and choose Edit Page.
  2. Find Record Presence Indicator under Custom components and drag it onto the page. Directly under the highlights panel works well.
  3. Adjust the two settings if you wish (see section 6).
  4. Save, then Activate the page if it is new.
Lightning App Builder editing the Contact record page: the Record Presence Indicator component is selected under the highlights panel, and the panel on the right shows its two settings, Show when no one else is viewing and Refresh interval (seconds)
Record Presence Indicator selected in Lightning App Builder, with its two settings in the panel on the right.

Repeat for each object's record page. The same component works on all of them.

5. Who is visible: the two permission sets

Permission set The user sees others Others see the user
Presence Indicator User Yes Yes
Presence Indicator User (Hidden User) Yes No

Assign one or the other, not both.

Hidden users

Some roles need to look at a record without announcing it, for example a team lead doing quality checks. Give those users Presence Indicator User (Hidden User) instead of Presence Indicator User.

  • A hidden user sees who else is on the record, and is never shown to anyone.
  • It is enforced on the server. A hidden user's name is never written to the presence cache, so it cannot reach another person's browser.
  • The hidden user sees "You are not shown to others" on the component, so they can confirm it is in effect.
  • If someone becomes hidden while they already have a record open, they disappear from other people's screens within about one refresh interval.

A user who holds both permission sets is visible. Visibility comes from one custom permission, Presence Visible, which the standard permission set includes and the hidden one leaves out. Anything that grants it makes the user visible. This is deliberate: a mistake leaves someone seen, never secretly unseen. It also applies to permission set groups, so check what a group contains before relying on it.

Administrators are visible, because the install grants Presence Visible to administrator profiles. To hide an administrator, give them the hidden permission set and also disable Presence Visible under Custom Permissions on their profile.

To see who can view records unseen, open the hidden permission set and look at its assignments.

Whether viewing colleagues' activity unseen is appropriate, and whether staff must be told it is possible, depends on your organization's policies and on local employment and privacy law. That decision is yours.

6. Component settings

Set these in Lightning App Builder, per page.

Setting Default What it does
Refresh interval (seconds) 10 How often each viewer checks in, from 5 to 60. A lower number shows new viewers sooner. A higher number makes fewer server calls, which suits pages with many users on them all day.
Show when no one else is viewing Off Off: the component takes up no space until someone else opens the record. On: it shows "No one else is viewing this record" while the user is alone.

7. How presence behaves

Knowing these saves most support questions.

  • Only a visible browser tab counts as viewing. A tab in the background, a minimized window, or a window completely covered by another one does not count. A person with many records open in background tabs is shown on none of them. After 20 seconds out of view a tab gives up its place, and it returns the moment it is brought forward.
  • Arriving: a new viewer appears to others within about one refresh interval.
  • Leaving: navigating away or closing the tab usually removes the viewer within a second or two. Browsers do not always let a closing page finish its last request, and a browser can also vanish without saying anything (a closed laptop, a lost connection). In those cases the viewer is removed about 30 seconds after their next check-in was due, which is 40 seconds at the default interval.
  • Arrivals and departures are animated: an avatar fades in over a quarter of a second and fades out over a fifth. If the operating system's reduce-motion setting is on, avatars appear and disappear instantly instead.
  • Sharing is respected. A user only sees presence on records they can read.
  • Up to 50 viewers are tracked per record. Ten avatars are shown, followed by a "+N more" chip. Hovering the chip lists the names of the remaining viewers, and a screen reader reads the same list.
  • Check-ins are deliberately a little irregular (each interval varies by up to 15%), so that many browsers opened at the same moment do not all check in at the same instant.

8. Troubleshooting

What you see Likely cause and fix
Nobody ever appears, for anyone The PresenceCache partition has no capacity. This is its state straight after install. Do Step 1. An administrator who keeps the record in view sees a notice on the component after about 40 seconds.
A colleague has the record open but is not shown Their tab is not visible: it is in the background, minimized, or fully covered by another window. This is by design. It is the most common surprise when testing with several windows on one screen: keep each window at least partly uncovered.
One user never sees the component at all They have neither permission set.
One user is never shown to others and sees "You are not shown to others" They do not hold Presence Visible: they have the hidden permission set, or access from elsewhere, without Presence Indicator User.
A user was given the hidden permission set but is still shown They also hold Presence Visible: from Presence Indicator User, a permission set group, or their profile (always the case for administrators). Remove the other source.
Everyone is visible and nobody can be hidden The package was installed for all users, which granted Presence Visible to every profile. Disable it under Custom Permissions on the profiles of the people to hide.
Testing with two users shows nothing Both browser windows are probably logged in as the same user. Windows of one browser profile share a login, and so do all of a browser's private/incognito windows. Use a normal window for one user and a private window, or a different browser, for the other, and check the name under the avatar in the top right of each.
Presence briefly empties for everyone Platform Cache was cleared, which happens when Apex is deployed. It refills within one interval.
The component looks out of date after an upgrade Browsers cache Lightning components. Hard-refresh the page (Ctrl+Shift+R, or Cmd+Shift+R on a Mac).
Presence stopped working after an upgrade Expected: the PresenceCache allocation reverts to 0 MB on upgrade. Set it again as in Step 1. The Wingman Setup tab shows this at once.
The Wingman app or its Setup tab is not in the App Launcher The install grants the tab to the installing profiles only. Give another profile the tab (Setup > Profiles > Object Settings > Wingman Setup) or the app (App Settings). The page only works for users with Customize Application.
The Wingman Setup tab with an amber warning beside Step 1, Cache capacity: PresenceCache is not storing anything, and an Open Platform Cache in Setup button
The Wingman Setup tab when the partition has no capacity: the first thing to check when nobody ever appears.

9. Translating the text

All text the component shows is held in Custom Labels in the Record Presence Indicator category. To translate it, enable Translation Workbench, add the language, and translate those labels. Keep {0} in any label that contains it: it is replaced with a count or a name. The two setting names in Lightning App Builder cannot be translated.

10. Data, privacy and security

  • What is held: for each record being viewed, the record id and, per visible viewer, their user id, full name, last check-in time and refresh interval.
  • Where: Platform Cache only, readable only by the package. Nothing is written to the database, nothing appears in reports, and nothing leaves Salesforce. There are no callouts to any external service.
  • For how long: a viewer stops being shown within about 40 seconds of leaving, and a cache entry expires on its own within five minutes.
  • Who can see it: only users who can read the record and hold one of the permission sets. A user without access to a record gets the same answer as "nobody is viewing", so presence cannot be used to discover records or activity.
  • Identity: the viewer's identity comes from their Salesforce session, never from the browser, so a user cannot appear as someone else, and cannot remove anyone but themselves.
  • Hidden users are never written to the cache at all.
  • The component writes nothing to the browser console.

11. Performance and limits

  • Each visible viewer makes one small Apex call per refresh interval: six a minute at the default. Background tabs make none. Each call does one cache read and one cache write, one lightweight access check, and no database writes.
  • These are ordinary Lightning component calls, not API requests, so they do not count toward your organization's API request limits.
  • It uses no custom objects, no data or file storage, no platform events and no streaming connections.
  • A record's entry is a few hundred bytes. 1 MB of cache covers thousands of records being viewed at once.
  • If a page is open all day for a very large number of users, raising the refresh interval to 20 or 30 seconds reduces the call rate proportionally, at the cost of new viewers appearing a little later.
  • Presence is kept in a cache, which Salesforce may clear at any time. It is ambient information and is rebuilt within one interval; do not build processes that depend on it.

12. Uninstalling

  1. Remove the component from every record page it is on.
  2. Remove the permission set assignments.
  3. In Setup, open Installed Packages and uninstall the package.

No data is left behind: nothing was ever stored outside the cache.

13. Support

Email support@adeptapps.net. Wingman is free, and support is best effort: questions are answered as soon as possible, with no guaranteed response time. When writing, say which version is installed (Setup > Installed Packages) and what the Wingman Setup tab shows.

When contacting support, it helps to include: the Salesforce edition, the package version (Setup > Installed Packages), the PresenceCache allocation shown in Setup > Platform Cache, and which permission sets the affected users hold.