Серия 17: заполнение описаний карточек товаров с помощью нейросети AI

Внимание! Все сообщения на форуме проходят модерацию. Ваше сообщение появится после проверки.

Серия 17: заполнение описаний карточек товаров с помощью нейросети AI

Чеклист:


Агенты на крон
Очистка элементов
Агент для AI заполнения карточек
Код
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

$IBID = 14;
$el = new CIBlockElement();
$url = 'https://api.aitunnel.ru/v1/chat/completions'; 
$api_key = 'sk-aitunnel-123456';

$ibClass = \Bitrix\Iblock\Iblock::wakeUp($IBID)->getEntityDataClass();

// Параметры пагинации
$pageSize = 100;
$offset = 0;

do {
    echo "<h3>Обработка порции: " . ($offset + 1) . "–" . ($offset + $pageSize) . "</h3>\n";
    flush(); // Отправляем буфер в браузер для мониторинга

    // Получаем порцию элементов
    $dbElements = $ibClass::getList([
        'select' => ['ID', 'NAME', 'DETAIL_TEXT'],
        'limit' => $pageSize,
        'offset' => $offset,
        'order' => ['ID' => 'ASC'],
    ])->fetchAll();

    if (empty($dbElements)) {
        echo "✅ Все элементы обработаны.<br>";
        break;
    }

    foreach ($dbElements as $element) {
        $id = $element['ID'];
        $name = trim($element['NAME']);
        $desc = trim($element['DETAIL_TEXT'] ?? '');

        echo "Обрабатываю ID {$id}: " . htmlspecialchars(substr($name, 0, 50)) . "…<br>";
        flush();

        $prompt = "Ты — опытный автор объявлений для доски объявлений с б/у товарами. На основе названия и технических характеристик товара составь продающее описание объёмом около 1500 символов. Пиши только сплошным текстом — никаких списков, маркированных пунктов, заголовков, жирного шрифта или спецсимволов. Описание должно быть информативным, честным (указывай, что товар б/у), подчёркивать практическую пользу, совместимость, состояние и особенности использования. Включи ключевые параметры: модель, тип вилок/розеток, максимальную нагрузку, габариты, вес, цвет, бренд — но интегрируй их естественно в повествование, без сухого перечисления. Не выдумывай параметры, которых нет в исходных данных. Сохрани нейтрально-доброжелательный тон, избегай шаблонных фраз вроде «не упусти шанс». Заверши призывом к действию: возможность осмотреть, забрать, отправить и т.п.\n\nНазвание товара: {$name}\nДополнительные характеристики (если есть): {$desc}";

        $data = [
            'model' => 'gpt-5-mini',
            'max_tokens' => 1000,
            'temperature' => 0.5,
            'messages' => [
                ['role' => 'user', 'content' => $prompt],
            ],
        ];

        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Authorization: Bearer ' . $api_key,
        ]);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);

        $result = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $error = curl_error($ch);
        curl_close($ch);

        if ($httpCode === 200 && $result) {
            $responseData = json_decode($result, true);
            if (!empty($responseData['choices'][0]['message']['content'])) {
                $newText = trim($responseData['choices'][0]['message']['content']);
                // Опционально: обрезаем до ~1600 симв., чтобы точно уложиться
                if (mb_strlen($newText) > 1600) {
                    $newText = mb_substr($newText, 0, 1600) . '…';
                }

                $updateResult = $el->Update($id, ['DETAIL_TEXT' => $newText]);
                if ($updateResult) {
                    echo "✅ ID {$id} обновлён.<br>";
                } else {
                    echo "❌ Не удалось обновить ID {$id}: " . $el->LAST_ERROR . "<br>";
                }
            } else {
                echo "⚠️ Пустой ответ от API для ID {$id}<br>";
            }
        } else {
            echo "❌ Ошибка API (HTTP {$httpCode}) для ID {$id}: " . ($error ?: $result) . "<br>";
        }

        // Пауза между запросами — защита от рейт-лимита
        usleep(500000); // 0.5 секунды
    }

    $offset += $pageSize;
    echo "<hr>";

} while (count($dbElements) === $pageSize);

echo "<h2>✅ Обработка завершена.</h2>";
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_after.php');
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость разработки на 1С-Битрикс:

Индивидуальная разработка магазина

от 500 000 руб. от 5-ти недель

Разработка магазина на 1С-Битрикс с нуля. Дизайн, сборка и оптимизация производительности под конкретный проект и требования. Реализация любого функционала без ограничений готовых решений.

Запуск сайта на готовом решении

от 150 000 руб. от 7-ми дней

Вариант для тех, кто не хочет тратить много средств на индивидуальный проект, и не имеет серьезных требований к сайту. Магазин, быстро запускается на базе одного из 200-та готовых решений.

Мобильное приложение

от 400 000 руб. от 5-ти недель

Разработка кроссплатформенного мобильного приложения, которое не уступает нативным решениям как в производительности, так и пользовательском опыте. Публикуется в AppStore, GooglePlay и RuStore

Сайт компании

от 300 000 руб. от 2-х недель

Корпоративный сайт с информационными разделами, каталогом товаров или услуг. Включает формы обратной связи карточек каталога, любое количество статичных и динамичных разделов.

Инфоресурс

от 300 000 руб. от 4-х недель

Информационный ресурс любой сложности. Сайт для СМИ, городской портал или многопользовательская доска объявлений. Внутренние форумы, блоги- по необходимости.

3D‑моделирование, визуализация

от 25 000 руб. от 3-х дней

По вашим фото, чертежам или описанию создадим 3D‑модели и отрендерим набор изображений для каталога товаров: общий вид, крупные планы и технические ракурсы или 360°‑обзор товара.