Создание продвинутого бота
Данная инструкция представляет собой пошаговое руководство по созданию интеллектуального чат-бота, реализующего следующий функционал:
- Приветствие и взаимодействие с пользователем
- Обработка базовых запросов и предоставление ответов
- Выполнение команд в рамках заданной логики
- Поиск банкоматов с учетом указанного города
- Эскалация обращений на специалиста поддержки при необходимости
Ⅰ. Создание приветственного сообщения
Цель: Поприветствовать пользователя в самом начале диалога.
Шаги:
- Откройте главный процесс вашего бота (Начало).
- Выберите стартовое звено
entry– это точка, с которой начинается любой диалог. - Добавьте в это звено блок Текст.
- Впишите в него приветственное сообщение, например:
Здравствуйте! Я ваш виртуальный банковский ассистент. Чем могу помочь?
Мы настроили точку входа в наш процесс. Звено entry – это обязательный стартовый элемент, который срабатывает автоматически, как только пользователь начинает диалог. Разместив в нём приветствие, мы гарантируем, что каждый новый пользователь первым делом увидит это сообщение.
Ⅱ. Ответы на частые вопросы – модуль Q&A
Цель: Научить бота быстро отвечать на простые, часто задаваемые вопросы, например, о времени работы.

Шаги:
- В левой панели вашего проекта выберите раздел Вопрос&Ответ.
- Создайте новую пару «Вопрос–Ответ» через кнопку
+справа. - В поле для вопросов введите несколько вариантов (через
Enter), например:Какие у вас часы работы?Когда вы открыты?Когда вы работаете?
Рекомендуется указать не менее 10 вариаций разной длины.
- В поле для ответа укажите актуальную информацию:
Наш офис открыт в:
– будние дни с 09:00 до 19:00
– субботу с 10:00 до 15:00
- Нажмите на серую кнопку Обучение бота в правом нижнем углу интерфейса и дождитесь завершения процесса.
Не забудьте нажать Обучение бота после добавления вопросов, иначе он их не поймёт!
- Протестируйте в Эмуляторе, написав боту один из вопросов.
Мы использовали встроенный модуль Вопрос&Ответ, который работает как база знаний. Он не требует построения сложной логики для обработки однотипных запросов. Когда пользователь пишет сообщение, система сначала пытается найти наиболее похожий вопрос в этой базе. Если находит совпадение с высокой уверенностью, она мгновенно выдаёт готовый ответ.
Ⅲ. Управление диалогом – варианты выбора
Цель: Создать кнопки для чётких команд (Найти банкомат, Подключить оператора, Выход) и настроить переходы в нужные ветки процесса.

Шаги:
- Создайте звено Выбор.
- Внутри выберите «Создать элемент Одиночный выбор».
- Укажите настройки:
- Сообщение:
Чем могу помочь? - Кнопка 1: Название –
Найти банкомат, Значение –Найти банкомат - Кнопка 2: Название –
Подключить оператора, Значение –Подключить оператора - Кнопка 3: Название –
Выйти, Значение –Выйти
- Сообщение:
- Замените случайное имя на более точное –
Меню - Настройте переход всегда из звена
entryк узлуМеню– просто протяните линию.
Мы создали интерактивное меню с помощью элемента Одиночный выбор. Когда пользователь нажимает кнопку, в чат отправляется текст, указанный в поле «Значение». Его можно считывать из переменной event.payload.text.
Ⅳ. Выход
Цель: Корректно завершить диалог с пользователем.

Шаги:
- Создайте звено Прощание.
- Соедините его с переходом от кнопки
Выйтииз звена Выбор. - Внутри звена Прощание добавьте элемент Изображение и загрузите картинку.
- Следом добавьте элемент Текст с сообщением:
Всего доброго! Если у вас появятся другие вопросы, обращайтесь. - В разделе Переходы установите Завершение процесса.
Мы создали логическую конечную точку диалога. Вместо резкого обрыва разговора бот показывает изображение и прощальное сообщение. Переход Завершение процесса сообщает платформе, что диалог завершён и сессия может быть закрыта.
Ⅴ. Подключение оператора
Цель: Настроить перевод диалога на живого сотрудника через выполнение кода.

Шаги:
- В редакторе кода (левая чёрная панель), в разделе Действия → Бот создайте файл
redirect.jsсо следующим содержимым:redirect.js/**
* Small description of your action
* @title The title displayed in the flow editor
* @category Custom IQBot
* @author IQStore
* @param {string} message - Сообщение пользователю при редиректе
* @param {number} groupid - ID группы операторов
* @param {number} operatorid - ID конкретного оператора
*/
const myAction = async (message, groupid, operatorid) => {
const answer = {
type: 'text',
text: message,
markdown: true,
groupid: groupid !== undefined ? groupid : 0,
operatorid: operatorid !== undefined ? operatorid : 0
}
await bp.events.replyToEvent(event, [answer])
}
return myAction(args.message, args.groupid, args.operatorid)
В Эмуляторе после ответа на вопрос откройте Панель отладки → RAW JSON.
Там в nlu → slots → City → value содержится искомая сущность.
- Создайте звено Переключить-на-оператора и соедините его с переходом из
Меню. - Внутри звена выберите действие Выполнить код.
- В выпадающем списке укажите
Custom IQBot → redirect. - Заполните параметры:
- message:
Переключаю на оператора. Пожалуйста, подождите… - groupid или operatorid: укажите конкретный ID группы/оператора.
- message:
- После действия Выполнить код установите переход в Завершение процесса.
Мы реализовали программный перевод диалога. Стандартные блоки не всегда подходят для интеграций, поэтому мы использовали JavaScript. Скрипт redirect.js формирует ответ, который платформа интерпретирует как команду на перевод диалога к оператору. Передавая параметры (ID группы, сообщение), мы управляем маршрутом пользователя.
Ⅵ. Понимание цели пользователя – намерение «Найти банкомат»
Цель: Научить бота понимать запрос «найти банкомат», извлекая город.

Шаги:
-
Создание намерения (Intent):
- Перейдите в раздел Понимание естественного языка (NLU) и создайте намерение
find_atm. - Добавьте примеры:
найди банкомат в МосквеПодскажите, где в Москве есть банкоматы вашей сети?Найти терминал
- Перейдите в раздел Понимание естественного языка (NLU) и создайте намерение
-
Создание сущности (Entity):
- В разделе NLU создайте сущность
city. - Добавьте примеры:
Москва,Новосибирск,Казань. - Можно задать синонимы:
МСК,НСК,КЗН.
- В разделе NLU создайте сущность
-
Создание слота (Slot):
- В намерении
find_atmнажмите «Создать слот». - Задайте имя
Cityи свяжите его с сущностьюcity(list.city). - Разметьте города в примерах фраз.
- В намерении
-
Заполнение слота (Slot Filling):
- В процессе создайте узел Заполнение слота.
- Для намерения
find_atmдобавьте слотCity. - В поле «Вопрос для заполнения» укажите:
В каком городе вы ищете банкомат? - В разделе ошибок настройте сообщение:
В этом городе ещё нет банкоматов.и количество попыток =2.
-
Соединение узлов:
- В редакторе процесса соедините
Менюс узлом Найти банкомат. - Для перехода задайте условие: Если {IntentName} = find_atm.
- В редакторе процесса соедините
Бот может понимать намерения пользователя и извлекать сущности через модель понимания естественного языка (NLU).
- Намерение (
find_atm) – цель пользователя. - Сущность (
city) – конкретный фрагмент информации (город). - Слот (
City) – ячейка памяти в диалоге. - Slot Filling – автоматическое уточнение недостающей информации в звене
find_atm.
Ⅶ. Динамический ответ – вывод результата с переменной
Цель: Подставить в ответ название города.

Шаги:
- Создайте узел Вывести результат.
- Добавьте блок Текст.
- Напишите:
Вот ссылка на карту с банкоматами в городе {{session.slots.City.value}}:
https://yandex.ru/maps/?text=банкоматы+Сбербанк+в+{{session.slots.City.value}}
В Эмуляторе после ответа на вопрос откройте Панель отладки → RAW JSON. Здесь перечилены все переменные, которые используются ботом в данный момент (в том числе можно найти текст, который ввёл пользователь).
Там в nlu → slots → City → value содержится искомая сущность.
- Настройте переходы:
- Из условия «Если дозаполнили»
- Из условия «Если уже заполнен»
- Из узла Найти банкомат настройте переход к
Менюпосле вывода результата.
Мы создали динамический ответ. Бот берёт значение из слота City и подставляет его в текст. Все переменные в session доступны в течение сессии.
Ⅷ. Другие процессы – вывод ошибки
Цель: Обработать ситуацию, когда бот не может распознать запрос.

Шаги:
- Перейдите в процесс по умолчанию Ошибки.
- В звено
entryдобавьте блок Текст:Иногда я не с первого раза распознаю вопрос. Давайте попробуем ещё раз. - В конце процесса Ошибки настройте переход в основной процесс:
- Процесс: Начало
- Звено:
Меню
- В настройках основного процесса укажите: при нераспознанном сообщении – переход в Ошибки.
- В узлах
МенюиНайти банкоматнастройте переход с условием «Если ошибка» → в подпроцесс Ошибки.
Мы настроили поток обработки ошибок. Если бот не смог определить намерение или ответ, он объясняет это пользователю и возвращает его в основной диалог.