Перейти к основному содержимому
Версия: 2.2

Создание продвинутого бота

Данная инструкция представляет собой пошаговое руководство по созданию интеллектуального чат-бота, реализующего следующий функционал:

  • Приветствие и взаимодействие с пользователем
  • Обработка базовых запросов и предоставление ответов
  • Выполнение команд в рамках заданной логики
  • Поиск банкоматов с учетом указанного города
  • Эскалация обращений на специалиста поддержки при необходимости

Ⅰ. Создание приветственного сообщения​

Цель: Поприветствовать пользователя в самом начале диалога. Шаги:

  1. Откройте главный процесс вашего бота (Начало).
  2. Выберите стартовое звено entry – это точка, с которой начинается любой диалог.
  3. Добавьте в это звено блок Текст.
  4. Впишите в него приветственное сообщение, например: Здравствуйте! Я ваш виртуальный банковский ассистент. Чем могу помочь?
Что мы сделали и как это работает?

Мы настроили точку входа в наш процесс. Звено entry – это обязательный стартовый элемент, который срабатывает автоматически, как только пользователь начинает диалог. Разместив в нём приветствие, мы гарантируем, что каждый новый пользователь первым делом увидит это сообщение.


Ⅱ. Ответы на частые вопросы – модуль Q&A​

Цель: Научить бота быстро отвечать на простые, часто задаваемые вопросы, например, о времени работы.

Шаги:

  1. В левой панели вашего проекта выберите раздел Вопрос&Ответ.
  2. Создайте новую пару «Вопрос–Ответ» через кнопку + справа.
  3. В поле для вопросов введите несколько вариантов (через Enter), например:
    • Какие у вас часы работы?
    • Когда вы открыты?
    • Когда вы работаете?
      Рекомендуется указать не менее 10 вариаций разной длины.
  4. В поле для ответа укажите актуальную информацию:
    Наш офис открыт в:
– будние дни с 09:00 до 19:00
– субботу с 10:00 до 15:00
  1. Нажмите на серую кнопку Обучение бота в правом нижнем углу интерфейса и дождитесь завершения процесса.
предупреждение

Не забудьте нажать Обучение бота после добавления вопросов, иначе он их не поймёт!

  1. Протестируйте в Эмуляторе, написав боту один из вопросов.
Что мы сделали и как это работает?

Мы использовали встроенный модуль Вопрос&Ответ, который работает как база знаний. Он не требует построения сложной логики для обработки однотипных запросов. Когда пользователь пишет сообщение, система сначала пытается найти наиболее похожий вопрос в этой базе. Если находит совпадение с высокой уверенностью, она мгновенно выдаёт готовый ответ.


Ⅲ. Управление диалогом – варианты выбора​

Цель: Создать кнопки для чётких команд (Найти банкомат, Подключить оператора, Выход) и настроить переходы в нужные ветки процесса.

Шаги:

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

Мы создали интерактивное меню с помощью элемента Одиночный выбор. Когда пользователь нажимает кнопку, в чат отправляется текст, указанный в поле «Значение». Его можно считывать из переменной event.payload.text.


Ⅳ. Выход​

Цель: Корректно завершить диалог с пользователем.

Шаги:

  1. Создайте звено Прощание.
  2. Соедините его с переходом от кнопки Выйти из звена Выбор.
  3. Внутри звена Прощание добавьте элемент Изображение и загрузите картинку.
  4. Следом добавьте элемент Текст с сообщением: Всего доброго! Если у вас появятся другие вопросы, обращайтесь.
  5. В разделе Переходы установите Завершение процесса.
Что мы сделали и как это работает?

Мы создали логическую конечную точку диалога. Вместо резкого обрыва разговора бот показывает изображение и прощальное сообщение. Переход Завершение процесса сообщает платформе, что диалог завершён и сессия может быть закрыта.


Ⅴ. Подключение оператора​

Цель: Настроить перевод диалога на живого сотрудника через выполнение кода.

Шаги:

  1. В редакторе кода (левая чёрная панель), в разделе Действия → Бот создайте файл 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 содержится искомая сущность.

  1. Создайте звено Переключить-на-оператора и соедините его с переходом из Меню.
  2. Внутри звена выберите действие Выполнить код.
  3. В выпадающем списке укажите Custom IQBot → redirect.
  4. Заполните параметры:
    • message: Переключаю на оператора. Пожалуйста, подождите…
    • groupid или operatorid: укажите конкретный ID группы/оператора.
  5. После действия Выполнить код установите переход в Завершение процесса.
Что мы сделали и как это работает?

Мы реализовали программный перевод диалога. Стандартные блоки не всегда подходят для интеграций, поэтому мы использовали JavaScript. Скрипт redirect.js формирует ответ, который платформа интерпретирует как команду на перевод диалога к оператору. Передавая параметры (ID группы, сообщение), мы управляем маршрутом пользователя.


Ⅵ. Понимание цели пользователя – намерение «Найти банкомат»​

Цель: Научить бота понимать запрос «найти банкомат», извлекая город.

Шаги:

  1. Создание намерения (Intent):

    • Перейдите в раздел Понимание естественного языка (NLU) и создайте намерение find_atm.
    • Добавьте примеры:
      • найди банкомат в Москве
      • Подскажите, где в Москве есть банкоматы вашей сети?
      • Найти терминал
  2. Создание сущности (Entity):

    • В разделе NLU создайте сущность city.
    • Добавьте примеры: Москва, Новосибирск, Казань.
    • Можно задать синонимы: МСК, НСК, КЗН.
  3. Создание слота (Slot):

    • В намерении find_atm нажмите «Создать слот».
    • Задайте имя City и свяжите его с сущностью city (list.city).
    • Разметьте города в примерах фраз.
  4. Заполнение слота (Slot Filling):

    • В процессе создайте узел Заполнение слота.
    • Для намерения find_atm добавьте слот City.
    • В поле «Вопрос для заполнения» укажите: В каком городе вы ищете банкомат?
    • В разделе ошибок настройте сообщение: В этом городе ещё нет банкоматов. и количество попыток = 2.
  5. Соединение узлов:

    • В редакторе процесса соедините Меню с узлом Найти банкомат.
    • Для перехода задайте условие: Если {IntentName} = find_atm.
Что мы сделали и как это работает?

Бот может понимать намерения пользователя и извлекать сущности через модель понимания естественного языка (NLU).

  • Намерение (find_atm) – цель пользователя.
  • Сущность (city) – конкретный фрагмент информации (город).
  • Слот (City) – ячейка памяти в диалоге.
  • Slot Filling – автоматическое уточнение недостающей информации в звене find_atm.

Ⅶ. Динамический ответ – вывод результата с переменной​

Цель: Подставить в ответ название города.

Шаги:

  1. Создайте узел Вывести результат.
  2. Добавьте блок Текст.
  3. Напишите:
    Вот ссылка на карту с банкоматами в городе {{session.slots.City.value}}:

https://yandex.ru/maps/?text=банкоматы+Сбербанк+в+{{session.slots.City.value}}
Как найти переменную в отладчике

В Эмуляторе после ответа на вопрос откройте Панель отладки → RAW JSON. Здесь перечилены все переменные, которые используются ботом в данный момент (в том числе можно найти текст, который ввёл пользователь).

Там в nlu → slots → City → value содержится искомая сущность.

  1. Настройте переходы:
    • Из условия «Если дозаполнили»
    • Из условия «Если уже заполнен»
  2. Из узла Найти банкомат настройте переход к Меню после вывода результата.
Что мы сделали и как это работает?

Мы создали динамический ответ. Бот берёт значение из слота City и подставляет его в текст. Все переменные в session доступны в течение сессии.


Ⅷ. Другие процессы – вывод ошибки​

Цель: Обработать ситуацию, когда бот не может распознать запрос.

Шаги:

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

Мы настроили поток обработки ошибок. Если бот не смог определить намерение или ответ, он объясняет это пользователю и возвращает его в основной диалог.


Скачать готовый проект для импорта