Changes to presence in the Web and RTM APIs

Published:Tuesday, January 30, 2018Updated:Tuesday, February 6, 2018

The RTM API's presence_change event is now only available via presence subscriptions and rtm.start no longer includes user presence status in its response.

We incrementally announced these changes in June and October 2017.

Today, we're also announcing the deprecation of the optional presence parameter in users.list. Beginning September 26th, 2018, the presence parameter and corresponding fields will no longer be available from users.list.

Developers utilizing user presence state in their applications and integrations should review this guide to the many recent and coming changes to presence.

Update: users.setActive is also deprecated due to underlying functionality not being available in our most modern message servers.


What's changing in September 2018

The Web API method users.list will no longer accept the optional presence parameter, which instructs the method to return a presence field with every user object.

Until September 26th 2018, you'll find accurate presence reporting capped at 500 results in large workspaces.

Recent changes to presence in Winter 2017-2018

To recap everything that has changed recently with presence:

How to respond or prepare

If your app uses presence_change events you must subscribe to them before delivery. If you don't need real time presence for every user, use users.getPresence ad-hoc to look up user presence by ID.

If your app uses the presence parameter on users.list or relies on the presence field in user objects appearing in rtm.start, you'll want to look up presence on demand using users.getPresence or the presence_query instead.

Neither presence_query nor users.getPresence are intended for frequent, bulk usage. We recommend reducing your dependency on a complete picture of user presence and instead look up presence ad hoc only when it's absolutely necessary for operations.

If you relied on users.setActive to prevent a user from being set away, you'll need to maintain presence another way like opening a RTM connection or using users.setPresence.

What happens if I do nothing?

By not receiving the presence_change events your app is looking for, or by not getting the initial state of presence from rtm.start or users.list with the presence parameter, your app won't know whether users are present or not (that is, active or away).

If your app or bot only contacts users it detects as active via presence, your bot may have trouble interacting with users.

If your app tracks presence for some other reason, the tracking might not be accurate.

If your app is already using subscriptions but is not batching presence events, you may receive floods of presence_change events in large workspaces.

If your app only uses users.getPresence to determine presence, nothing changes. users.getPresence functions as usual.

If your app sets presence to true or 1 on users.list, you'll need to adapt to using users.getPresence and/or presence subscriptions by September 26, 2018. By doing nothing now, your presence results are capped at 500 users.

Your requests to users.setActive will appear successful but will not actually prevent a user from being marked away. Eventually, the method calls will return a HTTP 400-series code.

When is this happening?

As of January 2018, presence subscriptions are already required and rtm.start no longer returns presence for its list of users.

On May 8, 2018 users.setActivewill completely cease functioning May 8, 2018. Until then, it is a no-op.

On September 26, 2018, the optional presence parameter in users.list will no longer function.

Please contact us with your concerns at feedback@slack.com