В этом туториале мы изучим основные компоненты Aimylogic, которые понадобятся для создания любого бота. В итоге у нас получится бот, который каждый раз загадывает случайное число и предлагает пользователю его угадать в процессе диалога.

Правила

Наш диалоговый бот должен загадывать число случайным образом. Далее пользователь выдвигает свое предположение. Если его предположение не верно, то бот должен сказать, больше или меньше его число, и предложить пользователю попытаться еще раз. И так до тех пор, пока пользователь не найдет верный ответ. После этого можно предложить сыграть еще разок.

Процесс создания

На видео вы можете увидеть весь процесс создания такого бота. Ниже я подробно опишу каждый шаг.


Начинаем

Зайдите на app.aimylogic.com и создайте нового бота. Назовите его как-нибудь и поехали!

Приветствие

Наш бот при старте должен рассказать пользователю правила игры и предложить сыграть. Для этого добавим на первый экран блок Текст и напишем в нем текст приветствия. Нажмите Сохранить.

Кнопки

Перед тем, как продумывать сценарий диалога, бывает проще и быстрее добавить кнопку вместо пользовательских фраз. В процессе тестирования вы просто будете кликать по кнопкам вместо набора текста в ответ на реплики бота.

Чуть позже мы конечно же заменим кнопки на естественный язык. А сейчас - просто нажмите на +Кнопка, напишите текст для кнопки и нажмите Enter. Сразу же появится палитра блоков для следующего экрана бота.

Загадываем число

Итак, бот поприветствовал пользователя и предложил сыграть. Пользователь нажал на кнопку "Поехали", и теперь бот должен загадать случайное число. Как это сделать?

В Aimylogic мы не можем писать какие-то скрипты, поэтому чтобы сгенерировать случайное число, нам понадобится сторонний сервис, который умеет выдавать случайное число по запросу. Таким сервисом может выступить сайт random.org, который умеет генерировать истинно случайные числа и события. У этого сайта есть API, с помощью которого наш бот может получить случайное число.

HTTP запрос

Добавьте на второй экран блок HTTP запрос. В URL укажите такой адрес

https://www.random.org/integers/?num=1&min=1&max=100&col=1&base=10&format=plain&rnd=new

Если открыть этот адрес в браузере, то вы увидите, что он просто возвращает некоторое целое число от единицы до сотни. Если перезагрузить страницу - то появится новое случайное число, Как раз то что нам нужно.

Наш бот должен запросить это число и сохранить его в некоторую переменную, с которой потом будет сравнивать ответ пользователя. Для этого на вкладке Response добавьте переменную с именем num.



В качестве значения укажите следующую строчку

parseInt($httpResponse)

Что здесь происходит? После HTTP запроса Aimylogic сохраняет ответ сервиса random.org в системную переменную httpResponse. Но сервис random.org возвращает текст, а нам нужно целое число, чтобы мы могли сравнивать с ним число пользователя. Поэтому нам нужно сперва преобразовать текстовый ответ сервиса в целое число. Для этого в Javascript есть функция parseInt, которой мы и воспользуемся.

Передадим в функцию parseInt весь ответ от сервиса - так мы преобразуем строку в число и сохраним его в переменную num. Нажмите на Сохранить.

А теперь угадывай!

Итак, наш бот теперь приветствует пользователя, рассказывает правила, а когда пользователь жмет на кнопку "Поехали" - загадывает истинно случайное число. Теперь пришла пора пользователю попытаться его угадать.

Кстати, истинно случайные числа - это вам не просто так...

На экране с HTTP запросом нажмите на переход "Завершен успешно", справа добавится новый экран бота, на который он будет переходить после успешного HTTP запроса.

Ввод числа

На этом экране по нашему сценарию нужно предложить пользователю отгадать число и ожидать от него ввода. Выберите из палитры блоков Ввод числа. Откроется окно настроек.



Этот блок работает так. Сперва бот выведет сообщение пользователю, а потом будет ожидать от него ввода числа в заданном диапазоне. Если пользователь введет какое-то другое число (не из диапазона), то бот выведет сообщение об ошибке и будет снова ждать ввода числа. Когда пользователь все же введет подходящее число, бот сохранит его в указанную переменную и двинется дальше по сценарию.

Заполните эти поля как показано на скриншоте и нажмите на Сохранить.

Кстати, даже если пользователь введет число словами (например, двадцать пять), то бот все равно его поймет.

Сравниваем с оригиналом

Итак, на этом шаге у нашего бота есть две переменные - num (число, которое он загадал) и guess (число, предложенное пользователем). Теперь бот должен сравнить эти два числа, и если пользователь его отгадал - то конечно же похвалить его за смекалку. А если нет - то дать ему подсказку, сказав, больше или меньше загаданное число.

Условия

Блок Условия используется, когда нужно добавить нелинейности в диалог. В зависимости от выполнения того или иного условия бот переходит на разные экраны.

На экране с вводом числа нажмите на "Переход после ввода $guess" - добавится новый экран, в котором нужно выбрать блок Условия.



В его настройках можно добавить несколько условий - несколько веток диалога. В нашем случае у нас будет три ветки: когда загаданное ботом число меньше ответа пользователя, когда оно больше, ну и третий - когда прозорливый пользователь все же догадался. Мы добавим только два условия, так как третье условие - else - добавляется блоком автоматически.

В условиях вы так же, как и в переменных HTTP запроса, можете писать любые валидные Javascript выражения с использованием любых функций этого языка, а также библиотеки underscorejs.org

Циклы

Итак, после ответа пользователя бот выясняет, отгадал ли он его число. Если не отгадал, то нужно сказать, что загаданное число меньше (или больше) и предложить попытаться еще разок.

Нажмите на первое условие ($num < $guess) на экране с блоком Условия. Добавится экран, на который отправится бот, если загаданное им число меньше чем то, которое предложил пользователь. Добавьте на этот экран еще один запрос ввода числа (блок Ввод числа) с такими параметрами



Для второго условия ($num > $guess) добавьте экран с вводом числа такого вида



После повторного ввода числа мы должны отправить бота обратно на тот экран, где он сравнивает числа. Для этого просто перетащите стрелку с перехода "Переход после ввода $guess" в только что добавленных блоках обратно на экран проверки условий.



Так мы можем организовать циклы - когда бот ходит не только вперед по сценарию, но и назад, и по кругу задает пользователю один и тот же вопрос.

Else

У нас есть еще одно условие - else - которое срабатывает когда пользователь все же угадывает число. В этом случае наш бот должен сообщить об этом и предложить сыграть еще разок.

Нажмите на условие else в блоке условий, добавится еще один экран, на который мы добавим вывод текста (блок Текст) с кнопкой.



Посмотрите, мы добавили в текст ссылку на переменную num - бот подставит ее значение в текст при работе.

Добавьте кнопку "Повторить еще разок" и перетяните стрелку от нее на блок с HTTP запросом. Тогда бот будет начинать игру с начала - загадывать число и предлагать пользователю его отгадать.

Давайте сыграем

Теперь можно нажать на кнопку Тест в правом верхнем углу и посмотреть, как все это работает вживую. Сейчас бот выводит нам кнопки при старте и при окончании игры, но на следующем (финальном) шаге нашего туториала мы заменим их на фразы на естественном языке.

Добавляем фразы

Вместо кнопок пользователь может отвечать боту словами, когда тот предлагает ему сыграть. Все что нужно для этого сделать - это добавить блок Фразы на самый первый и самый последний экраны. И перетянуть с них стрелки на экран с HTTP запросом.



Добавьте подходящие фразы, на которые бот должен уметь реагировать. Aimylogic автоматически построит модель, благодаря которой бот сможет понимать и синонимичные фразы, а не обязательно только те, что вы указали.

Теперь можно запустить тест еще раз и поговорить с ботом без кнопок.

Итого

В этом туториале мы научились

оперировать базовыми блоками Aimylogic для создания говорящих ботов
делать запросы к сторонним сервисам и обрабатывать ответы
создавать нелинейные сценарии, где бот может принимать решения по ходу диалога с пользователем
делать циклы в сценарии, чтобы бот ходил не только вперед по диалогу, но и назад
ну и наконец просто создали прикольную игру, которую и ребенку не стыдно показать :-)

Кстати, если вы захотите показать вашего бота кому-то, то вам нужно будет подключить его к одному из каналов - например к Яндекс Алисе или к Телеграму.
Была ли эта статья полезна?
Спасибо!