Создание бота
На этом этапе мы создадим бота, который будет реагировать на простые фразы клиента. На сообщения Привет и Пока бот будет отвечать Привет привет и Пока пока. Кроме того, предусмотрим действие бота в ответ на другие сообщения клиента.
Создание и настройка проекта
Начнем создание простого бота с того, что авторизуемся на платформе и создадим новый проект.
Проект — это сценарий бота, подключенный к нескольким каналам. Сценарий — это бизнес-логика, которую выполняет бот.
После авторизации вы попадете на главную страницу JAICP. Нажмите на кнопку + Создать проект.
Вам будет предложено четыре способа создания проекта. Выберите способ Использовать шаблон.
Для настройки проекта заполните ключевые поля:
- Название проекта — имя проекта;
- Язык NLU — язык, который будет понимать бот;
- Шаблон — по умолчанию проект для NLU. В шаблоне содержится сценарий простого бота, работа которого будет рассмотрена в этом туториале.
- Разместить во внешнем Git-репозитории — оставьте эту опцию неактивной, чтобы проект сохранился локально в JAICP.
Нажмите Создать проект.
Алгоритм создания
-
После создания проекта автоматически откроется его страница. Если вы находитесь на другой странице, вы можете открыть проект следующими способами:
- выбрав его из выпадающего списка на верхней панели;
- перейдя на главную страницу JAICP и выбрав его в секции Мои проекты.

- Нажмите Редактор → Код на панели управления.
Здесь находится сценарий бота из шаблона. Обратите внимание на директорию проекта, она содержит:
- Файл
chatbot.yamlсодержит дескриптор проекта и лежит в корневой папке проекта. - Папка
src, в которой лежит файл с основным сценарием работы ботаmain.sc. Также в этой папке могут лежать файлы с дополнительными сценариями, словари в формате.csvи скрипты в формате.js. - Папка
testсодержит тесты в формате.xmlдля проверки сценария бота.
Для добавления папки или файла выберите директорию, затем нажмите правой кнопкой мыши в боксе справа от панели управления. Или воспользуйтесь иконками, которые расположены над областью с файлами.
В правой части экрана — область редактирования файла.
- В файле
chatbot.yamlуказаны параметры конфигурации проекта:
# Название проекта
name: echo-bot
# Точка входа
entryPoint:
- main.sc
# Параметры NLU:
botEngine: v2 # Версия диалогового движка
language: ru # Язык бота
nlp:
intentNoMatchThresholds:
phrases: 0.2
patterns: 0.2
- В папке
srcнаходится файлmain.sc, в котором хранится сценарий работы бота:
require: slotfilling/slotFilling.sc
module = sys.zb-common
theme: /
state: Start
q!: $regex</start>
a: Начнём.
state: Hello
intent!: /привет
a: Привет привет
state: Bye
intent!: /пока
a: Пока пока
state: NoMatch
event!: noMatch
a: Я не понял. Вы сказали: {{$request.query}}
В начале сценария под тегом require подключаем дополнительный модуль sys.zb-common и slotFilling. В рассматриваемом примере они не используются, но являются частью шаблонного сценария.
Сценарий описывает переходы бота из одного состояния state в другое в зависимости от полученного ответа клиента.
Далее рассмотрим ключевые единицы NLU-ядра — интенты, а затем перейдем к алгоритму обработки запросов клиента.
Интенты
Интент — ключевая единица NLU-ядра, объединяющая в себе набор фраз, намерение клиента и другую метаинформацию.
Чтобы ознакомиться с настройками интентов, перейдите на вкладку NLU → Интенты на панели управления.
Простые интенты задаются через набор фраз. Алгоритм создания интента прост: задаем имя интента, а затем создаем набор тренировочных фраз, на которые бот будет реагировать. Также можно задать автоматические ответы бота с помощью слот-филлинга.
Текущий сценарий бота содержит в себе два простых интента /привет и /пока. В поле Тренировочные фразы заданы слова Привет и Пока. Таким образом, бот будет определять намерение клиента и переходить в соответствующий стейт.
Чтобы бот лучше понимал клиентов, добавьте в поле Тренировочные фразы больше фраз. Чем больше фраз там будет, тем больше вероятность того, что бот правильно выявит намерение клиента. При этом важно использовать различные формулировки. Например, для интента /привет добавьте фразы Приветики или Здравствуйте. Теперь бот будет реагировать на эти фразы, попадая в стейт Hello.
Структура сценария
Рассмотрим процесс выполнения этого сценария:
-
Запускается сценарий, бот посылает сообщение
Начнем. Обработка сообщений клиента включает в себя стейты стартаstartи конца диалогаNoMatch.При запуске бота первым запросом по умолчанию посылается регулярное выражение
/start. Для его обработки необходимо состояниеstart. Если его не будет, то при запуске бот найдет состояние, реагирующее на любой текстовый ввод, либо выведет ошибку обработки запроса. -
Клиент вводит сообщение
ПриветилиПокаи получает соответствующий ответ от ботаПривет приветилиПока пока.Глобальный тег
intent!позволяет осуществить переход диалога в данный стейт из любого другого стейта. Например, клиент ввёл сообщениеПока, запрос попадет в стейтBye, так как был активирован интент/пока. -
Стоит помнить, что люди могут ошибаться, набирая команды, и присылать боту текст, отличающийся от всех учтенных вариантов. Для этого используется стейт
NoMatch, который обрабатывает конец сценария в случае, когда сообщение клиента не подходит ни под один описанный стейт.При вводе клиентом сообщения, например
Как дела?, активируется событиеnoMatch, указанное под глобальным тегомevent!в стейтеNoMatch. Бот посылает сообщениеЯ не понял. Вы сказали: Как дела?.
Теперь перейдем к тестированию бота и созданию канала.