This application was inspired by everyone attending HackUCI! :) We noticed the amount of people asking common questions such as “Where can I park?” or “What are some quiet study places on campus?” in the HackUCI Slack channel. We were also asked similar questions in person by several attendees of a different event happening at UCI. Having a quick and easy way to have these questions answered would be super convenient, both for event organizers/volunteers and event-goers!
What it does
Users can request a category and an adjective to describe what they are looking for in that category, and our application will text back a response. For example, users can text “good food” and it will text a list of all the good food places on campus!
How we built it
Our application primarily revolves around the Twilio API, as its main purpose is to answer questions sent through text. We used Flask for our backend, and Firestore as a database for all of our answers/general information (we accessed it to create our text replies). Google App Engine was used to deploy the server through which we would send and receive our Twilio API calls on.
Challenges we ran into
During our use of the Google Maps API, we had trouble downloading the packages into our virtual environment. We were missing modules that we needed to import, but we figured out that it was due to having multiple versions of Python installed.
Initially, we had wanted to use Google’s Natural Language Processing API in our project, but ran out of time to properly implement it. We also had some issues integrating the database, Twilio API, and the NLP part in an efficient way.
When we first attempted to create a Firestore database, we had a lot of trouble initializing the database. There were a lot of steps that were required prior to actually starting the database, and it was easy to get lost in the steps. One of the the methods you can take to initialize a database is to generate a service account file that you keep in the same directory as your scripts. The problem with this, however, is that the security credential needs to be kept private and we needed to find a way to use firebase without including the service account filel in the github. We eventually learned that we could use the default service account to accomplish the same task, eliminating the need to keep private keys in the directory.
We also spent a long time trying to figure out how to deploy our Google App Engine. We kept getting gateway and server errors, and had a hard time figuring out what was wrong. We ended up learning about the error log on google cloud console, which helped us a lot in debugging our app.
Accomplishments that we're proud of
It was our first overnight hackathon, so we are all proud of being able to complete a finished product. All of us learned about new platforms and were able to successfully implement it in our project.
What we learned
We learned how to use the Twilio API to send and receive text messages from a Twilio phone number, as well as how to reply to users based off the content of their texts. In order to make the API functional, we also had to set up a server to receive and reply to messages. Thus, we also learned how to set up a server locally and safely open up our local application to the internet using ngrok. The ngrok tunnels are not utilized in our final project, (we used App Engine instead) but they were helpful for debugging and testing our Twilio API during its early stages! (Joyce)
In order to create a database of the various places on campus, we learned how to use Google Firebase Firestore. Although we used Firestore with Python, a language that is familiar to us, we still learned a lot about creating projects through Firestore. We had to learn how to initialize a Firestore database using Google Cloud Platform, and then add data to that database. We also learned how to retrieve data from the Firestore database and search through this data for the user’s desired search criteria. This is definitely something that we think would be useful for future projects.
We attempted to utilize the Google Maps API to send map directions to users when they asked for a location. Even though we were unable to integrate it into the final product due to time limitations, we learned how to use the API in order to send an SMS of a map link. During our process, we learned how to download packages and use virtual environments. Similarly, through our attempt to work in Google Natural Language in our app, we learned a lot about how it works and even got it to work on a separate test project (couldn’t get it to work with our main product however).
Lastly, we learned how to deploy a Flask app on Google App Engine. It took us a while, but we eventually learned how to read error logs and figure out what was wrong with our app, to get to our final product of a successfully deployed app.
What's next for AntHelper
In the future, we hope to integrate the Google Maps system, allowing the user to find the nearest restaurant and study space given the user’s location. We also want to be able to send a google maps link for directions. Currently, we only support restaurants and study spaces, but we hope to expand to bike and hydration stations, restrooms, parking spaces, and dorms/housing. During this development process, we attempted to implement Google’s Natural Language API, but we weren’t able to successfully integrate it into the program. However, we will tackle this challenge in the future.