Перейти к основному содержимому

iQBot 3.0

Дата выпуска: 11 ноября 2026.

iQBot 3.0 – переработанная версия платформы: диалоговый движок, понимание естественного языка (NLU), Студия разработки ботов и административная панель. Платформа собирается и разворачивается на собственном стеке, а все возможности доступны сразу, без деления на редакции и лицензионного ключа.


Главное в версии​

  • Собственный автономный движок NLU для русского языка, без обращения к внешним сервисам.
  • Одна редакция: нет деления на Pro и не Pro, нет лицензионного ключа и ограничений по функциям.
  • Режим кластера через Redis работает в ядре платформы, узлы обрабатывают в несколько раз больше сообщений в секунду.
  • Единый вход через OpenID Connect и LDAP, второй фактор (TOTP), самостоятельный сброс пароля.
  • Визуальный редактор ролей в административной панели.
  • Звенья «ИИ-агент», «Переадресация диалога» и «Закрытие диалога».
  • История изменений бота: кто, что и когда менял, с откатом и сравнением ревизий.
  • Новые руководства инженера и пользователя взамен устаревшей документации.

Студия и конструктор процессов​

  • Свойства звена, действия или перехода открываются двойным щелчком.
  • Условия перехода собираются конструктором. Переход «Если нажата кнопка» выбирает кнопку из элементов «Одиночный выбор» бота, переход по намерению подписан «Если «имя намерения»» и получил порог уверенности. Выражения на JavaScript остаются доступны.
  • Одиночный выбор показывается в эмуляторе и веб-чате кнопками в ряд с переносом. Значение кнопки не обязательно: если оно пустое, подставляется название кнопки. Тип «Выбор значения» упразднён как дублирующий, его элементы переносятся в одиночный выбор при загрузке бота.
  • Новые звенья-навыки получают русские имена («Выбор 1», «API 2»), а цель перехода в другой процесс выбирается из списка звеньев этого процесса.
  • Окно «Добавить новое действие» стало удобнее, а под списком есть ссылка на создание нового скрипта в редакторе кода. Шаблон нового действия написан по-русски.
  • Названия, категории и описания поставляемых действий переведены на русский и переписаны так, чтобы было понятно, что действие делает.
  • В Студии видно, кто ещё открыл этого бота.
  • Плашки состояния сервисов в верхней панели Студии и в заголовке консоли: NLU, языки, Duckling, сообщения, сокеты, в кластере Redis. Подсказка по плашке объясняет, что значит сбой и что проверить.
  • Вкладка «Результат» отладчика переведена целиком и показывает решение диспетчера диалогов с причиной, определённый и используемый язык, топ намерений. Для ответа из базы вопросов-ответов показан текст вопроса.
  • Имя слота намерения можно писать по-русски и с пробелами.
  • Подсказки об ошибках процесса и о том, что бот требует обучения, показываются у соответствующих значков и кнопок, в том числе у бота с несколькими языками.

Список ботов​

  • Два вида плашек: подробные и миниатюрные.
  • Фильтр по состоянию: опубликован, персональный, отключён, ошибка. Выбранные вид и фильтр запоминаются в браузере.
  • После создания, копирования или импорта страница прокручивается к новому боту, и его плашка подсвечивается.
  • В меню бота появились пункты «Создать копию», «История изменений» и «Конфигурация».
  • Аватар бота по умолчанию заменён на новое изображение.

Диалоги, ИИ и тестирование​

  • ИИ-агент. Профили шлюза в настройках модуля задают адрес, модель, заголовки, тайм-аут и параметры, поэтому переключение между локальной моделью, GPU-сервером и облаком не требует правки ботов. Ключи доступа берутся из переменных окружения EXPOSED_*. В звене можно включить историю диалога: последние реплики уходят модели.
  • История диалога. Платформа сама хранит реплики клиента и ответы бота. Скрипты читают их вызовом iqbot.dialog.getHistory. Срок хранения и число реплик настраиваются в разделе dialogHistory файла iqbot.config.json, по умолчанию 7 дней и 200 реплик.
  • Переадресация и закрытие диалога. Бот передаёт диалог оператору, группе или в очередь iQChannels, при этом можно сменить тему обращения. Другое звено закрывает обращение.
  • Вопросы и ответы внутри процесса. Опция бота «Вопросы-ответы внутри процесса» позволяет ответить на вопрос из базы знаний, не выходя из текущего звена. По умолчанию выключена.
  • Автотесты. Обновлённый интерфейс сценариев, отчёт о том, на каком шаге и почему сценарий не прошёл, проверка минимальной уверенности ответа. Все сценарии бота запускаются из командной строки командой test-scenarios, она завершается с ненулевым кодом, если хотя бы один сценарий не прошёл, что удобно для CI. Нажатие кнопки воспроизводится как нажатие кнопки.
  • Непонятые фразы. Значок перед фразой показывает, чем она помечена, повторы собраны в бейдж с числом, системные события в ленте диалога переведены.

NLU и язык​

  • Собственный автономный движок понимания естественного языка для русского языка.
  • Специализированный классификатор «вне области применения» точнее отличает бессмысленные фразы от реальных намерений.
  • Если обучение бота не удалось, Studio открывает окно «Результат обучения»: в нём названа причина (например, в намерении нет ни одной фразы, у слота несуществующая сущность, язык не поддерживается языковым сервером, недоступен NLU или Duckling) и сказано, что сделать. Текст ответа сервера NLU свёрнут в «Подробности», а в строке состояния есть ссылка «Подробнее».
  • Если обучение прервано (NLU остановился или перезапущен) или рабочий процесс обучения аварийно завершился (обычно не хватило памяти), окно «Результат обучения» говорит об этом и подсказывает, что сделать. Платформа пишет причину и в журнал.
  • Исправлены ошибки русской локализации, найденные в ходе аудита переводов.
  • Языковой сервер по умолчанию слушает порт 3150 и больше не делит порт 3100 с сервисом сообщений. Если языковой сервер не отвечает, страница «Управление языками» показывает плашку «Языковой сервер недоступен» с кнопкой «Проверить снова».

Администрирование и безопасность​

  • Единый вход. Стратегии oauth2 (OpenID Connect: Keycloak, ADFS, Okta и другие) и ldap (Active Directory, OpenLDAP). Учётные записи создаются при первом входе. Способ входа задаётся при установке и один на платформу. SAML не поддерживается.
  • Второй фактор. Одноразовые коды приложения-аутентификатора и коды восстановления, режимы off, optional и required. Администратор может сбросить второй фактор пользователя.
  • Сброс пароля. Ссылка «Забыли пароль?» на странице входа, письмо со ссылкой на один час, не больше пяти запросов в час с одного адреса. При создании и сбросе пароля администратор решает, требовать ли смену при первом входе.
  • Пользователь для интеграции, например для iQChannels: вместо пароля выдаётся секрет, который показывается один раз и перевыпускается кнопкой. В консоль такая учётная запись войти не может.
  • Редактор ролей. Права выбираются галочками в дереве ресурсов, роли можно создавать, редактировать, дублировать и удалять, три базовые роли восстанавливаются одной кнопкой. Доступ к модулю и его пункту в меню Студии задаётся одним правом module.<имя>.
  • Настройки сервера. Страница для супер-администратора: профили ИИ-шлюзов с проверкой запроса, адрес и токен языкового сервера, Duckling, почта с проверочным письмом. Править JSON-файлы не нужно.
  • История изменений бота. Каждое изменение файлов бота записывается с автором и временем. Для ревизий есть комментарий, откат и сравнение с текущим состоянием.
  • Продуктивные сборки не включают исходный код фронтенда, зависимости обновлены до версий без известных уязвимостей.

Эксплуатация и кластер​

  • Режим кластера через Redis: монтирование ботов, сброс кэшей, отзыв токенов и инвалидация файлов доходят до всех узлов, комнаты socket.io и блокировки фоновых задач общие.
  • Одна песочница на действие или хук вместо новой на каждое выполнение. Узел обрабатывает в шесть раз больше сообщений в секунду, процессорное время на сообщение упало с 65–238 до 12–16 мс.
  • Лимит одновременно обрабатываемых сообщений на узле (IQB_CONVERSE_MAX_IN_FLIGHT, по умолчанию 100): сверх лимита платформа отвечает 503 с Retry-After.
  • Языковой сервер опрашивается напрямую: GET /status показывает lang, languages и languagesLoading, а GET /health по умолчанию проверяет и lang. Остановка языкового сервера (например, из-за нехватки памяти) видна сразу, а не по неудачному обучению.
  • Если систему не хватило памяти и она остановила NLU, Studio или Messaging, платформа пишет об этом в журнал и запускает процесс заново, а не оставляет запросы к нему без ответа.
  • Запросы к серверу NLU и проверки /status и /health ограничены по времени: сервис, который не отвечает, показывается как down и не подвешивает страницы консоли и Studio.
  • Плашка «Сервер» жёлтая первые пять минут после запуска, GET /status отдаёт uptimeSeconds, а метрика process_uptime_seconds позволяет поставить оповещение на перезапуски процесса. Проверка токена не зависает, когда база не отвечает: платформа отвечает 503, и пользователя не выбрасывает на страницу входа.
  • Сообщения о таймауте, обрыве связи и ошибках шлюза в консоли написаны по-русски и подсказывают, что делать. Руководство инженера описывает, как найти причину таймаутов (перезапуски по памяти, прокси, лимит соединений браузера) и как отключить WebSocket параметром httpServer.socketTransports.
  • Красная шестерня «Конфигурация изменена» показывает, какие параметры главного конфига изменены (только имена), и перезагружает сервер из окна.
  • GET /health и GET /status отвечают 503, пока узел не готов или завершает работу. При остановке узел дожидается принятых сообщений.
  • GET /metrics отдаёт метрики в формате Prometheus, доступ можно закрыть токеном IQB_METRICS_TOKEN.
  • Если обратный прокси не пропускает WebSocket, Studio, консоль и веб-чат (в том числе эмулятор) переходят на обычные запросы (long polling). При нескольких узлах для этого на балансировщике нужны «липкие» сессии, см. Распределение нагрузки.
  • Диагностический отчёт показывает время работы, память, свободное место на диске, версию и размер базы, состояние шлюзов ИИ-агента, провайдера единого входа и почты, сводку по каждому боту. Секреты в нём скрываются.
  • Все переменные окружения получили имена с префиксом IQB_, например IQB_DATABASE_URL, IQB_CLUSTER_ENABLED, IQB_REDIS_URL.
  • Единый сборщик дистрибутивов: бинарные сборки для Linux и Windows и образ Docker для платформы iQBot, NLU-движка и сервиса сообщений. Номера версий всех компонентов унифицированы.

Что проверить перед обновлением​

  • Продуктивный режим требует PostgreSQL. Первый администратор создаётся только из переменных IQB_ADMIN_EMAIL и IQB_ADMIN_PASSWORD, со страницы входа он не создаётся.
  • Переменные окружения. Новые имена начинаются с IQB_. Прежние имена продолжают работать.
  • Блок pro главного конфига упразднён. Поля collaboratorsAuthStrategies, externalAuth и branding теперь лежат на верхнем уровне iqbot.config.json. Файл со старым блоком приводится к новому виду при первом запуске, настройки не теряются.
  • Лицензирование удалено. Не нужны лицензионный ключ, переменные IQB_LICENSE_KEY и PRO_ENABLED, страница лицензии и баннер «Лицензия не установлена».
  • Способ входа один. Остальные стратегии из списка collaboratorsAuthStrategies не используются, при запуске сервер предупреждает о лишних.
  • Тип «Выбор значения» заменён одиночным выбором. Элементы переносятся автоматически. Множественный выбор, ввод своего значения, подпись кнопки подтверждения и ширина при переносе не сохраняются.
  • Права. Права на модули объединены в module.<имя>, права на обучение NLU вошли в module.nlu, а права на навыки в bot.flows. Проверьте собственные роли.
  • Убраны поставляемые действия «Отправить данные на страницу чата» и «Пример пользовательского действия». Если они уже скопированы в data/global/actions, файлы остаются до ручного удаления.
  • Действие «Сбросить глобальную переменную» теперь удаляет только переменную с точно таким именем и только у текущего бота. Раньше оно удаляло переменные по началу имени у всех ботов.
  • Языковой сервер по умолчанию слушает порт 3150, а не 3100. Если порт открывался в файрволе или адрес языкового сервера задавался явно, проверьте его.
  • Удалён экспериментальный режим USE_REDIS_STATE. Режим кластера больше не включает продуктивный режим сам по себе, его нужно включать отдельно.