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

Конфигурация iQBot

Платформа настраивается на трёх уровнях:

УровеньГде задаётсяДля чего
Переменные окруженияФайл .env рядом с исполняемым файлом iqbot, переменные контейнера или службыПодключение к базе, режим работы, адреса сервисов, секреты
Главный конфиг iqbot.config.jsondata/global/iqbot.config.jsonСервер, безопасность, журналы, диалоги, события
Настройки модулей, например nlu.jsondata/global/config/<модуль>.jsonNLU, базовые навыки, веб-чат, тестирование

При IQBFS_STORAGE=database файлы конфигурации лежат в базе данных, а не на диске. Правятся они в консоли администратора в разделе «Редактор кода» (главный конфиг и глобальные настройки модулей доступны только супер-администратору) или командами pullfile и pushfile, см. Командная строка iQBot.

После изменения файла конфигурации в статусной строке консоли появляется красный значок шестерёнки «Конфигурация устарела» с кнопкой перезапуска сервера. Изменения вступают в силу после перезапуска.

Переменные окружения​

У каждой переменной платформы есть имя с префиксом IQB_. Исторические имена без префикса (DATABASE_URL, CLUSTER_ENABLED, REDIS_URL и другие) принимаются по-прежнему, но в новых установках используйте имена с префиксом; если заданы оба, действует значение с IQB_.

Основные​

ПеременнаяИсторическое имяПо умолчаниюНазначение
IQB_DATABASE_URLDATABASE_URLSQLite, только вне продуктиваСтрока подключения к PostgreSQL: postgres://пользователь:пароль@хост:5432/база. В продуктивном режиме обязательна: без PostgreSQL платформа не запустится (временный обход — IQB_ALLOW_SQLITE=true).
IQB_IQBFS_STORAGEIQBFS_STORAGEdatabase при PostgreSQL, иначе diskГде лежат боты и файлы конфигурации: в базе или на диске узла. Для нескольких серверов нужен database.
IQB_PRODUCTION—falseПродуктивный режим: скрывает трассировки стека и журналы отладки, требует PostgreSQL и учётную запись администратора из переменных ниже. Эквивалент ключа запуска --production.
IQB_EXTERNAL_URLEXTERNAL_URLhttp://localhost:3000Внешний адрес платформы, по которому её открывают пользователи.
IQB_PORTPORT3000Порт ядра. Заменяет httpServer.port.
IQB_HOST—все интерфейсыАдрес, который слушает ядро. Заменяет httpServer.host.
IQB_ADMIN_EMAIL, IQB_ADMIN_PASSWORD—не заданыСоздают учётную запись администратора при первом запуске. В продуктивном режиме без них страница входа не создаёт первого администратора (иначе им стал бы любой, кто открыл её первым); временный обход — IQB_ALLOW_OPEN_REGISTRATION=true.
IQB_AUTO_MIGRATEAUTO_MIGRATEfalseАвтоматически выполнять миграции данных при обновлении. Эквивалент ключа --autoMigrate.
IQB_APP_DATA_PATHAPP_DATA_PATH$HOME/iqbotКаталог для кэшей и служебных данных. Если у пользователя, от имени которого запущена платформа, нет домашнего каталога, платформа не стартует и просит задать эту переменную.
IQB_ENABLED_MODULES—все модули платформыJSON-массив имён включённых модулей. Переопределяет список по умолчанию.

Кластер​

ПеременнаяИсторическое имяПо умолчаниюНазначение
IQB_CLUSTER_ENABLEDCLUSTER_ENABLEDfalseОбмен между узлами через Redis: задания, инвалидация кэша, события realtime, блокировки. Не включает продуктивный режим и не нужен для схемы с резервным узлом.
IQB_REDIS_URLREDIS_URL—Адрес Redis: строка redis://[:пароль@]хост:порт[/база] или JSON-массив узлов Redis Cluster.
IQB_REDIS_SCOPE——Префикс ключей и каналов, если один Redis обслуживает несколько установок.
IQB_REDIS_OPTIONSREDIS_OPTIONS—JSON с параметрами клиента ioredis, например пароль или TLS.
IQB_CONVERSE_MAX_IN_FLIGHT—100Сколько сообщений узел обрабатывает одновременно. Сверх лимита ответ 503 с Retry-After. 0 снимает лимит.
IQB_DRAIN_TIMEOUT_MS—15000Сколько узел ждёт завершения принятых сообщений при остановке, прежде чем выйти.

Подробности — в разделе Кластер с распределением нагрузки.

Messaging и NLU​

ПеременнаяИсторическое имяНазначение
IQB_MESSAGING_ENDPOINTMESSAGING_ENDPOINTАдрес внешнего Messaging. Если не задан, ядро запускает Messaging само.
IQB_MESSAGING_ADMIN_KEYMESSAGING_ADMIN_KEYКлюч администратора внешнего Messaging, должен совпадать с ADMIN_KEY на стороне Messaging.
IQB_MESSAGING_LOGGING_ENABLEDMESSAGING_LOGGING_ENABLEDВключает подробные журналы Messaging.
IQB_MODULE_NLU_*—Настройки модуля NLU, см. ниже.

Сеть и безопасность​

ПеременнаяИсторическое имяНазначение
IQB_REVERSE_PROXYREVERSE_PROXYtrue, IP-адрес или имя хоста, если платформа стоит за обратным прокси.
IQB_PROXY—Прокси для обращений платформы к внешним сервисам, например http://пользователь:пароль@хост:порт.
IQB_HTTP_DISABLE_GZIP—Отключает сжатие ответов.
IQB_DISABLE_SERVER_CONFIG—Отключает API serverConfig, которое может отдавать чувствительные данные.
IQB_DISABLE_SERVER_DIAG—Отключает создание диагностического отчёта через API. Команда diag и переменная IQB_DIAG продолжают работать.
IQB_METRICS_TOKEN—Если задан, GET /metrics требует заголовок Authorization: Bearer <токен>, см. Мониторинг.

Надёжность и производительность​

ПеременнаяПо умолчаниюНазначение
IQB_DISABLE_AUTO_RESTARTfalseОтключает автоматический перезапуск ядра после сбоя.
IQB_MAX_SERVER_REBOOT5Максимальное число автоматических перезапусков.
IQB_FAILSAFEfalseНе завершать процесс при неперехваченной ошибке.
IQB_MAX_MEMORY_CACHE_SIZE1gbМаксимальный размер кэша в памяти процесса.
IQB_IQBFS_MAX_FILE_SIZE100mbМаксимальный размер файла в хранилище IQBFS.
IQB_IQBFS_UPLOAD_CONCURRENCY50Максимум одновременных загрузок в IQBFS.
IQB_CODE_EDITOR_DISABLE_UPLOADfalseОтключает загрузку файлов в редакторе кода.
IQB_CODE_EDITOR_DISABLE_ADVANCEDfalseОтключает расширенный режим редактора кода.

Отладка​

ПеременнаяНазначение
DEBUGОбласти отладки, например iqbot:dialog:*,iqbot:nlu:*.
IQB_DEBUG_IOВключает замер времени обработки входящих и исходящих событий.
IQB_DIAGtrue запускает платформу в режиме диагностического отчёта вместо обычного запуска.
IQB_DIAG_INCLUDE_PASSWORDStrue отключает скрытие паролей и секретов в отчёте. Такой отчёт нельзя отправлять в поддержку.
Не отключайте песочницу

Переменные DISABLE_GLOBAL_SANDBOX, DISABLE_BOT_SANDBOX, DISABLE_TRANSITION_SANDBOX и DISABLE_CONTENT_SANDBOX выполняют код ботов вне изолированной среды. Это ускоряет работу, но снимает защиту. В продуктиве их включать не нужно.

Главный конфиг iqbot.config.json​

Сервер читает главный конфиг при запуске. Если файл изменили, пока сервер работает, в правом нижнем углу консоли и Studio появляется красная шестерня. Подсказка по ней и окно, которое открывается по нажатию, перечисляют изменённые параметры по именам (например, mail.transport), без значений, чтобы пароли не попадали на экран. Изменения вступают в силу после перезагрузки сервера: кнопка «Перезагрузить сервер» в окне перезапускает процесс, страница обновится сама. Если вернуть файл к исходному виду, шестерня исчезнет. Тот же список отдаёт запрос GET /api/v2/admin/management/configHash в поле changedKeys.

Окно «Конфигурация изменена» со списком изменённых параметров

Любой параметр главного конфига можно переопределить переменной окружения IQB_CONFIG_<ПУТЬ>: имя пути записывается заглавными буквами, точки заменяются подчёркиваниями. Например, httpServer.cors.enabled задаётся как IQB_CONFIG_HTTPSERVER_CORS_ENABLED=false, а decisionMinMargin как IQB_CONFIG_DECISIONMINMARGIN=0.1. Значение разбирается как JSON, поэтому числа, true/false и массивы задаются как обычно, остальное считается строкой.

Основные параметры. Время и размеры записываются в формате 10s, 25m, 2 weeks, 25mb.

Сервер​

ПараметрПо умолчаниюНазначение
httpServer.hostlocalhostЗначение localhost не ограничивает доступ: платформа слушает все интерфейсы. Чтобы слушать только локальный адрес, задайте 127.0.0.1.
httpServer.port3000Порт ядра. Если порт занят, платформа выберет следующий свободный и напишет предупреждение.
httpServer.externalUrlне заданВнешний адрес платформы, то же, что EXTERNAL_URL.
httpServer.bodyLimit10mbМаксимальный размер тела запроса.
httpServer.socketTransports["websocket","polling"]Транспорты соединения в реальном времени (прогресс обучения, события Studio, эмулятор). Если обратный прокси не пропускает WebSocket, задайте IQB_CONFIG_HTTPSERVER_SOCKETTRANSPORTS='["polling"]': браузеры не будут пытаться открыть WebSocket и сразу работают через обычные запросы (long polling). Когда прокси начнёт пропускать WebSocket, уберите переменную.
httpServer.cors.enabledtrueПолитика CORS. По умолчанию разрешены запросы из любого источника.
httpServer.cors.originне заданРазрешённый источник.
httpServer.rateLimit.enabledfalseОграничение числа запросов с одного IP.
httpServer.rateLimit.limit и limitWindow600 за 30sПорог ограничения. Учитывает запросы админки, Studio и чата.
httpServer.session.enabledfalseСерверные сессии.
httpServer.headers{"X-Powered-By": "iQBot"}Заголовки, которые добавляются ко всем ответам.

Безопасность и доступ​

ПараметрПо умолчаниюНазначение
superAdminsзаполняется при первом входеСписок супер-администраторов: адрес электронной почты и стратегия входа. Первый зарегистрированный пользователь добавляется автоматически.
authStrategies{"default": {"type": "basic"}}Способы входа: базовая стратегия, OpenID Connect (oauth2), LDAP. Параметры каждого типа описаны в разделе Аутентификация и единый вход.
authStrategies.default.options.twoFactoroffВторой фактор базовой стратегии: off, optional, required.
collaboratorsAuthStrategies["default"]Метод входа платформы: первая стратегия списка — единственная, через которую можно войти; остальные элементы сохраняют лишь доступ ранее созданных пользователей к пространствам.
externalAuthвыключенаПроверка конечных пользователей (клиентов чата) по JWT из внешней системы: enabled, ключ проверки подписи или адрес JWKS, допустимые алгоритмы. Данные из токена доступны ботам в event.credentials.
branding.admin, branding.studio, branding.webchatiQBotНазвание во вкладке браузера (title), значок (favicon) и свой файл стилей (customCss) консоли, Studio и веб-чата.
mail.transport, mail.fromне заданыИсходящая почта платформы (ссылки для сброса пароля): строка SMTP или объект nodemailer и адрес отправителя. Задаются и на странице «Настройки сервера».
authStrategies.default.options.maxLoginAttempt5Число неудачных попыток входа до блокировки.
authStrategies.default.options.lockoutDuration15mДлительность блокировки после неудачных попыток.
authStrategies.default.allowSelfSignupfalseРазрешена ли самостоятельная регистрация.
jwtToken.duration1hСрок действия токена доступа к консоли и Studio.
jwtToken.allowRefreshtrueОбновлять токен каждые 5 минут, пока пользователь в системе.
jwtToken.useCookieStoragefalseХранить токен в защищённом cookie, а не в localStorage браузера.
allowServerReboottrueРазрешить супер-администратору перезапускать сервер из консоли. В продуктиве рекомендуется отключить.
fileUpload.maxFileSize25mbМаксимальный размер загружаемого медиафайла.
fileUpload.allowedMimeTypesизображения, аудио, видео, PDFРазрешённые типы загружаемых файлов.

Журналы и события​

ПараметрПо умолчаниюНазначение
logs.dbOutput.expiration2 weeksСрок хранения журналов в базе данных.
logs.fileOutput.enabledfalseПисать журналы в файлы, новый файл каждый день.
logs.fileOutput.folder./Каталог файлов журнала.
logs.fileOutput.maxFileSize10000Размер файла журнала в килобайтах, после которого начинается новый.
eventCollector.enabledtrueСохранять входящие и исходящие события в базе. Нужно ряду разделов Studio.
eventCollector.retentionPeriod30dСрок хранения событий.
eventCollector.ignoredEventTypes["visit","typing"]Типы событий, которые не сохраняются.
botMonitoring.enabledtrueНакопление ошибок ботов для хука OnBotError.

Диалог​

ПараметрПо умолчаниюНазначение
dialog.timeoutInterval25mЧерез сколько без активности пользователь возвращается в начало процесса.
dialog.sessionTimeoutInterval30mЧерез сколько без активности сессия и её переменные удаляются.
decisionMinMargin0.15Минимальный отрыв лучшего ответа от второго. Если разрыв меньше, оба отбрасываются и бот отвечает как на непонятную фразу. Значение 0 отключает проверку.
noRepeatPolicyfalseНе повторять ответ бота, если он уже недавно его давал.
autoRevisionfalseАвтоматически сохранять ревизию бота при изменении или смене стадии.
botCategories[]Категории, в которых можно создавать ботов.
showPoweredBytrueПоказывать подпись в веб-чате.
additionalLanguages[]Дополнительные языки для перевода бота сверх установленных на языковом сервере.

Настройки бота (bot.config.json)​

Файл лежит в каталоге бота (data/bots/<бот>/bot.config.json) и правится в Studio в разделе «Настройка». Параметры, которых нет в интерфейсе:

ПараметрПо умолчаниюНазначение
qna.disabledfalseОтключает базу вопросов-ответов бота.
qna.answerInsideFlowfalseОтвечать на вопросы из базы знаний, пока процесс ждёт реплику клиента; процесс остаётся на том же звене. В Studio: переключатель «Вопросы-ответы внутри процесса».
converse.timeout5sСколько ждать ответа бота на одно сообщение через Converse API; дольше — ответ 504.
converse.bufferDelayMs100Пауза после ответа бота на запоздавшие реплики.

Настройки модулей​

Настройки модуля читаются слоями, каждый следующий слой перекрывает предыдущий:

  1. значения по умолчанию из схемы модуля;
  2. глобальный файл data/global/config/<модуль>.json;
  3. переменные окружения IQB_MODULE_<МОДУЛЬ>_<ПАРАМЕТР>;
  4. файл настроек конкретного бота data/bots/<бот>/config/<модуль>.json.

Имя переменной окружения составляется из имени модуля и пути параметра заглавными буквами, всё, кроме букв и цифр, заменяется подчёркиванием. Значение разбирается как JSON. Примеры: IQB_MODULE_NLU_DUCKLINGENABLED=false, IQB_MODULE_NLU_LANGUAGESOURCES=[{"endpoint":"http://localhost:3150"}].

NLU (nlu.json)​

ПараметрПо умолчаниюНазначение
nluServer{"autoStart": true}Запускать ли NLU вместе с ядром. Чтобы подключиться к уже запущенному серверу: {"autoStart": false, "endpoint": "http://хост:3200"}.
languageSources[{"endpoint": "http://localhost:3150"}]Адрес языкового сервера (и authToken, если сервер запущен с --authToken). Редактируется на странице «Настройки сервера».
ducklingEnabledtrueИспользовать Duckling для системных сущностей. Если Duckling не установлен, задайте false.
ducklingURLhttp://localhost:8000Адрес Duckling (образ iqbot-platform/duckling).
modelCacheSize850mbРазмер кэша обученных моделей в памяти.
maxTrainingPerInstance1Сколько обучений может идти одновременно.
queueTrainingOnBotMountfalseСтавить ли в очередь обучение ботов, требующих его, при запуске.

Базовые навыки (basic-skills.json)​

ПараметрПо умолчаниюНазначение
defaultGptUrlhttp://127.0.0.1:8001/v1/chat/completionsАдрес языковой модели для звена «ИИ-агент» по умолчанию.
defaultGptModelQwen3-8BНазвание модели по умолчанию.
gptProfiles, defaultGptProfile, defaultGptTimeoutMs{}, "", 60000Профили шлюзов для звена «ИИ-агент», см. ИИ-агент на основе GPT. Редактируются на странице «Настройки сервера» консоли.
transportConnectionString<<change me>>Подключение к почтовому серверу для звена отправки письма, строка в формате SMTP.
defaultMaxAttempts3Число попыток при выборе варианта в звене «Выбор».

Тестирование (testing.json)​

ПараметрПо умолчаниюНазначение
scenarioTimeout5000Сколько миллисекунд сценарий может ждать ответа бота, прежде чем считаться проваленным.

Веб-чат (channel-web.json)​

Основные параметры: recentConversationLifetime (по умолчанию 6 hours, время, в течение которого возвращающийся пользователь продолжает прежний разговор), startNewConvoOnTimeout (false), maxMessageLength (360), параметры загрузки файлов, в том числе в S3 (uploadsUseS3, uploadsS3Bucket и другие).