Skip to main content

Creating a basic bot

At this stage, we will create a bot that will respond to simple client phrases. To messages Hi and Bye the bot will respond with a Hello hello and Bye bye. In addition, we will provide the bot action in response to other client messages.

Project creation and setup

Let’s start creating a simple bot by logging on to the platform and create a new project.

A project is a bot script connected to several channels. A script is a business logic that the bot executes.

After authorization, you will be redirected to the main JAICP page. Click + Create project.

You will see four ways of creating a project. Choose Use template.

Fill in key fields to set up the project:

  • Name — a project name.
  • NLU language — the language the bot will understand.
  • Template — the default project for NLU. The template contains a simple bot script, whose work will be considered in this tutorial.
  • Store in an external Git repository — leave this option disabled to keep the project in the local storage of JAICP.

Click Create project.

Algorithm of creation

  1. After you have created a project, the project page appears. If you have any other page opened at the moment, you can open the project by:

    • selecting it from the drop-down list on the top navigation bar;
    • proceeding to the main JAICP page and selecting it in the My projects section.

Project administration

  1. Click EditorCode on the control panel.


Here is a bot script from a template. Pay attention to the project directory, it contains:

  • File chatbot.yaml contains the project descriptor and is located in the root folder of the project.
  • Folder src, which contains the file with the basic script of the bot This folder may also contain files with additional scripts, dictionaries in .csv format and scripts in .js format.
  • Folder test contains tests in .xml format to test the bot script.
Read more about bot project structure

To add a folder or file, select a directory, then right click in the box to the right of the control panel. Or use the icons above the area with files.

add folder

On the right side of the screen there is a file editing area.


  1. The chatbot.yaml file contains project configuration parameters:
# Project name
name: echo-bot
# Entry point

# NLU parameters:
botEngine: v2 # Bot engine version
language: en # Bot language

phrases: 0.2
patterns: 0.2
Read more about configuration file setup and NLU
  1. The src folder contains the file, which contains the bot script:
require: slotfilling/
module = sys.zb-common
theme: /

state: Start
q!: $regex</start>
a: Here we go!

state: Hello
intent!: /hello
a: Hello hello

state: Bye
intent!: /bye
a: Bye bye

state: NoMatch
event!: noMatch
a: I did not understand. You said: {{$request.query}}

At the beginning of the script under the tag require we connect an additional module sys.zb-common and slotFilling. In this example, they are not used, but are part of a template script.

Read more about working with modules and slot-filling

The script describes the bot’s transitions from one state state to another depending on the client’s response.

Next, let’s consider the key units of the NLU core — intents, and then move on to the algorithm of processing client requests.


Intent is a key unit of the NLU core, combining a set of phrases, client’s intention and other meta-information.

To view the intents settings, go to the NLUIntents tab on the control panel.


Simple intents are set through a set of phrases. The intent creation algorithm is simple: we set the intent name and then create a set of training phrases to which the bot will react. You can also set automatic bot answers with slot filling.

The current bot script contains two simple intents /hello and /bye. The words Hello and Bye are specified in the field Training phrases. In this way, the bot will determine the client’s intention and move to the appropriate state.

To make the bot better understand its clients, add more phrases to the Training Phrases field. The more phrases there are, the more likely it is that the bot will correctly detect the client’s intention. In this case it is important to use different expressions.

Script structure

Let us consider the process of executing this script:

  1. The script is started and the bot sends a message Here we go!. The client message processing includes the start start and end states of the NoMatch dialog box.

    When the bot is started, the first request is the default regular expression /start. To process it, the state start is required. If it does not exist, the bot will find a state that responds to any text input, or it will display an error in processing the request.

  2. The client enters the message Hello or Bye and receives a corresponding reply from the bot Hello hello or Bye bye.

    The global tag intent! allows you to move a dialog to a given state from any other state. For example, the client has entered the message Bye, the request will get to the state Bye, because the intent has been activated.

  3. It is worth remembering that people can make mistakes when typing commands and send the bot a text that differs from all the considered options. For this purpose, the NoMatch stage is used, which processes the end of the script in case the client message does not fit any of the described stages.

    When the client enters a message, for example, How is it done?, the event noMatch is activated, which is specified under the global tag event! in the NoMatch stage. The bot sends a message I do not understand. You said: How is it done?

Read the tags in more detail in the DSL section

Now let’s go to bot testing and channel creating.