vishakha-lall / MapBot

A chatbot developed in Python
MIT License
145 stars 108 forks source link

Travis CI Build Status GitHub repo size

MapBot :earth_africa:

Hey! I'm your friendly navigator bot! Try me out, not to brag but I'm FUN!

What I do?

I aim to give users a new way to interact with Google Maps through engaging text-based conversational interfaces.

How old am I?

I'm only a baby bot right now, I need you to feed me with logic, data and inspiration.

What is the motivation behind building me?

The primary motivation of the developers of MapBot is to provide a playground to tech enthusiasts, both beginners and advanced to try algorithms, approaches and ideas while contributing to a real-life project.

What I aspire to be one day?


Are you here for GSSoC 2020?

Check out all related information here


What are some pre-requisites?


Setting Up

How to set me up on CLI?
- Clone the repository - Create the **mapbot** database in mySQL - `mysql -uroot -p -hlocalhost` - Enter root password when prompted - `create database mapbot;` - Verify creation of the database `show databases;` - Unzip the StanfordCoreNLP package in the repository and keep the file paths `stanford-corenlp-x.x.x.jar` and `stanford-corenlp-x.x.x-models.jar` handy. - Run `git update-index --assume-unchanged ENV/.env` - Fill the existing template in `ENV/.env` with the corresponding values following the `KEY=VALUE` format - Install dependencies from `requirements.txt` file. Run `pip install -r requirements.txt` - You're all set up, run the `init.py` file. `python init.py` - It is recommended that you set this project up in a virtual environment to keep the dependencies separated and for easier debugging. Here's how you can do that - 1. [Python](https://realpython.com/python-virtual-environments-a-primer/#why-the-need-for-virtual-environments) 2. [Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html)

How to set me up with an UI?
- Clone the repository - Create the **mapbot** database in mySQL - `mysql -uroot -p -hlocalhost` - Enter root password when prompted - `create database mapbot;` - Verify creation of the database `show databases;` - Unzip the StanfordCoreNLP package in the repository and keep the file paths `stanford-corenlp-x.x.x.jar` and `stanford-corenlp-x.x.x-models.jar` handy. - Run `git update-index --assume-unchanged ENV/.env` - Fill the existing template in `ENV/.env` with the corresponding values following the `KEY=VALUE` format - Install dependencies from `requirements.txt` file. Run `pip install -r requirements.txt` - You're all set up. Execute `python webapp.py` to start up the server. - Visit `http://127.0.0.1:5000/` to interact with your MapBot. - It is recommended that you set this project up in a virtual environment to keep the dependencies separated and for easier debugging. Here's how you can do that - 1. [Python](https://realpython.com/python-virtual-environments-a-primer/#why-the-need-for-virtual-environments) 2. [Conda](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html)

How to deploy on Docker?
#### What are some pre-requisites? (with Docker) - Docker - Take a look at [this](https://docs.docker.com/install/) for detailed installation instructions for Docker on Windows, Linux and Mac systems. - Verify the installations by `docker --version` and `docker-compose --version` #### How to set me up Docker style? - Clone the repository - Fill up the `GCLOUD_API_KEY` in `ENV/docker.env` - Run `docker-compose up` - Visit `localhost:5000` to interact with the deployment

How to set me up on Telegram?
- Clone the repository - Create the **mapbot** database in mySQL - `mysql -uroot -p -hlocalhost` - Enter root password when prompted - `create database mapbot;` - Verify creation of the database `show databases;` - Unzip the StanfordCoreNLP package in the repository and keep the file paths `stanford-corenlp-x.x.x.jar` and `stanford-corenlp-x.x.x-models.jar` handy. - Run `git update-index --assume-unchanged ENV/.env` - Fill the existing template in `ENV/.env` with the corresponding values following the `KEY=VALUE` format - For `TELEGRAM_BOT_TOKEN=`, open your Telegram app and follow [this](https://core.telegram.org/bots#creating-a-new-bot) tutorial on how to create a new bot on Telegram and get your own bot token. Once your token is generated, update the `.env` file in `/ENV` with it. - Find your bot on Telegram using `@bot_username` that you chose, and send the first text to your new bot. Nothing is supposed to happen for now. No worries. - Install dependencies from `requirements.txt` file. Run `pip install -r requirements.txt` - You're all set up, run the `telegram.py` file. `python telegram.py` and converse with your bot in real time.

How to set me up on Slack?
- Clone the repository - Create the **mapbot** database in mySQL - `mysql -uroot -p -hlocalhost` - Enter root password when prompted - `create database mapbot;` - Verify creation of the database `show databases;` - Unzip the StanfordCoreNLP package in the repository and keep the file paths `stanford-corenlp-x.x.x.jar` and `stanford-corenlp-x.x.x-models.jar` handy. - Run `git update-index --assume-unchanged ENV/.env` - Fill the existing template in `ENV/.env` with the corresponding values following the `KEY=VALUE` format - Follow the steps prompted [here](https://api.slack.com/apps?new_classic_app=1) to create a **classic** slack app. Navigate to **Basic Information** section of the slack app. Under the **Add features and functionality** subheading click on **Bots**. Click on **Add Legacy Bot User** and enter the **display name** and **default username** of your bot. Navigate to **Basic Information** section of the slack app on the sidebar and copy the **Client ID** and **Client Secret** and then paste these to the `ENV/.env` file as: `SLACK_CLIENT_ID=` and `SLACK_CLIENT_SECRET=`. Navigate to the **OAuth & Permissions** section. Under the **Redirect URLs** subheading add `http://localhost:5000/post_auth`. - Install dependencies from `requirements.txt` file. Run `pip install -r requirements.txt` - Run `python app.py`. The server will start at your localhost. Navigate to `http://localhost:5000/begin_auth`. Click `Add to Slack` button. Select the workspace from the top right and hit `Allow`. Successfully completing this step would automate the creation of `SLACK_BOT_TOKEN` in the `ENV/.env` file. - In another terminal, run `python slackbot.py`. - Open the workspace in Slack and invite the bot to the channel: `@YOUR_BOT_DEFAULT_USERNAME` message in the channel. Click on **Invite to Channel**.

How to set me up on Facebook Messenger?
- Clone the repository - Create the **mapbot** database in mySQL - `mysql -uroot -p -hlocalhost` - Enter root password when prompted - `create database mapbot;` - Verify creation of the database `show databases;` - Unzip the StanfordCoreNLP package in the repository and keep the file paths `stanford-corenlp-x.x.x.jar` and `stanford-corenlp-x.x.x-models.jar` handy. - Run `git update-index --assume-unchanged ENV/.env` - Fill the existing template in `ENV/.env` with the corresponding values following the `KEY=VALUE` format - Create Facebook app from [here](https://developers.facebook.com/). Fill out basic information. - Set Up **Messenger** option under Add a Product. - Generate the **Access Token** by creating a facebook page for your bot by clicking on **Create New Page** button. - Click on **Add or Remove Pages** and add your facebook page just created. - Click on **Generate Token** and copy the token to the `ENV/.env` file as `ACCESS_TOKEN=`. - Install [ngrok](https://gist.github.com/jwebcat/ecaac7bc7ee26e01cd4a). - Open a terminal window, type `ngrok http 5000`. Once you do this, a screen will appear with a link after the “Forwarding” section — make sure to copy the link that begins with “https”. - Click on **Add Callback URL** under **Webhooks** section. Paste the above link in the **Callback URL**. Add **Verify Token** of your choice. Copy Verify Token you added in the `ENV/.env` file as `VERIFY_TOKEN=YOUR_VERIFY_TOKEN`. Hit **Verify and Save** - Click on **Add Subscriptions**. Check **messages, messaging_postbacks, message_deliveries, messaging_pre_checkouts** boxes. - Run `python app.py` - You can interact with bot on Facebook Messenger.

How do I work?

The /analysis folder contains data files for the project. The sentences.csv contains the base training dataset which is used to classify the user's input into three classes - Statement, Question, and Chat. Going through some examples would clarify the difference between statement and chat. The featuresDump.csv is the result of text pre-processing done using the code in features.py and featuresDump.py.


Want to see me in action?

Here's a Medium article with the some superficial explanations, there are some video links too!