Activities
- Create a web server for backend communication
- Implement authorization process between CollabyBot and GitHub account using GitHub’s OAuth API.
- Implement authorization process between CollabyBot and Jira account using Jira’s OAuth 2.0
- Create an event logging process for notifications using MongoDB
- Configure the bot to handle events in messaging apps
- Develop an interactive personal task list tool
- Develop an interactive tool for viewing and scheduling team events/meetings
- Configure the server to handle POST requests from GitHub and Jira to receive notifications
- Create the CollabyBot’s slash commands
- Implement a way for users to configure which GitHub notifications they want to receive
Requirements Gathering
In order to gather requirements for this project, we started by researching a similar app called Axolo which is a Slack-GitHub integrated notification app. We contacted one of the app's developers and scheduled a Zoom meeting to ask questions regarding GitHub OAuth and JSON payloads for configuration files. He provided specific Python libraries and GitHub documentation that would help us and explained how to authorize the Slack app on GitHub.
Second, we created use cases to identify the main features that our app will have and possible ways to implement them.
Third, we did event brainstorming to identify user commands that will trigger certain events in the app. That helped us to identify an approximate timeline of events that users will follow when using our app.
In the future, we plan to keep in touch with the Axolo developer in case we need further help with the technical requirements. We also plan to research the GitHub, Slack, Discord, and Jira API documentation to understand the scope of each API and as guidance when developing CollabyBot.
Top Level Design
- Create a web server for backend communication
- Implement authorization process between CollabyBot and GitHub account using GitHub’s OAuth API.
- Implement authorization process between CollabyBot and Jira account using Jira’s OAuth 2.0
- Create an event logging process for notifications using MongoDB
- Configure the bot to handle events in messaging apps
- Develop an interactive personal task list tool
- Develop an interactive tool for viewing and scheduling team events/meetings
- Configure the server to handle POST requests from GitHub and Jira to receive notifications
- Create the CollabyBot’s slash commands
- Implement a way for users to configure which GitHub notifications they want to receive
Tests
Our testing process for CollabyBot will consist of functional testing and performance testing.
Functional
- The UnitTest and PyTest Python libraries will be used for testing methods and classes to ensure that the bot functions properly.
Performance
- FunkLoad will be used to perform stress, load, and performance tests on our web server.
Detailed Design
- Create a web server for backend communication
- Web server will handle all GET and POST requests sent by GitHub, Jira, and Slack
- Implement authorization process between CollabyBot and GitHub account using GitHub’s OAuth API.
- Users will be redirected to GitHub OAuth App to enter credentials and grant permission to the CollabyBot
- Then they will be redirected back to messaging app upon successful authorization
- Implement authorization process between CollabyBot and Jira account using Jira’s OAuth 2.0
- Users will be redirected to the Jira login page to enter credentials and grant permission to the CollabyBot
- Then they will be redirected back to Slack upon successful authorization
- Create an event logging process for notifications and store them in MongoDB
- Every time the web server will get any type of request, it will be recorded in MongoDB
- In case of unsuccessful notification delivery, the web server will pull up the event log from the database and resend the notification to the user
- New events are sent to the user via the bot and stored in MongoDB. The listener should disconnect after a period of inactivity or if terminated.
- A set amount of recent events are cached to be shown to the user upon request without fetching from the database
- Develop an interactive personal task list tool in messaging app
- Users can create a new list by messaging CollabyBot
- After creating and naming a list, users can add new tasks with the /todo command
- Lists will be made interactive with Block Kit or other UI
- Develop an interactive tool for viewing and scheduling team events/meetings
- User will be able to open the team’s calendar on slack and see scheduled meetings
- Whenever the team wants to schedule a meeting
- Configure the server to handle POST requests from GitHub and Jira to receive notifications
- The server domain will have URLs to receive JSON payloads from GitHub and Jira
- The URLs will be registered with GitHub and Jira as webhooks
- Create the CollabyBot’s slash commands
- The bot will support slash commands for fetching notifications from GitHub and Jira
- Notifications can be filtered by date, the type of event that triggered them, and the username of the user that triggered them
- The bot will show all slash commands when the user sends /commands help
- Users will be able to use /remind, /search, /invite, and other built-in slack slash commands.
- Users will be able to use our custom slash commands such as but not limited to receiving recent tasks in Jira, listing recent pull requests in GitHub and etc.
- The bot will support slash commands for fetching notifications from GitHub and Jira
- Implement a way for users to configure which GitHub notifications they want to receive
- Users can limit notifications to certain event types by messaging CollabyBot
- Every time a user wants to change notification types to receive, CollabyBot will send a checklist message with all the GitHub events that will override the user's previous choice.
- Users will get a success/fail message from the bot after attempting to change notification settings