Chatbots simplify the communication between users and the program. Nowadays, innovation in chatbot platforms by combining them with AI and IoT is popularly used to minimize the steps of a process.
Many chatbot platforms are collaborating with data sources to create chat interfaces that can seamlessly provide information to their users. This latest innovation is called open data chatbots. These are great options as they provide immediate responses round the clock.
In this blog, we will implement an open data chatbot that uses Ambee’s accurate weather information to provide a conversational chatbot. This can give you weather alerts on interacting with it.
This chatbot implementation can be divided into three different technology frameworks:
- Ambee Weather API
- RASA - provided ML intelligence in the form of automatic conversation
- React Native - the look and feel of the chatbot feed
1. Weather data
To fetch the weather data, we are using Ambee’s weather API, which allows a user to make API calls. Once the user is authorized, they will be given an API key which can be used to make the call.
2. Rasa
This ML package uses Python for its setup. The following steps need to be followed to create a virtual environment and perform the implementation
pip install rasa
To cross-check that we have installed the package,
pip show rasa.
Ensure that you are in the root directory to initialize the package
rasa init
This initialization is used to train and start the package.
Once the initialization is done, we can see multiple files created in the same directory, which are config.yml, domain.yml, endpoints.yml, and action.yml.
Now we need to customize certain aspects of these files based on our requirements. This simple implementation focuses on providing weather data, so firstly, in the endpoint file, we must uncomment the endpoint so that the chatbot application can be hosted in that particular location.
In this directory, you can also see a file named nlu.md.
NLU is Natural Language Understanding which deals with comprehending what needs to be done.
In this file, we will add the possible ‘intents’ so that once the model comes across this user input it will know the respective output to deliver.
## intent:ask_weather
- what is the current weather
- may i know the weather
Based on how we want the chatbot to respond, we can make custom changes to domain.yml in the following manner
intents:
- greet
- goodbye
- ask_weather
actions:
- action_ask_weather
response:
utter_greet:
- text: "Hey! How are you?"
utter_goodbye:
- text: “Goodbye”
session_config:
session_expiration_time: 60
carry_over_slots_to_new_session: true
The change made to stories.md consists of the output action to be made.
## weather
* ask_weather
- action_ask_weather
The implementation code exists in actions.py. Find it by typing import Any, Text, Dict, List from rasa_sdk import Action, Tracker from rasa_sdk.executor, import CollectingDispatcher import requests
weather_dict = {'rain': 'It is raining outside.', 'rain_light': 'Light rain around the area.', 'drizzle': 'It is drizzling outside.', 'cloudy': 'It is cloudy outside.', 'mostly_cloudy': 'The sky is covered with clouds.', 'partly_cloudy': 'It is partly cloudly outside', 'mostly_clear': 'Sunny with presence of small clouds.', 'clear': 'It is clear and sunny outside.'}
url = "https://api.ambeedata.com/latest/by-lat-lng"
querystring = {"lat":" {}","lng":"{}",x-api-key = ””}
class ActionAskWeather(Action):
def name(self) -> Text:
return "action_ask_weather"
def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
response = requests.request("GET", url, params=querystring)
result = ""
json_data = response.json()
result += 'Average temperature is %s%s while the humidity is about %s%s.' % (json_data['temp'], json_data['humidity'])
The parameters latitude, longitude and api-key needs to be added based on the case. Once this code has been saved, the rasa model needs to be trained.
rasa train
To perform the action once the request is made on the server,we need to run the command.
rasa run actions
Once the action server is running, to activate the virtual environment, go back to the directory where the files exist and run the command.
rasa run --enable-api --cors "*"
Cors - error handler
3. React-based Chatroom
This section involved the UI of the chatbot. There are multiple UI frameworks that are readily available. Here, the framework created by ScalableMinds has been used by cloning their repository. The only prerequisite for the UI is to have Node.js installed on the system.
When we move to the chatroom-master directory there is a file called package.json. Here we can specify what we are going to use for the UI.
"prepare": "npm build",
Then, we install the necessary modules,
npm install
The CSS and HTML files pre-exist within the chatroom-master directory. Note: Before you build the files, make sure that you are using port 5005 for the Rasa Server.
To build the files, we should run the following command
npm run build
Once the code has been built, a minimal version ‘dist’ gets created and the output of all the HTTP server URLs is displayed. Open the index.html on that localhost and it loads the chatbot interface that can now be tested. Finally, based on the intent that we have specified in the domain.yml, it can generate answers to only those questions in real-time.