The Worklytics platform collects and analyzes workplace data at the instruction of Customer Organizations on their behalf, in accordance with our Privacy Policy, Terms of Service, and any customer agreement / laws / regulations which may supersede those terms. The Customer Organization remains the controller of this data and may instruct Worklytics to halt processing and destroy it at any time.
“Data Connectors” conceptualize the collection of workplace data, representing the connection via which Worklytics will collect data from a single data source.
Slack is a workplace communication tool that mainly allows employees to communicate through messaging. Some communication happens in channels that can be public or private, and between one or many people.
Log-in in the Slack workspace you want to connect.
Log-in as an administrator to your Worklytics account by visiting https://app.worklytics.co.
Go to "Manage > Data Connections" from the sidebar menu, and click on "Add New Connection".
Find "Slack" in the list and click "Connect". You'll be redirected to Slack.
Once in Slack you will be prompted to grant access to the Worklytics Application. Click "Allow".
Back to the Worklytics "Data Connections" check a Slack connection has been created.
During the installation Slack will prompt you to grant the following permissions.
Note: Worklytics at the moment only operates on public channels, not on private or 1:1 conversations.
channels:read
, list all public channels in the workspace.
channels:history
, read historical messages on public channels.
users:read
, list all slack users.
users:read.email
, retrieve email of slack users, needed to match identities.
For enabling the Slack Discovery API integration you must first set up an App on your Slack Enterprise instance.
Take note of your App ID (listed in "App Credentials"), contact your Slack representative and ask them to enable the discovery:read
scope for that App ID. If they also enable discovery:write
then delete it for safety, the app just needs read access.
Go to "OAuth & Permissions" section and add the following scopes:
Bot Token Scopes: users:read
. This scope is needed to allow "Org-Wide" installations of the App: if this is your use-case; go to "Settings > Manage Distribution > Enable Org-Wide App installation", click on "Opt into Org Level Apps", agree and continue. This allows to distribute the app internally on your organization, to be clear it has nothing to do with public distribution or Slack app directory.
User Token Scopes: discovery:read
After completing the steps above, you can connect your Worklytics account to the Slack App:
Go to the Slack Discovery API connector page
Take note of the Worklytics Redirect URL listed in the page. Go to the "OAuth & Permissions" section of your Slack App, and add it to the "Redirect URLs" section.
Now, review and fill the form with the required values of your App:
Client ID
Client Secret
You can find them in the "App Credentials" section of your App (same section where you'd get the App ID before).
Once you click "Allow", you'll be redirected back to Worklytics. Click on "Connect" to complete the connection.
Worklytics uses the email address and usernames to match user between other workplace applications.
Worklytics retrieves the messages of the public channels but do not store their contents, just metadata associated with them like the message length, reactions or mentions to other uses.
Worklytics also supports connecting your organization's Slack data via our Pseudonymization Proxy Service (see: https://docs.worklytics.co/psoxy/sources/slack ) and via bulk data import (see HRIS Snapshots).
Go to https://api.slack.com/apps and create an App. Select "From scratch", choose a name (for example "Worklytics connector") and a development workspace.
Click on "Authorize Connection". Worklytics will redirect you to Slack, where you'll be prompted to grant access to the connection.
The following table(s) contains detailed examples of the metadata fields available from the Slack API endpoints Worklytics leverages. In order to pseudonymize and sanitize PII and other potentially sensitive data, Worklytics provides access to a Data Loss Prevention (DLP) Proxy, which allows customers to pre-filter metadata, within customer infrastructure, before it is sent to Worklytics for processing.
These are the fields Worklytics recommends but the Worklytics DLP Proxy provides full field-level control and therefore any field may be removed or sanitized.
Field descriptions are taken from third party API documentation, these are maintained on a best effort basis and Worklytics can not guarantee their indefinite accuracy. Please refer to the source API site for the most up-to-date documentation.
How to read the "DLP Proxy" column in the table(s):
🔴 This field is completely redacted by the DLP Proxy
⭕ This field is transformed, usually partially redacted
🟡 This field is "pseudonymized" by the DLP Proxy: only a SHA256 hash of its value is sent to Worklytics; never the value itself
To see only the fully sanitized version of this document, click here.
Worklytics requires access to the following API primary endpoints:
API docs: https://api.slack.com/enterprise/discovery/methods#enterprise_info
DLP Proxy docs: Slack
API docs: https://api.slack.com/enterprise/discovery/methods
DLP Proxy docs: Slack
API docs: https://api.slack.com/enterprise/discovery/methods
DLP Proxy docs: Slack
API docs: https://api.slack.com/enterprise/discovery/methods
DLP Proxy docs: Slack
Model | Description | API docs |
---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
DLP Proxy | Property Name | Type | Description |
---|---|---|---|
Used to retrieve organization/enterprise metadata (API documentation requires logged-in access)
Endpoints:
/api/discovery.enterprise.info
Used to retrieve user information (API documentation requires logged-in access)
Endpoints:
/api/discovery.users.list
Used to retrieve messages (API documentation requires logged-in access)
Endpoints:
/api/discovery.conversations.history
Used to retrieve a list of conversations (API documentation requires logged-in access)
Endpoints:
/api/discovery.conversations.list
/api/discovery.conversations.recent
/api/discovery.conversations.info
/api/discovery.conversations.history
🟢 Allowed
domain
String
🟢 Allowed
emailDomain
String
🔴 Redacted
icon
Icon
🔴 Redacted
icon.image102
String
🔴 Redacted
icon.image132
String
🔴 Redacted
icon.image230
String
🔴 Redacted
icon.image34
String
🔴 Redacted
icon.image44
String
🔴 Redacted
icon.image68
String
🔴 Redacted
icon.image88
String
🔴 Redacted
icon.imageDefault
boolean
🟢 Allowed
id
String
🟢 Allowed
isVerified
boolean
🔴 Redacted
name
String
🟡 Pseudonymized
teams[]
List of Teams
🟢 Allowed
teams[].archived
boolean
🟢 Allowed
teams[].created
String
🟢 Allowed
teams[].deleted
boolean
🔴 Redacted
teams[].description
String
🟢 Allowed
teams[].discoverable
String
🟢 Allowed
teams[].domain
String
🟢 Allowed
teams[].emailDomain
String
🟢 Allowed
teams[].enterpriseDomain
String
🟢 Allowed
teams[].enterpriseId
String
🔴 Redacted
teams[].enterpriseName
String
🔴 Redacted
teams[].icon
Icon
🔴 Redacted
teams[].icon.image102
String
🔴 Redacted
teams[].icon.image132
String
🔴 Redacted
teams[].icon.image230
String
🔴 Redacted
teams[].icon.image34
String
🔴 Redacted
teams[].icon.image44
String
🔴 Redacted
teams[].icon.image68
String
🔴 Redacted
teams[].icon.image88
String
🔴 Redacted
teams[].icon.imageDefault
boolean
🟢 Allowed
teams[].id
String
🟢 Allowed
teams[].isEnterprise
int
🟢 Allowed
teams[].isVerified
boolean
🔴 Redacted
teams[].name
String
🟢 Allowed
admin
Boolean
🔴 Redacted
appUser
Boolean
🔴 Redacted
color
String
🟢 Allowed
deleted
Boolean
🟡 Pseudonymized
email
String
Raw example: alice@acme.com
Sanitized example:
🔴 Redacted
has2fa
Boolean
🔴 Redacted
hasFiles
Boolean
🟡 Pseudonymized
id
String
Raw example: U12345678
Sanitized example:
🟢 Allowed
is_bot
Boolean
🟢 Allowed
locale
String
🔴 Redacted
name
String
🟢 Allowed
owner
Boolean
🔴 Redacted
primaryOwner
Boolean
🟡 Pseudonymized
profile
Profile
🟢 Allowed
profile.alwaysActive
Boolean
🟢 Allowed
profile.apiAppId
String
🔴 Redacted
profile.avatarHash
String
🟢 Allowed
profile.botId
String
🔴 Redacted
profile.customImage
Boolean
🔴 Redacted
profile.displayName
String
🔴 Redacted
profile.displayNameNormalized
String
🟡 Pseudonymized
profile.email
String
Raw example: alice@acme.com
Sanitized example:
🔴 Redacted
profile.image1024
String
🔴 Redacted
profile.image192
String
🔴 Redacted
profile.image24
String
🔴 Redacted
profile.image32
String
🔴 Redacted
profile.image48
String
🔴 Redacted
profile.image512
String
🔴 Redacted
profile.image72
String
🔴 Redacted
profile.imageOriginal
String
🔴 Redacted
profile.phone
String
🔴 Redacted
profile.realName
String
🔴 Redacted
profile.realNameNormalized
String
🔴 Redacted
profile.skype
String
🔴 Redacted
profile.statusEmoji
String
🔴 Redacted
profile.statusExpiration
Long
🔴 Redacted
profile.statusText
String
🔴 Redacted
profile.statusTextCanonical
String
🟢 Allowed
profile.team
String
🔴 Redacted
profile.title
String
🔴 Redacted
realName
String
🔴 Redacted
restricted
Boolean
🟢 Allowed
stranger
Boolean
🟢 Allowed
teamId
String
🔴 Redacted
twoFactorType
String
🟢 Allowed
tz
String
🟢 Allowed
tzLabel
String
🟢 Allowed
tzOffset
Integer
🔴 Redacted
ultraRestricted
Boolean
🟢 Allowed
updated
Long
🟢 Allowed
app_id
String
🟡 Pseudonymized
attachments[]
List of Attachment
🔴 Redacted
attachments[].fallback
String
🟢 Allowed
attachments[].id
String
🔴 Redacted
attachments[].serviceName
String
🔴 Redacted
attachments[].text
String
🔴 Redacted
attachments[].thumbHeight
String
🔴 Redacted
attachments[].thumbUrl
String
🔴 Redacted
attachments[].thumbWidth
String
🟢 Allowed
bot_id
String
🟡 Pseudonymized
bot_profile
BotProfile
🟢 Allowed
bot_profile.appId
String
🟢 Allowed
bot_profile.deleted
Boolean
🟢 Allowed
bot_profile.id
String
🔴 Redacted
bot_profile.name
String
🟢 Allowed
bot_profile.teamId
String
🟢 Allowed
channel_id
String
🟢 Allowed
client_msg_id
String
🟢 Allowed
deleted_ts
String
🟢 Allowed
display_as_bot
Boolean
🟡 Pseudonymized
edited
Action
🟢 Allowed
edited.ts
String
🟡 Pseudonymized
edited.user
String
Raw example: U12345678
Sanitized example:
🟢 Allowed
event_ts
String
🟢 Allowed
is_starred
Boolean
🟡 Pseudonymized
parent_user_id
String
Raw example: U12345678
Sanitized example:
🔴 Redacted
permalink
String
🟢 Allowed
pinned_to
List of String
🟡 Pseudonymized
reactions[]
List of Reaction
🟢 Allowed
reactions[].count
Integer
🟢 Allowed
reactions[].name
String
🟡 Pseudonymized
reactions[].users
List of String
Raw example: ["U12345678","U87654321"]
Sanitized example:
🟡 Pseudonymized
room
Room
🟢 Allowed
room.app_id
String
🟢 Allowed
room.background_id
String
🟢 Allowed
room.call_family
String
🟢 Allowed
room.canvas_background
String
🟢 Allowed
room.canvas_thread_ts
String
🟢 Allowed
room.channels
List of String
🟢 Allowed
room.created_by
String
🟢 Allowed
room.date_end
long
🟢 Allowed
room.date_start
long
🟢 Allowed
room.display_id
String
🟢 Allowed
room.external_unique_id
String
🟢 Allowed
room.has_ended
boolean
🟢 Allowed
room.id
String
🟢 Allowed
room.is_dm_call
boolean
🟢 Allowed
room.is_prewarmed
boolean
🟢 Allowed
room.is_scheduled
boolean
🟢 Allowed
room.media_backend_type
String
🔴 Redacted
room.media_server
String
🔴 Redacted
room.name
String
🔴 Redacted
room.participant_history
List of String
🔴 Redacted
room.participants
List of String
🟢 Allowed
room.thread_root_ts
String
🟢 Allowed
room.was_accepted
boolean
🟢 Allowed
room.was_missed
boolean
🟢 Allowed
room.was_rejected
boolean
🟢 Allowed
source_team
String
🟢 Allowed
subtype
String
🟢 Allowed
team
String
🔴 Redacted
text
String
🟢 Allowed
thread_ts
String
🟢 Allowed
ts
String
🟢 Allowed
type
String
🟡 Pseudonymized
user
String
Raw example: U12345678
Sanitized example:
🟢 Allowed
user_team
String
🔴 Redacted
username
String
🟢 Allowed
created
String
🟡 Pseudonymized
creator
String
Raw example: U12345678
Sanitized example:
🟢 Allowed
id
String
🟢 Allowed
isArchived
Boolean
🟢 Allowed
isChannel
Boolean
🟢 Allowed
isExtShared
Boolean
🟢 Allowed
isGeneral
Boolean
🟢 Allowed
isGroup
Boolean
🟢 Allowed
isIm
Boolean
🟢 Allowed
isMember
Boolean
🟢 Allowed
isMpim
Boolean
🟢 Allowed
isOrgShared
Boolean
🟢 Allowed
isPendingExtShared
Boolean
🟢 Allowed
isPrivate
Boolean
🟢 Allowed
isReadOnly
Boolean
🟢 Allowed
isShared
Boolean
🟢 Allowed
isStub
boolean
🔴 Redacted
lastRead
String
🟢 Allowed
locale
String
🔴 Redacted
members
List of String
🔴 Redacted
name
String
🔴 Redacted
nameNormalized
String
🔴 Redacted
numOfMembers
Integer
🔴 Redacted
pendingShared
List of String
🔴 Redacted
previousNames
List of String
🔴 Redacted
purpose
N/A
🟢 Allowed
teamId
String
🔴 Redacted
topic
Topic
🔴 Redacted
topic.date_set
String
🔴 Redacted
topic.set_by
String
Raw example: U12345678
Sanitized example:
🔴 Redacted
topic.text
String
🟢 Allowed
unlinked
Integer
🔴 Redacted
unreadCount
Integer
🔴 Redacted
unreadCountDisplay
Integer