Have you ever wanted to have your personal assistance who could talk on your behalf when you are not active on facebook? This tutorial I’ll tell you how you can build one for yourself with just 20 lines of Python code. You just need some basic understanding of Python, APIs and OOPs concepts.
We will be using Python3 as our programming language. Then to connect the chatbot to facebook we will use a python package called ` fbchat` and to get the replies we will use Dialogflow service provided by Google.
Let’s first install all the dependencies (make sure you have Python and PIP already installed) -
fbchat
-
pip install fbchat
apiai
to interact with its api, to install use -
pip install apiai
Let’s first import all the packages and modules that we’ll be needing -
from fbchat import Client,log
from fbchat.models import *
import apiai,json
We will be extending the Client
class which will help us in logging in and out, reading and sending messages to facebook and the log
class will help us to print to the terminal so that we can understand what is going on.
The apiai
will send request and receive json response from Dialogflow API and the json
module will decode that response and take out the required data.
Now we will create an instance of class Client, I have named it techytushar, you can name it whatever you want :
class techytushar(Client):
Then inside this class we will define two methods apiai
(which will be used to set up the connection to Dialogflow) and onMessage
(the code which will run when a message is received).
apiai :
def apiai(self):
self.ClientAccessToken = 'dialogflow api'
self.ai = apiai.ApiAI(self.ClientAccessToken)
self.request = self.ai.text_request()
self.request.lang = 'de'
self.request.session_id = "<SESSION ID, UNIQUE FOR EACH USER>"
The ClientAccessToken
will contain your Dialogflow access token. ai
will be used to set up the connection and the requests are used to send the text request to get the reply. (refer to the Dialogflow api documentation). Note that the whole code is indented, that’s because it is placed inside a class.
onMessage :
def onMessage(self, author_id=None, message=None,thread_id=None, thread_type=ThreadType.USER, **kwargs):
#marking the message as read
self.markAsRead(author_id)
#printing to terminal as a message is received.
log.info("Message {} from {} in {}".format(message,thread_id,thread_type.name))
#printing message text
print("The received message - ",message)
try:
#setting up connection with apiai
self.apiai()
#sending the query (message received)
self.request.query = message
#getting the json response
api_response = self.request.getresponse()
json_reply = api_response.read()
#decoding to utf-8 (converting byte object to json format)
decoded_data = json_reply.decode("utf-8")
#loading it into json
response = json.loads(decoded_data)
#taking out the reply from json
reply = response['result']['fulfillment']['speech']
except Exception as e:
print(e)
reply = "sorry, techytushar is not available."
#if we are not the sender of the message
if author_id!=self.uid:
#sending the message i.e. the reply string.
self.sendMessage(reply, thread_id = thread_id, thread_type = thread_type)
self.markAsDelivered(author_id,thread_id)
Above is the code for the onMessage
method which will execute when a message is received. It will first mark the message as read, then print the message in terminal, then it will send request to apiai
to get the reply and send the reply to the user. The code is well commented for clear understanding, refer to fbchat
documentation.
Finally we need to log into facebook and start listening for messages:
client = techytushar(<your email>,<your password>)
#listen for incoming message
client.listen()
That’s all, now your chatbot is good to go. Just run the program and ask your friends to talk to your personal assistant. Full code can be found here.