Free trial

Creating a Chatbot-Based Reservation System with Pandorabots

Pandorabots logo

If you’ve ever shopped online, created a playlist with Spotify, or tried to learn a new language with Duolingo, or chatted on WhatsApp, you’ve interacted with a chatbot. In addition to being used by industries as wide ranging as news sites, retail, and real estate, chatbots have also become quite popular. According to a recent survey by Forbes, 62% of consumers in the U.S. like using chatbots. 

Given the prevalence of chatbots and our love of technology, we decided to create a bot-based system, using natural language processing (NLP) to automate a familiar and person-to-person task — a bot-based reservation system. In addition to creating a system that provides value by saving time and money, we also wanted to create something that could create a positive customer experience and potentially boost customer satisfaction.

Because we are advocates and users of open standards, we used Pandorabots, an AI company that provides a free, online web service for building and implementing chatbots using AIML (Artificial Intelligence Markup Language). With more than 275k registered developers, Pandorabots (PB) is one of the oldest chatbot hosting services in the world. The platform provides a web user interface for creating AIML files and structures, test environments, logs, statistics, and many other features, such as APIs for manipulation or communication with the bot. 

In order to work with PB’s API, you need to activate a Developer or Pro account, which you can use in a 14-day, free trial. To understand AIML structure, Pandorabots offers free AIML courses on In addition, their documentation is well-written, and we always found everything we needed, including how to work with their API. We found that the courses on were very clean and helpful.

Our Approach to Implementation

As illustrated in the following diagram, example technologies for implementation include PB with AIML for creating a chatbot, Google Calendar API for getting and creating events, and a Flask-RESTful framework as a BE service for communication with both APIs and for resending messages to end-users:

Architecture our application

AIML is an XML-based markup language which defines the personality of a chatbot. AIML is easy to understand and to maintain. It took me around 3 hours to understand the basic structures I needed.

Example of the AIML

We used Flask with the extension of a Flask-RESTful framework, which let us quickly build a REST API.

Why did we choose this approach?

Because the Pandorabots architecture lets us implement the integration BE (backend system) service as stateless for the client communication session, we don’t need to store the context, because all data is stored on their side. Data from user input, like a date or the name of an appointment is also stored in each user’s chat session, so each chat room is independent of others. Another reason was that we needed a simple solution that solves AIML, that is developer-friendly for a faster understanding of the general structure of AIML.


We wanted to fully utilize the possibilities of the AIML for communication between the client and the bot, as well as for communication between the bot and the BE. For that, we added custom AIML tags to the answers from Pandorabots, like XXGE, XXGR, XXCE, and so on. We listened to these tags on the BE and triggered specific actions in Google Calendar, as shown in the following sequence diagram:

For example, if the BE receives XXCE in a PB response, it will call the Google Calendar API to create a new event in the calendar. If the event is created successfully, our BE will talk to PB again with tag XXCEOK, and forward the preformatted response back to the client when something fails our BE return XXCEFAIL. This tag will be sent to PB again, and will return the relevant answer for this tag. If BE gets tag XXGE, it will ask the Google Calendar API for data, and replace the tag in message with returned data and forward response. Here is an excerpt of the AIML and Flask API code: 

      <pattern>^ BOOK ^ APPOINTMENT ^ TODAY ^</pattern>
      <template>Available time slots <set name="year">
format="%Y"/></set>.<set name="month">
format="%m"/></set>.<set name="day">
            <date format="%d"/></set> are:XXGE{"day":"
            <get name="day"/>","month":"
            <get name="month"/>","year":"
            <get name="year"/>"}Select time 
      <template>Something is wrong, try it again.</template>
      <template>At this time, we are closed.</template>
      <pattern>^ CREATE ^ APPOINTMENT ^ TODAY ^</pattern>
      <template><srai>BOOK APPOINTMENT TODAY</srai></template>
      <pattern>^ CREATE ^ RESERVATION ^ TODAY ^</pattern>
      <template><srai>BOOK APPOINTMENT TODAY</srai></template>
      <pattern>^ MAKE ^ RESERVATION ^ TODAY ^</pattern>
      <template><srai>BOOK APPOINTMENT TODAY</srai></template>

AIML structure

Flask API code

Advantages and Disadvantages of Our Approach

Our approach has specific advantages, but also disadvantages. One advantage is good maintenance. This is easy, because PB logs all activities. Also, adding any communication platform as a client should be simple with our REST API. 

AIML capabilities allow acceptance of several, different inputs, such as “Create an appointment for me,” “Make a reservation for me,” and “Book a visit for me,” that will be redirected to a single, specific action in Google Calendar. Several AIML files are publicly available and can be used to extend our conversation bot. This lets us easily extend the bot’s general conversation capabilities. Furthermore, when we need to update any response, it is really easy to do so.

As for disadvantages, the time response of PB API, which is between 600–2400 ms. For example, consider a user request which triggers two calls to the PB API, as well as calls to Google Calendar API. This may cause increased latency time. This is probably not a big deal, as people are used to waiting for an answer during the usual conversions on messaging platforms.

As the number of clients increases, monthly costs also will be higher. It also causes a restriction of the number of messages per month. If you are considering a high load, you probably could invest in your own implementation of AIML, using available Python libraries. 

Potential Improvements/Features

Extending our project in the future is possible with many features. One of the most important improvements can be working with multiple customers on our BE, as we are currently working with only one customer. After adding the aforementioned feature, we can consider adding a UI for customers that could include allowing access and authentication with Google Calendar, setting up open hours, adding to a messaging platform, and so on.

Also, we didn’t implement a connection with any communication platforms like Facebook Messenger or Slack. However, each platform that offers communication via an API should be simple to add, as mentioned above. We also could add additional reservation platforms, instead only using Google Calendar.

Another idea to improve the product is better time management. For example, to set up opening hours and the length of the booking, as bookings are currently only in 60 minute intervals. We could change bookings to intervals of every 30 or 15 minutes.

The following images show the communication between client and bot. The first one shows communication between client and bot on the left side and backend communication in Pandorabots on the right. You can see a more complex client – bot communication on the second image:


After exploring the options, we decided to use PB with AIML to build a chatbot that integrates with the Google Calendar. Working with PB and AIML was pretty intuitive. Machine learning could be an alternative. In order to create a chatbot based on ML, we would need a huge dataset, training, and advanced knowledge. It won’t be as easily customizable as with AIML. Also, performance is on the AIML side, because with increasing robust latency, time will be constant.

Even though this was my first experience with PB, I was able to ramp up pretty quickly, and intuitively navigate the PB UI and the developer documentation. The AIML structure was also easy to understand. As a result, I was able to quickly create and adjust the chatbot.

aiml chatbot pandorabots

Leave a Reply

Related articles


Let’s make LLMs generate JSON!

In this article, we are going to talk about three tools that can, at least in theory, force any local LLM to produce structured output: LM Format Enforcer, Outlines, and Guidance. After a short description of each tool, we will evaluate their performance on a few test cases ranging from book recommendations to extracting information from HTML. And the best for the end, we will show you how forcing LLMs to produce a structured output can be used to solve a very common problem in many businesses: extracting structured records from free-form text.

Notiondipity: What I learned about browser extension development

Me and many of my colleagues at profiq use Notion for note-taking and work organization. Our workspaces contain a lot of knowledge about our work, plans, or the articles or books we read. At some point, a thought came to my mind: couldn’t we use all this knowledge to come up with project ideas suited to our skills and interests?

From ChatGPT to Smart Agents: The Next Frontier in App Integration

It has been over a year since OpenAI introduced ChatGPT and brought the power of AI and large language models (LLMs) to the average consumer. But we could argue that introducing APIs for seamlessly integrating large language models into apps developed by companies and independent hackers all over the world can be the true game changer in the long term. Developers are having heated discussions about how we can utilize this technology to develop truly useful apps that provide real value instead of just copying what OpenAI does. We want to contribute to this discussion by showing you how we think about developing autonomous agents at profiq. But first a bit of background.