О проекте
Команда: Honourable
Кейс HackAlem.ai: Торговля — Электрокомплект · ekt.kz
Стадия: Прототип
Задача кейса: AI-консультант по каталогу ekt.kz: товары, аналоги, цены, остатки, корзина
Суть
Next.js-виджет чата поверх каталога ekt.kz: поиск по артикулу и названию, цена, остатки по складам и характеристики, ответы об оплате и доставке, подбор аналогов и демо-корзина с подтверждением.
Как устроено
Браузер обращается к серверным маршрутам Next.js, которые ищут по первым EKT_MAX_PAGES страницам API ekt.kz (Basic Auth) и запрашивают детальные карточки. Модель gpt-4.1-mini через OpenAI Responses API с вызовом функций получает только релевантные результаты. Сценарий добавления: предложение, явное подтверждение, повторная проверка остатка, запись в корзину /cart в localStorage. Аналоги подбираются модулем alternatives.ts.
Ключевые решения
- function calling
- catalog API search
- stock re-check before cart add
Особенности
Код лежит во вложенной папке Codex/2026-09-23/…, а в дереве нет package.json (есть только package-lock.json), поэтому запуск по инструкции может не сработать.
Стек
Next.js · TypeScript · Node.js · Tailwind CSS · OpenAI Responses API
Модели
gpt-4.1-mini
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-3fdda286-honourable.
README
Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/README.mdEKT AI-консультант
Прототип ИИ-помощника для каталога ekt.kz. Решение помогает покупателям находить товары по артикулу или названию, получать актуальную информацию о цене, наличии и характеристиках, узнавать условия оплаты и доставки, подбирать возможные аналоги и добавлять позиции в демонстрационную корзину.
Какую проблему решает проект
Пользователю каталога не нужно вручную просматривать множество карточек товаров и сопоставлять их характеристики. Он может сформулировать запрос в чате и получить подходящие позиции на основе данных каталога.
Чтобы снизить риск ошибочной покупки, добавление товара в корзину выполняется только после явного подтверждения пользователя и повторной проверки остатка.
Что реализованною
- плавающее окно чата поверх страницы каталога;
- поиск товаров по артикулу и названию;
- загрузка товаров из API ekt.kz;
- серверный поиск по первым страницам каталога;
- получение цены, остатка, списка складов и характеристик из детальной карточки товара;
- ответы на вопросы об оплате и доставке;
- подбор кандидатов-аналогов при отсутствии товара;
- краткое описание каждого альтернативного товара для клиента;
- вызов функций через OpenAI Responses API;
- безопасный сценарий добавления товара: предложение, подтверждение, повторная проверка остатка, добавление в корзину;
- адаптивная страница
/cartс демонстрационной корзиной; - хранение демонстрационной корзины в
localStorageбраузера.
Структура проекта
ekt-ai-assistant/
├── .env.example
├── .gitignore
├── README.md
├── package.json
├── next.config.ts
├── tsconfig.json
├── postcss.config.js
├── tailwind.config.ts
├── src/
│ ├── app/
│ │ ├── api/
│ │ │ ├── cart/
│ │ │ │ └── confirm/
│ │ │ ├── catalog/
│ │ │ └── chat/
│ │ ├── cart/
│ │ │ └── page.tsx
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ └── page.tsx
│ ├── components/
│ │ ├── assistant-widget.tsx
│ │ ├── catalog.tsx
│ │ └── product-card.tsx
│ └── lib/
│ ├── alternatives.ts
│ ├── cart.ts
│ ├── ekt.ts
│ ├── types.ts
│ └── alternatives.test.ts
└── public/
Как работает решение
- Пользователь вводит в чате артикул, название товара или вопрос.
- Браузер отправляет запрос в серверный маршрут Next.js.
- Сервер выполняет поиск через API ekt.kz и при необходимости запрашивает детальную карточку товара.
- Модель получает только подходящие результаты и формирует ответ пользователю.
- При запросе на добавление товара ассистент ожидает явного подтверждения.
- После подтверждения сервер повторно проверяет остаток.
- Доступная позиция добавляется в демонстрационную корзину на странице
/cart.
Технологии
- Next.js — пользовательский интерфейс и серверные маршруты;
- JavaScript / Node.js 20+ — среда запуска приложения;
- OpenAI Responses API — обработка диалога и вызов функций;
gpt-4.1-mini— используемая AI-модель;- API ekt.kz — каталог и детальные данные товаров;
- Basic Auth — авторизация при обращении к API каталога;
localStorage— хранение демонстрационной корзины в браузере.
Архитектура проекта
Браузер обращается только к серверным маршрутам Next.js. Сервер хранит данные доступа к API ekt.kz и OpenAI, выполняет поиск, получает сведения о товарах и передаёт модели только релевантные результаты. Ключ OpenAI и данные Basic Auth не передаются в браузер.
Пользователь
↓
Интерфейс чата в браузере
↓
Серверные маршруты Next.js
├──→ API ekt.kz: поиск и карточки товаров
└──→ OpenAI Responses API: диалог и вызов функций
Браузер
└──→ localStorage: демонстрационная корзина
Установка и запуск
Требования
- Node.js 20 или новее;
- доступ к API ekt.kz;
- ключ OpenAI API.
Шаги
-
Установите зависимости:
npm install -
Скопируйте
.env.exampleв.env.local:cp .env.example .env.local -
Заполните переменные окружения:
EKT_API_USER=имя_пользователя EKT_API_PASSWORD=пароль OPENAI_API_KEY=ключ_openai EKT_MAX_PAGES=число_страницEKT_MAX_PAGESограничивает количество страниц каталога, просматриваемых сервером при поиске. -
Запустите приложение:
npm run dev -
Откройте http://localhost:3000.
-
Для проверки production-сборки выполните:
npm run build
.env.localисключён из Git. Не публикуйте его содержимое и не передавайте секреты в браузер, README, скриншоты или презентацию.
Как проверить решение
- Откройте чат и отправьте:
Есть ли 027228? Покажи характеристики. - Попросите предложить аналог отсутствующего товара.
- Задайте вопрос об оплате или доставке.
- Напишите:
Добавь 3 штуки в корзину. - Убедитесь, что до подтверждения корзина не изменилась.
- Подтвердите действие и откройте
/cart. - Повторите добавление с количеством больше остатка. Приложение должно остановить добавление и сообщить доступное количество.
Данные и интеграции
- каталог товаров:
https://ekt.kz/api/products; - детальная карточка:
https://ekt.kz/api/products/detail?id=ID; - OpenAI Responses API.
Цена, остаток и характеристики отображаются на основе ответов API ekt.kz. Если поля противоречат названию или описанию товара, ассистент должен предупредить пользователя.
Ограничения
- поиск ограничен первыми страницами каталога; их количество задаётся через
EKT_MAX_PAGES; - корзина демонстрационная и хранится локально в браузере;
- изменение настоящей корзины ekt.kz не реализовано, поскольку соответствующий API не предоставлен;
- для внедрения на рабочий сайт нужны внутренний endpoint корзины ekt.kz и проверка пользовательской сессии;
- загрузка файлов Excel, Word, PDF и JPEG не входит в текущую версию MVP.
Развёрнутая версия
Подтверждённая ссылка на развёрнутую версию не указана.
Авторы коммитов
История коммитов
- 2026-09-23 17:31resolve merge: EKT AI assistant updateDinmukhamed Rakhmetov
- 2026-09-23 17:31feat: add EKT AI assistant UI and alternative product suggestionsDinmukhamed Rakhmetov
- 2026-09-23 17:27Delete ekt_assistentb3kosh
- 2026-09-23 17:24Delete Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant directorymaedim
- 2026-09-23 17:14Delete README.mdmaedim
- 2026-09-23 16:00Update README.mdb3kosh
- 2026-09-23 15:08Revise READMEmaedim
- 2026-09-23 14:55Add files via uploadb3kosh
Все коммиты (10)
- 2026-09-23 13:59Create ekt_assistentmaedim
- 2026-09-23 13:53Add a new line to README for claritymaedim
Структура репозитория (16 файлов)
Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/.env.example Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/.gitignore Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/README.md Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/next-env.d.ts Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/package-lock.json Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/app/api/chat/route.ts Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/app/cart/page.tsx Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/app/globals.css Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/app/layout.js Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/app/page.tsx Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/components/assistant-widget.tsx Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/components/catalog.tsx Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/components/product-card.tsx Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/lib/alternatives.ts Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/lib/ekt.ts Codex/2026-09-23/referenced-chatgpt-conversation-this-is-an/outputs/ekt-ai-assistant/src/lib/types.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.