Угадай число
В этом уроке мы изучим основные компоненты Aimylogic, которые понадобятся для создания любого бота. В итоге у нас получится бот, который загадывает случайное число и предлагает пользователю угадать его в процессе диалога.
Поведение бота
Наш диалоговый бот должен загадывать число случайным образом. Далее пользователь выдвигает свое предположение. Если его предположение неверно, то бот должен сказать, больше или меньше число, загаданное ботом, и предложить пользователю попытаться еще раз. И так до тех пор, пока пользователь не отгадает загаданное ботом число. После этого можно предложить сыграть еще раз.
Примеры диалога с этим ботом:
Создание сценария
Зайдите на https://app.aimylogic.com/. Создайте новый аккаунт или войдите в свой аккаунт.
Нажмите «Создать бота или обзвон» чтобы создать новый сценарий:
Дайте сценарию название, выберите русский язык и нажмите Продолжить.
Разработаем сценарий
Бот работает согласно сценарию, который вы разработаете. Вы можете контролировать конкретное поведение бота, внося изменения в сценарий.
- Приветствие
Наш бот при старте должен рассказать пользователю правила игры и предложить сыграть. Чтобы добавить сообщение с приветствием
Стартовый экран — это экран, который находится слева и наверху. Бот всегда будет начинать общение с этого экрана.
Чтобы добавить приветствие, нажмите Текст.
Это создаст блок Текст. Напишем в нем:
Привет!
Нажмите Сохранить, чтобы добавить этот блок.
У нас появился стартовый экран с блоком Текст, в котором сообщение «Привет!».
- Как добавлять название для экрана?
Для удобства добавим этому экрану метку — название сценария.
Для этого кликните на знак # в верхней строке экрана
Введите название экрана:
приветствие
И выберите цвет
Экрану добавлено название:
- Переходим к следующему экрану
Для удобства, чтобы в дальнейшем перенаправлять на экран с предложением поиграть, добавим сюда блок Переход, который будет перенаправлять к следующему сообщению.
Нажмите + БЛОК и выберите блок Переход
| Подробнее о блоке Переход читайте здесь.
- Предложение поиграть
Добавим предложение поиграть в «Угадай число».
Нам нужно, чтобы бот после приветствия перенаправлял на предложение поиграть, для этого мы и используем блок Переход. Чтобы создать связь, кликните на сам блок Переход:
Появится окно выбора блока. Выберите Текст
Напишем в нем:
Сыграем в "Угадай число"?
Назовем этот экран:
играть
- Принимаем ответ пользователя
Добавьте на экран «играть» блок Интенты. Этот блок принимает ввод пользователя. Блок Интенты должен быть на всех экранах, где вы ожидаете, что пользователь что-то напишет.
В Aimylogic уже есть готовые интенты, созданные для вашего удобства. Они содержат популярные фразы, сортированные по намерениям пользователя.
Нажмите Выбрать готовый интент
Выделите готовые интенты — Согласие, Отказ и Прощание:
Нажмите Выбрать
Затем нажмите Сохранить:
Добавим экран «играть» кнопку «Давай!».
Нажмите + КНОПКА, введите текст:
Давай!
И нажмите Enter, либо кликните на свободном месте экрана.
- Загадаем число
Чтобы сгенерировать случайное число, нам понад обится сторонний сервис, который умеет выдавать случайное число по запросу. Таким сервисом может выступить сайт random.org, который умеет генерировать истинно случайные числа и события. У этого сайта есть API, с помощью которого наш бот может получить случайное число. Мы можем использовать этот API с помощью блока HTTP-запрос.
- Нажмите на интент Согласие.
Таким образом мы создадим связь от интента Согласие и определим, что будет делать бот, когда пользователь скажет «да», «хорошо», «давай», «ладно» и т. д.
- Выберите блок HTTP-запрос.
Оформим вопрос следующим образом:
-
Метод GET
-
В поле URL скопируйте и вставьте:
https://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new
В этом URL мы указали, что будем выдавать случайное число от 1 до 100.
Если открыть этот адрес в браузере, то вы увидите, что он просто возвращает некоторое целое число от единицы до сотни. Если перезагрузить страницу, то появится новое случайное число, Как раз то, что нам нужно.
Наш бот должен запросить это число и сохранить его в некоторую переменную, с которой потом будет сравнивать ответ пользователя.
Переменные — это как коробки, в которые мы что-то кладем, какую-то информацию. Для порядка удобно подписать коробки, поэтому каждая переменная имеет свое имя.
В Aimylogic мы пишем переменные используя $
, а затем имя переменной. Регистр имеет значение — переменные $number
и $NUMBER
— это разные переменные.
| Подробнее о переменных читайте здесь.
- На вкладке RESPONSE нажмите +. Скопируйте и вставьте в поля:
Имя переменной:
num
В поле Значение скопируйте и вставьте:
parseInt($httpResponse)
Что здесь происходит?
После HTTP запроса Aimylogic сохраняет ответ сервиса random.org в системную переменную $httpResponse
. Но сервис random.org возвращает текст, а нам нужно целое число, чтобы мы могли сравнивать с ним число пользователя (строка и число — разные типы данных в JavaScript). Поэтому нам нужно сначала преобразовать текстовый ответ сервиса в целое число. Для этого в JavaScript есть функция parseInt, которой мы и воспользуемся.
Передадим в функцию parseInt
весь ответ от сервиса — так мы преобразуем строку в число. Затем мы записываем это значение в переменную, которую указали в поле? и сохр аним его в переменную $num
.
-
Поля BODY и HEADERS заполнять не нужно.
-
Нажмите Сохранить
- Назовем этот экран:
запрос
- А теперь угадывай!
Бот получил случайное число. Теперь бот должен вывести пользователю сообщение о том, что число загадано, и пригласить пользователя угадать число.
- Кликните на вариант Завершен успешно блока HTTP-запрос и создайте блок Текст. В нем напишите:
Я загадал число от 1 до 100. Угадай, какое!
- Назовем этот экран:
загадал
- И добавим на экран «загадал» блок Переход:
Вот что у нас получается:
- Примем ввод пользователя
-
От блока Переход создайте новый блок Интенты.
-
Нажмите Создать интент. Скопируйте и вставьте:
* $NUMBER *
$NUMBER
— системная переменная, которая принимает числа. При этом числа можно называть как цифрами — 1, 3, 99, так и словами — один, три, девяносто девять.
Звездочки означают, что перед и после $NUMBER
могут быть любые слова. Таким образом, бот сможет понять, если пользователь скажет что-то вроде «Наверное, пять». Бот достанет оттуда «пять».
| Подробнее о звездочках и других способах принимать ввод в интентах читайте в статье о синтаксисе шаблонов.
- Затем нажмите ВЫБРАТЬ ГОТОВЫЙ ИНТЕНТ и выберите готовые интенты — Согласие, Отказ, Приветствие, Прощание.
Таким образом, мы предусматриваем различную реакцию пользователя, и далее скажем боту, что делать в ответ на такие реплики.
-
Нажмите Выбрать и Сохранить
-
Назовем этот экран:
прием ввода
Вот что у нас получилось:
Мы вывели блок Интенты на отдельный экран, чтобы было удобно перенаправлять сюда в дальнейшем.
- Проверяем диапазон числа
Нам нужно убедиться, что пользователь ввел число, которое не больше 100 и не меньше 1.
- Нажмите на интент
* $NUMBER *
и создайте блок Условия.
Блок Условия используется, когда нужно добавить нелинейности в диалог. Вы можете написать строку JavaScript-выражения в строку условия. В зависимости от выполнения того или иного условия бот переходит на разные экраны. Если условие в блоке Условия выполняется (если оно «true»), то бот переводит согласно связи от этого выражения. Если не выполняется ни одно выражения (они все «false»), то бот проверяет выражения ниже. Если ни одно из выражений не верно, то бот переходит по else. Условия выполняются сверху вниз. Это значит, что если верхнее условие выполнено, бот уходит по связи от него и игнорирует условия внизу.
В блоке Условия можно указать несколько js выражений- несколько веток диалога. В нашем случае у нас будет три ветки: когда указанное пользователем число больше 100, когда оно меньше 1. Ну, и третий — когда число не меньше 1 и не больше 100, то есть, else, которое добавляется автоматически.
Скопируйте и вставьте в блок Условия:
$NUMBER > 100
Н ажмите + Условие и добавьте еще одну строку:
$NUMBER < 1
-
Нажмите Сохранить.
-
Назовем этот экран:
диапазон
Вот что у нас получилось:
- Переместим экраны для компактного отображения. Чтобы переместить экран, наведите указатель на левый верхний угол экрана и потяните:
- Если число не попадает в диапазон
Если пользователь назвал число больше 100 или меньше 1, нам нужно выдать сообщение о том, что нужно ввести число, попадающее в диапазон.
- Поэтому от условия
$NUMBER > 100
создадим блок Текст, в котором напишем:
Назови число от 1 до 100!
- Назовем этот экран:
назови число
- Свяжите условие
$NUMBER < 1
(если число меньше одного) с экраном «назови число». Чтобы связать существующий экран с другим экраном, нажмите на круг и протяните стрелочку к целевому экрану:
- На экран «назови число» добавьте блок Переход и свяжите его с экраном «прием ввода»:
Вот что у нас получилось:
Таким образом, когда пользователь назовет число «двести» или «ноль», бот скажем «Назови число от 1 до 100!». Затем, так как бот перевел пользователя на экран с интентами, бот сможет снова принять реплику пользователя.
- Протестируем
Мы можем проверить, что все работает так, как мы задумали. Конечно, полностью еще сценарий не готов, но можем проверить, что работает то, что мы разработали.
- Нажмите Тестировать. Откроется тестовый виджет.
Сейчас у нас разработана только ветка, которая сообщает, что число не попадает в диапазон. Поэтому будем называть числа больше 100 и меньше 1.
- Поговорим с ботом следующим образом:
Если тестирование работает не так, как на скриншоте, проверьте предыдущие шаги.