Social Recommendations — Slack, Neo4j and NeoDash

Setting up a Slack application/API

Before getting into Neo4j, I need to set-up an API within Slack to provide the information needed to complete the dataset. Here I created a very simple API application with the following User Token Scopes

Importing the Slack data into Neo4j

In total 3 calls are required against the Slack API, the first is to retrieve the list of channels within the Slack workspace, the API is limited to only return public channels within the workspace, so any private channels are not included. The second call takes the channelID and retrieves the list of users who are members of the channel; here Slack provides just the users MemberID, so a 3rd call is required to get the actual name and email addresses of the channel members.

Constraints

Indexes

  • CREATE INDEX ChannelName FOR (n:Channel) ON (n.name)
  • CREATE INDEX PersonName FOR (n:Person) ON (n.name)

Importing the data from Slack

As the API calls into Slack require an authorization header to be provided, all the dataloads are completed with the APOC procedure apoc.load.jsonParams, which allows for this information to be passed correctly to the API.

List of channels

First collect all the details of the public channels within the Slack Workspace

Retrieving the list of members

As mentioned above, I now need to retrieve the list of members of each Slack channel. Here I loop against each channelId and make a series of API calls for each channel.

Member details

The final call to make is to get the name and email of each slack user

Gaining value from the collected data.

Whilst importing the data and playing around with the Slack API’s and Neo4j is kind of fun; how can I use this information to bring some value to a team or an individual ?

The organisation view

Team view

Individual view

This is the opportunity to provide some personal recommendations and not just recommendations based on the team, department or location you reside in; but recommendations based on membership of the groups you belong too.

Storing the dashboard

This is very easy, as I can just store the dashboard configuration directly within my Neo4j database, allowing others to both view the results and also review/improve the queries used.

Conclusion

I have to say this was incredibly easy to complete, I started the project thinking I would need some Java scripts to help manage the data loading and sequencing of the API calls against Slack, but the bundled APOC procedure to support API calls with authorization headers made this a very simple and pleasant project to complete. The presentation of the data within NeoDash was also very easy, making this a very low code project.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store