As part of the 2020 Outreachy summer program, we developed a Slackbot Router project that utilises slash commands to deliver information on different HOT tools to the user. This allows the community to more efficiently access and share data between members and increase productivity.
Planning the Slackbot Router
Slackbot Router is a greenfield project, so we had the opportunity to carefully plan its architecture before starting.
Mainly, we had to plan the project around four (4) considerations:
Maintainability | Scalability | Cost Efficiency | Ease of Contribution
The Slackbot Router must be maintainable and adding new features as well as modifying existing features—whether it’s to fix bugs or to extend functionality—must be as straightforward as possible with the least amount of intervention to other features and parts of the architecture.
This means that features must be independent from each other and the core of the architecture which handles how the app functions—the router—must be able to handle new features and changes without needing to be modified every time.
The project must also be scalable both ways—up to infinity and down to zero—without a significant increase in labour and resources. The app should be as performant with 10,000 people using it as it would with only one user, and the changes needed to accommodate this change in number of users should be minimal. This includes keeping costs associated with building and running the Slackbot Router as low as possible.
And importantly, contributors must find it easy to improve, maintain, and add to existing features to ensure that the project continues to grow.
To make sure we achieved these goals the app is designed so that new features and changes to existing ones will not have any effects on any other part of the app. Code readability, robust documentation, and minimal use of libraries were also a focus so future contributors will be able to jump in the code base and pick up tickets readily and maintainers will spend less time guiding contributors and updating dependencies.
We are also utilising AWS microservices to ensure the application is scalable and to keep costs down. The application is event-based—meaning it only needs to run at the time it is triggered—and lightweight in its use of resources; a serverless architecture is then ideal as it allows us to pay only for the resources that are being used and lowers overhead costs in maintaining the application.
For a full explanation of how the application handles and routes events, visit our docs.
How to use the Slackbot Router
To use the Slackbot Router slash commands, write /name-of-command in the message field of any Slack channel or direct message. Some commands might require you to input in additional data such as a project ID or username. When in doubt, you can use the command /command-help to see a list of all active slash commands and a short description of each. For some commands, you can also type /name-of-command help to see more detailed instructions on how to use them.
The Slackbot Router currently has the following slash commands:
- /health-tm - Checks the status of the Tasking Manager and returns its current status and other statistics.
- /health-leaderboard - Allows users to know if the Missing Maps leaderboard is up-to-date and if not, the amount of time it is delayed.
- /osmcha-stats - Allows users to filter changesets based on project ID or hashtag(s) and returns stats on the changesets including the number of suspicious changesets and a list of flags.
- /tm-stats - Returns information on the Tasking Manager, projects, or users depending on parameters used.
- /command-help - Returns a list, including a short description, of all Slack slash commands that users can use.
You can see more use cases for each command in the docs.
This is only the beginning of this project! We welcome and encourage contributors to help us. Visit the repository and check out the docs for instructions on how you can contribute.
Planned improvements and features for the Slackbot Router can be found in the GitHub Issues of the repo. Request to be assigned a ticket or if you want to create a new command or feature, post a new issue!