Our team uses Slack internally as our main mode of communication, and we use Confluence to collaborate, document, and share work. We're always switching between the two tools, so we thought - wouldn’t it be helpful if there was a quick and easy way to strike up a real-time conversation, in-line, right from a Confluence page? Confluence comments can be easily overlooked and existing Slack + Confluence apps can get a bit noisy, so we wanted to create a solution that would make it easier for teams to get a conversation started quickly and in their favorite communication tool.
What it does
This app will make it super easy to strike up a conversation in Slack (and potentially other communication tools), directly from Confluence. Simply highlight a username or a specific piece of content to create a Slack message for a specific group or channel.
How we built it
We created a Forge app that works on Confluence by connecting to Slack. We then created a Slack app and added scopes to be able to perform certain actions like reading and writing messages, reading user profiles, using the following Slack APIs: chat.postMessage, users.list, conversations.list, users.lookupByEmail. Currently, the app is set up to filter the slack users by username, and we'd like to eventually be able to filter by email address so it's unique, but that was a limitation we encountered during development.
Here are the steps to set up the Slack app:
- Create a new Slack app at api.slack.com (you can name it whatever you like).
- In the app’s configuration, click on OAuth & Permissions.
- Scroll down to Bot Token Scopes and add the following scopes: Channels:read (View basic information about public channels in a workspace), Chat:write (Send messages as @forgeslack), Users.profile:read (View profile details about people in a workspace), Users:read (View people in a workspace), Users:read.email (View email addresses of people in a workspace)
- Click Install app into Workspace at the top of the page and install the app into your workspace.
- Copy the Bot User OAuth Access Token.
- Invite the bot to the channels you chose to send any message from Confluence, by typing /invite @ in the appropriate Slack channel.
- Install the app on the desired Confluence instance. Provide the instance URL for the app to be installed
- Go to Admin section of your instance -> Slack API Token Configuration (development) in left menu -> Enter the bot token copied in step 5 above and submit.
Note: on the first install, it will ask permission to allow the Forge app to read/write confluence content.
Challenges we ran into
When building this app, the team did encounter a few challenges along the way:
- The team was completely new to forge and also slack APIs. This gave us an opportunity to learn and execute.
- Initially, we struggled to integrate Slack, but later resolved with further troubleshooting
- We also tried to Slack the content in confluence edit mode, but then stumbled on an open ticket
- We wanted to include the ability to add attachments, images, emojis, etc but it seems to be a limitation from Forge at this moment
- We tried to fetch Slack users using an email address. But fetching email address is restricted in Forge; see this open ticket. We have to filter the slack users to get the desired user which is working but isn't our ideal way of setting this up.
- We wanted to disable a context menu when any user selects @mention user, but this is not supported yet in forge. We did create a suggestion ticket for this feature FRGE-380
Accomplishments that we're proud of
We're proud that we were able to make such a useful app within such a short amount of time. Our team already plans to use it internally and we're hoping to implement some of our future plans to make it even more helpful. We even won the top award at our own internal Appfire hackathon for this app idea!
What we learned
Our team really enjoyed learning how to work with Forge as well as the Slack APIs. It was fun to learn something new!
What's next for Message from Confluence
Here are a few of the ideas we have for the future of this app:
- Integrate with other communication apps like Zoom, Teams, Skype
- Initiate a call from the app (Slack, Zoom, etc.)
- Send to private channels (only public supported now)
- Send to multiple users
- Add emojis and hashtags (limitations with Forge)
- Send Confluence page URL
- Show Slack online/offline status when you highlight username