As spring course registration approaches, I find myself constantly searching up classes and figuring out which classes satisfy which graduation requirements. Often, I find myself trying to view on my phone but it is extremely difficult to navigate the website UI on mobile. This inspired me to create a new and innovative way of navigating Berkeley's course catalogue that is more efficient on mobile devices. As I delved deeper into the chatbot development process, I realized that I didn't need to narrow my chatbot down to only a course finder. I wanted to make a chatbot that could perform a wide range of actions to best support the students here at Berkeley. An all purpose, know-it-all being that could do everything and answer all questions directed at it.

What it does

The chatbot currently has 4 main features. First, it has a help command that displays all of the other features that it contains. Second, it can provide course recommendations to students based on what graduation requirements they need to fulfill. Third, it can set reminders on students' Google Calendars for important events such as midterms and finals. Finally, it can direct students to lecture videos for courses they are taking.

How we built it

We used built the chatbot logic using Javascript and connected it to the Cisco Webex Teams messaging application through Cisco's webhooks. The app is deployed to the web via Microsoft Azure at The website serves as an entry point for the chat bot to connect to the Cisco Webex application. To test the application, we used ngrok to create a temporary URL/tunnel that would expose our local computer (where the chatbot is located during testing) to the Internet. Ngrok provides a much faster alternative to testing web apps because redeploying web apps after every modification is extremely inefficient.

To provide course recommendations, we used Google Firebase to store information about Berkeley courses. It sorts the courses into different categories to allow the user to quickly filter down to the most useful classes. We connected our chatbot to the database using Google's Firebase API to get read access to the course information.

To set reminders on students' Google Calendar, we utilized Transposit to connect the Google Calendar API to an event planning form to automate the event creation process. The form specifies that it should be used to keep track of test dates but it can technically be used to create any type of Google Calendar event.

To direct students to online lecture videos, we attempted to use Eluvio's API to optimize the video sharing process with blockchain technology, dubbed the Content Fabric. However, we were unable to upload our own videos to the Fabric so we created a demo website that uses a sample video from Eluvio.

Challenges we ran into

One of our biggest challenges was deciding what we wanted to create. When we first came into CalHacks, we didn't really have an idea of what we wanted to build. Our main goal was to attend as many workshops as we could to learn new skills. We tinkered around with many different technologies and failed a bunch until we finally decided to focus on one.

Once we finally decided on our chatbot idea, some challenges that we ran into was connecting the Webex application to our chatbot code. Since our bot is running on a local computer it is not accessible from Cisco Webex Cloud Platform. To work around this limitation, we had to create a tunnel between our development environment (local computer) to the Internet. Thankfully, ngrok takes care of this for us. ngrok is a tunneling technology that exposes our local port (which the chatbot is listening to) to the Internet through a randomly generated public URL.

Also, we wanted to utilize official Berkeley API's to retrieve course information, but the process requires going through many bureaucratic gates to receive authorization to use the API. We ended up manually entering some course information to the Google database to run our initial tests and demos. If we were to continue this project after CalHacks, we request access to the Berkeley API and connect it to our chatbot for a more complete database.

We also struggled with learning how to use the API's and how to connect different technologies together. However, after grinding through many online tutorials, we were able to figure out how to make them communicate correctly with each other.

Accomplishments that we're proud of and What we learned

We are most proud of all the skills that we learned here at CalHacks. We learned in-depth how to use Node.js, connect different technologies together using API's, and how to use Git to divide tasks between team members. We gained some intuition and understanding of network architecture through usage of ngrok and Microsoft Azure. We also gained a brief introduction to blockchain and this exposure has definitely piqued our interest in this emerging technology and its potential use cases.

What's next for OskiBot - UC Berkeley Course Recommendation Chatbot

We would like to utilize the official UC Berkeley Classes API to have access to the most complete dataset. We would also like to use Machine Learning algorithms on the roster and signup data for each class to analyze classes more in-depth and create more filters/classifiers. For example, we can use the class registration data to figure out which classes have the highest dropout rate in the first few weeks to help users learn about which classes might be more difficult. We would also like to utilize machine learning to automate newer features and develop more capabilities into the chatbot to make it even more helpful for Berkeley students.

Share this project: