Привет! Это Илья, руководитель проектов в Webest. Домен нужен каждому проекту, но подобрать доменное имя — тот ещё квест. Мы решили эту задачу, разработав ИИ-генератор доменных имён. В его основе Yandex GPT, генеративные промты и модуль на CMS «1С-Битрикс». Рассказываю, почему возникла потребность в применении ИИ и делюсь инструкцией по разработке своего модуля и интеграции с Yandex GPT.
Почему возникла потребность в применении технологий ИИ
Раньше сервис подбирал домены по заданным фильтрам — ключевым словам, тематике, региону. Это работало, но довольно шаблонно. Если нужное слово уже занято, результаты быстро становились скучными или нерелевантными.
Допустим, вам нужно найти короткое, звучное, запоминающееся доменное имя для нового проекта. Такое, чтобы отражало суть бизнеса, выделяло вас на фоне конкурентов и, конечно, было доступно для регистрации.
Но всё, что приходит в голову — уже занято. А свободные варианты выглядят неудачными и не передают суть бренда.
Мы задумались, как подойти к поиску домена системно и с умом и упростить этот процесс — и внедрили технологии искусственного интеллекта.
ИИ позволяет решить сразу несколько задач:
Генерировать креативные и нестандартные варианты, даже если все очевидные имена уже заняты.
Учитывать смысл запроса, а не только отдельные слова — пользователь может просто описать свой проект, и система предложит подходящие доменные имена.
Обучаться на пользовательских реакциях — чем больше людей пользуются сервисом, тем точнее становятся предложения.
Фильтровать спорные или нежелательные варианты и формировать безопасную, этичную выдачу.
Как происходит генерация доменных имен
В рамках проекта по автоматизации подбора доменных имен мы разработали модуль для CMS «1С-Битрикс», позволяющий с помощью искусственного интеллекта генерировать и проверять свободные доменные имена второго уровня в зонах .RU и .РФ.
Модуль интегрирован с Yandex GPT и предоставляет пользователю список логически и тематически подходящих, а главное — свободных доменов на основе введенного запроса.
Всё происходит в несколько кликов, а за процессом — сложная, но гибкая архитектура с подключением внешних API, внутренней валидацией и аналитикой.
Почему мы выбрали Yandex GPT
Мы провели тестирование 6 нейросетей, из которых Yandex GPT показала наилучший результат. Она обошла конкурентов по качеству генерации, а ещё — это отечественная разработка. Это значит, что нет риска блокировок, и мы можем быть уверены в её стабильной работе на долгосрочной основе.
Как это работает
Процесс начинается на пользовательской странице сервиса — /service/select-ai/. Интерфейс прост: пользователь вводит описание организации или проекта, на основе которого будут предлагаться домены, выбирает желаемую длину домена — короткий (3–9 символов), средний (10–15) или длинный (15–63), и нажимает кнопку «Подобрать домены».
Вот что происходит дальше:
Формируется запрос к Yandex GPT.
Промт дополняется системными инструкциями: задаются ограничения по длине, формат ответа в JSON и стилистика генерации (английские и русские домены, допустимые дефисы, отсутствие нецензурной лексики).Обрабатывается ответ от Yandex GPT.
Модель возвращает более 80 доменных имен, которые мы валидируем и очищаем от доменных зон.Проверяется доступность домена.
Каждое имя проверяется на занятость через Whois-сервисы. Только свободные домены попадают в список, отображаемый пользователю.Выдается результат.
На экране показываются первые 10 доменов, остальные подгружаются по кнопке «Показать ещё». У каждого домена — кнопки «Зарегистрировать» (переход к выбору регистратора) и «Скрыть» (исключение из будущих подборов).Собирается статистика.
Все действия фиксируются: запрос, предложенные варианты, оценки результата, выбор и последующая регистрация — это позволяет строить детальную аналитику по эффективности сервиса.
Что видит пользователь
Интерфейс сервиса состоит из нескольких ключевых блоков:
Переключатель между классическим и AI-подбором;
Поле ввода промта и выбор длины домена;
Кнопка запуска генерации;
Список доменов с управлением (показать больше, скрыть, зарегистрировать);
Оценка результата (нравится/не нравится);
Инфоблок с описанием, анимацией и переходами.
Результаты отображаются мгновенно в виде свободных доменов.
Также реализовали подсказки при вводе ключевых слов, очистку дублей и неподходящих слов до отправки в ИИ, добавили возможность исключить нежелательные варианты — они добавляются в «стоп-лист».
Одним из важных элементов стала подсказка внутри генератора доменов.
Те, кто хоть раз общался с нейросетью, знают: как задашь вопрос — так и получишь ответ.
Нам нужно было просто и понятно объяснить это пользователю, не перегружая интерфейс. Подсказка получилась короткой, полезной и хорошо заметной.
Внутри системы: что под капотом
Модуль разработан как полноценное решение для CMS «1С-Битрикс» и включает в себя:
Компонент domains-ai для отображения и работы публичной части;
API-интеграцию с Yandex GPT;
-
Три Highload-блока для хранения:
предложенных доменов,
пользовательских оценок,
агрегированной статистики по регистрации;
Административный интерфейс с гибкими настройками (модель GPT, ключ, часть технического промта, температура генерации и пр.);
Крон-скрипты для актуализации данных по зарегистрированным доменам из архива Координационного центра.
Работа с данными и дообучение
Пользователь может пометить неудачный результат как «не предлагать». Все такие отклики сохраняются в отдельную таблицу и формируют выборку, которая поможет скорректировать и улучшить генерацию в будущем.
Административная часть
Разработали собственный модуль с полноценной страницей настроек в административной панели, где можно:
изменить используемую модель Yandex GPT;
задать системный промт;
задать температуру генерации;
обновить API-ключ;
подключиться к архиву сайта, для которого реализовали модуль;
Важно: модель и технический промт можно менять без переписывания кода — всё вынесено в интерфейс администратора.
Подробная статистика
Для сбора аналитики внедрены три Highload-блока:
Сгенерированные AI-домены — лог всех доменов, показанных пользователям. Сохраняем все результаты генерации и статус занятости доменов.
Оценка результатов — фиксация пользовательского фидбэка.
Месячная аналитика — данные об общем количестве запросов, регистрации, конверсии.
Для удобства работы с отчетами предусмотрели фильтры: по дате, зоне (.RU / .РФ), статусу (свободен / занят).
Администратор получает отчеты в CSV, без участия пользователей. Данные можно выгружать в Excel через стандартный функционал «1С-Битрикс».
Установка и настройка
Модуль легко устанавливается через стандартный интерфейс «1С-Битрикс». Достаточно:
Распаковать архив в /local/modules;
Выполнить установку;
Настроить API-ключ и модель в разделе настроек;
Разместить компонент на нужной странице.
Ниже прилагаю подробную инструкцию по разработке.
Как разработать модуль генерации доменов и интегрировать с Yandex GPT для 1С-Битрикс
Создайте структуру модуля
Название – по стандарту.
Папки:
/install/ — установка HL-блоков и настроек
/install/components/webest/domains-ai/ — публичный компонент
/lib/ — классы модуля
/cron/ — тут будет располагаться наши скрипты расчета статистики
include.php — подключение файлов модуля
options.php — настройки нашего модуля
2. Компонент domains-ai (публичная часть)
Компонент мы будем располагать на странице. Он отвечает за начальную загрузку шаблона и обработку ajax-запросов.
class CDomainsAIComponent extends \CBitrixComponent implements Controllerable
{
// Описываем методы контроллера для обработки ajax-запросов. В данном случае описан основной метод генерации доменных имен. Используемый метод POST и Csrf-защита.
public function configureActions(): array
{
return [
'generate' => [
'prefilters' => [
new HttpMethod([HttpMethod::METHOD_POST]),
new Csrf(),
],
'postfilters' => []
],
];
}
//главный метод любого компонента — подключение шаблона:
public function executeComponent()
{
$this->includeComponentTemplate();
return;
}
В конфигурации мы описали метод generate. Теперь создадим функцию для обработки запроса:
public function generateAction(string $request, $minLength = 2, $maxLength = 63, $loadMore = false)
{}
1С-Битрикс будет автоматически вызывать его и подставлять нужные параметры (нас интересует длина текст пользователя, желаемая длина и флаг для пагинатора). Метод проверяет входные параметры, вызывает функцию генерации доменов, затем проверяет их на занятость, а затем отдает на фронтенд в виде массива.
3. API-интеграция с Yandex GPT
Главное, что делает основной контроллер — запрашивает генерацию доменов у Yandex GPT.
//Параметры подключения (модель и апи-ключ, температура) к Yandex GPT настраиваются пользователем на странице в админке.
$yaApiKey = Option::get(self::MODULE_ID, "ya_api_key");
$yaModel = Option::get(self::MODULE_ID, "ya_model");
$yaTemperature = Option::get(self::MODULE_ID, 'ya_temperature');
$result = [];
//системную инструкцию (в каком виде отдавать ответ) тоже можно настроить в админке или использовать настроенную по умолчанию.
$systemRoleText = Option::get(self::MODULE_ID, 'ya_instruction');
if (empty($systemRoleText)) {
$systemRoleText = $this->defaultSystemText;
}
Тут нужно уточнить — поскольку Yandex GPT отдает в качестве ответа текст, мы попросили заказчиков писать системную инструкцию по шаблону, чтобы модель генерировала ответ в определенном формате, но можно было дополнить какими-то ограничениями на смысл.
Также мы добавляли в технический промт, что хотим получать ответ в формате json и необходимую длину домена — «Длина домена должна быть от %d до %d символов.»
Нужен ответ в формате json {"en": [], "ru": []}”
//дополнили инструкцию ограничениями по длине:
$minLength = max($minLength, 3);
$maxLength = min($maxLength, 63);
$systemRoleText .= "\n" . sprintf($this->answerFormat, $minLength, $maxLength);
Данные запроса:
$requestData = [
"modelUri" => $yaModel,
"completionOptions" => [
"stream" => false,
"temperature" => $yaTemperature,
"maxTokens" => 1000,
"reasoningOptions" => [
"mode" => "DISABLED"
]
],
"messages" => [
[
"role" => "system",
"text" => $systemRoleText,
],
[
"role" => "user",
"text" => $request //описание пользователя
]
],
"jsonObject" => true
];
Запрос делаем с помощью стандартного http-клиента 1С-Битрикс:
$http = new HttpClient();
$http->post($this->baseYaUrl, json_encode($requestData)));
$response = $http->getResult();
В параметрах мы указывали, что хотим получать ответ в виде json:
$response = json_decode($response, true);
В ответе нас интересуют поля статус и ['message']['text'].
$status = $response['result']['alternatives'][0]['status'];
$answer = $response['result']['alternatives'][0]['message']['text'];
В переменной статус находится соответственно статус ответа. Для нас он должен быть 'ALTERNATIVE_STATUS_FINAL' (полный ответ) или 'ALTERNATIVE_STATUS_TRUNCATED_FINAL' - обрезанный ответ, если он оказался длиннее указанного запросе количества токенов.
В случае полного ответа, поскольку в техническом промте мы указывали, что хотим получать ответ в json, можно попробовать сразу преобразовать его в массив.
В случае неполного ответа — текст ответа получается обрезанным, и пришлось добавлять закрывающие символы для корректного json.
В рамках тестирования, YandexGPT в основном отдавал ответ правильно, как и запрашивали — в json.
Далее полученные доменные имена нужно проверить на доступность. Это можно сделать с помощью сервиса Whois.
$socket = fsockopen("whois.tcinet.ru", "43", $errno, $errstr);
$idnDomain = idn_to_ascii($domain);
fputs($socket, "domain: $idnDomain");
$buffer = "";
while (!feof($socket)) {
$buffer .= fgets($socket, 4096);
}
//проверяем что домен не занят и что может быть зарегистрирован:
$pos = strpos($buffer, 'No entries found for the selected source(s).');
$pos_block = strpos($buffer, 'blocking: Domain can not be registered.');
Таким образом формируем список доменных имен, которые показываем пользователю для выбора.