How to code your own chatbot in Python
Tags: ai, python, programming, tutorial
Published: 2024-02-17 17:26:07


AI or Artificial Intelligence can be so advanced that it can be in self-driving vehicles capable of navigating through busy streets, personal virtual assistants who answer our questions and have conversations with us, and ways to systems capable of recognizing diseases in medical images. AI can be really complicated, even in the most simplest things like chatbots.

But there is a way to create your own chatbot without all of the fancy APIs or know a lot about AI. All you need is an email, and some basic knowledge in Python.

##How To Create Your Own Chatbot

Creating your own chatbot is a lot simpler than you might imagine. It doesn't take thousands of lines to code; possibly less than 200 lines.

[Nanohub](https://nanohub.org/) makes it easy to create your own chatbot. A student created a template for you and all you have to do it tweak it slightly to personalizes your chatbot.

**Don't worry if you don't know a lot of Python or even at all**, the student made it easy to know what you are doing, and I will even help you too.

###The Setup
The setup is most likely the hardest part of the whole process, so make sure to follow me step by step.

####1) Make an account

Go to [nanohub.org](https://nanohub.org/) and create your account.


![The login/signup screen](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86ev35xu1qmpu5a91nyh.png) 
######Your screen should look like this

Once you quickly make you account, you should be on the dashboard:

![Nanohub's Dashboard](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tn9eyduc0ostts1w5fpc.png)
######Your dashboard should look similar to this

####2) Start a new session
Go to "My Tools" section on the most right-hand side of your dashboard.

![An arrow pointing to the "My Tools" section](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ki2hqjdhe0wjr91aefdu.png)

Then click on the subsection "All Tools".

Now search and favorite (by clicking on the heart) this tool:
#####Jupyter Notebook (202105)


![My cursor is about to favorite the tool Jupyter Notebook (202105)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ag3ko218t6myypy14ejw.png)

Click on Jupyter Notebook (202105) and it should take you to this screen:

![A GIF of me clicking on Jupyter Notebook (202105)](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pzursjbqdmcf0m7w59a6.gif)
######When you click on the tool, it should take you to that screen

Now, click on **_Launch Tool_** (It should take a while)

####3) Upload and start your tool

After awhile, you should be on this page:

![Jupyter Notebook (202105) Page](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7rfyiuggy5hafefh1mut.png)
######You won't see any files if this is your first time on Nanohub. I have used it before, that's why you can see these files.

Now, click this link to download your chatbot template: [Download File](https://drive.google.com/uc?export=download&id=1tjxwxCSshrrkliECodYGXFHSifj3k12Z).

Once your file has finished downloading, click on the "Upload" button.

![An arrow pointing to the "Upload" button](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/87ovukuyholv6vs1s3k8.png)

Once you have uploaded, you should see a new file on your screen:

![A red-outlined box of the newest file I have just uploaded](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/v156k96s3rar1ykoe11p.png)

Click on the file you have just uploaded and then **you are officially done with the setup**.

#####NOTE: Make sure to delete the error in the code:

![ a GIF of me deleting the error inside the code](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3hq82s738rsr234zkg6z.gif)

###The Personalization Part
The best part! You could spend hours or even days on this part, so below, I will give you some suggestions and how to code them.

####1) Complete the TODOs
If you just want to do some simple tweaks, there are a bunch of "TODO" comments for you to complete. You don't have to do it all, but they help you know what to do and personalize.

#####Example


![A GIF of me changing h=the name of the chatbot](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dwhehts5oi3adbbngzd3.gif)

**Code:**

```
name = "The Best Bot"
```

####2) Customize the responses
If you look deeper into the code, you will see some responses.

For example, this is one response to when you say "how are you?":

```
"how are you?": [ 
"I am feeling {0}".format(mood),
"I don’t ever wanna feel like I did that day, take me to the place I love, take me all the way",
"Eh, with the birds I'll share this lonley view, scar tissue that I wish you saw."
"{0}! How about you?".format(mood), ],
```
You can edit responses or even add some more responses that matches your chatbot.

#####Example

![A quick GIF on how to add a response](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wwr8ykg99zxc0lgfie70.gif)

**Code:**

```
"what is 2 + 2?": [
    "2 + 2 = 4",
    "I don't know, {0}!".format(user_name),
    "Easy, 2 + 2 = 5!"
],
```
   ...
```
def user_intent(user_input_text):
    #if user_input_text is empty, no need to check for user intent.
    if len(user_input_text) == 0:
        return ""
    
    #this next command changes creates a list of lowercase words from input
    x_text = user_input_text.lower().split()
    #y_text is the intent keyword written exactly as in responses.
    y_text = ""
    
    #TODO: use this construct if you have many keywords for one intent.
    #the values in square brackets are your possible keywords
    if any(True for x in x_text if x in ["hello","hi", "hey", "greetings"]):
        y_text = "Hello"
        
    elif any(True for x in x_text if x in ["bye","goodbye", "exit", "done"]): 
        y_text = "Bye"

    #TODO: use this construct if you have only one keyword for one intent.
    elif "from" in x_text: 
        y_text = "Where are you from?"
        
    elif "born" in x_text: 
        y_text = "Where were you born?"
        
    elif "name" in x_text: 
        y_text = "what's your name?"
        
    elif "can you do" in x_text: 
        y_text = "What can you do?"
        
    elif "weather" in x_text: 
        y_text = "what's today's weather?"
        
    elif "robot" in x_text: 
        y_text = "Are you a robot?"
        
    elif "how are" in x_text: 
        y_text = "how are you?"
        
    elif "feeling" in x_text: 
        y_text = "how are you?"
        
    elif "why" in x_text: 
        y_text = "Why?"
        
    elif "good" in x_text: 
        y_text = "Good"
        
    elif "okay" in x_text: 
        y_text = "Okay"
     #The following code tells the chatbot "if the user says anything about math, do this
    elif "math" in x_text: 
        y_text = "what is 2 + 2?"
    #TODO: Add or remove as many elif as you need, leave this else intact.
    else: 
        y_text = ""
        
    return y_text

```

####3) CHALLENGE: Add an API or a library in your code for a smarter chatbot
This is a little harder than the other two suggestions because I want to challenge my more intermediate audience.

The code already has a library imported:

```
#calling import random will allow Python to use commands in the random library
import random

```
...

```

The code in this cell will get a random message given the intent_keyword
#to send to the user associated with the keywords in the response
#if it cannot find the intent, it will return the default message

def respond(intent_keyword):

    if intent_keyword in responses: 
        bot_message = random.choice(responses[intent_keyword])

    else: 
        bot_message = random.choice(responses["default"])
    
    return bot_message
```
######This code randomizes the responses. That's why you get a different response even if you ask the same question.

You can add another library or API into the code.

#####Example
Maybe try a weather library that gets the actual weather in your city.

> Tell me in the comments what API/library you tried.

##Conclusion
To sum things up, it is pretty easy to create your own chatbot using Nanohub, and you don't even need to know a lot of Python!