const http = require('http'); const url = require('url'); const port = process.env.PORT || 3000; const ALEM_BASE_URL = process.env.ALEM_BASE_URL; const ALEM_API_KEY = process.env.ALEM_API_KEY; const ALEM_TEMPLATE_ID = process.env.ALEM_TEMPLATE_ID; async function callAlem(prompt) { const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${ALEM_API_KEY}`, }; const sessRes = await fetch(`${ALEM_BASE_URL}/api/v1/open-api/conversation`, { method: 'POST', headers, body: JSON.stringify({ template_id: ALEM_TEMPLATE_ID, title: 'OKTRU', user_id: 'dauren-oktru' }), }); const sessData = await sessRes.json(); const sessionId = sessData.session_id || sessData.data?.session_id; if (!sessionId) throw new Error('Нет session_id'); const sendRes = await fetch(`${ALEM_BASE_URL}/api/v1/open-api/conversation/${sessionId}/send`, { method: 'POST', headers, body: JSON.stringify({ content: prompt, user_id: 'dauren-oktru', model_api_key: ALEM_API_KEY }), }); const text = await sendRes.text(); console.log(`--- Сырой SSE (${text.length} байт) ---`); console.log(text.slice(0, 3000)); let result = ''; for (const line of text.split('\n')) { if (line.startsWith('data:')) { try { const evt = JSON.parse(line.slice(5)); if ((evt.type || evt.event) === 'message_result' && evt.detail?.full_content) result = evt.detail.full_content; } catch {} } } return result || '(пустой ответ)'; } function page(resultBlock, logBlock) { return ` Поиск кода ОКТРУ

🔍 Поиск кода ОКТРУ

Введите название товара — агент найдёт подходящий код

${resultBlock}
${logBlock}
`; } http.createServer(async (req, res) => { let q = ''; if (req.method === 'POST') { let body = ''; await new Promise(resolve => { req.on('data', c => body += c); req.on('end', resolve); }); const params = new URLSearchParams(body); q = (params.get('q') || '').trim(); } else { const parsed = url.parse(req.url, true); q = (parsed.query.q || '').trim(); } if (q) { const logs = []; try { logs.push(`[${new Date().toLocaleTimeString('ru')}] 📨 Запрос: "${q}"`); console.log(`Запрос: "${q}"`); logs.push(`[${new Date().toLocaleTimeString('ru')}] ⏱ Вызываю агент Alem...`); const answer = await callAlem(`Найди код ОКТРУ для товара: ${q}. Ответь кратко — только код и название позиции.`); logs.push(`[${new Date().toLocaleTimeString('ru')}] ✅ Ответ получен (${answer.length} символов)`); console.log(`Ответ: ${answer.slice(0, 200)}`); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(page(`
${answer}
`, logs.join('\n'))); } catch (e) { logs.push(`[${new Date().toLocaleTimeString('ru')}] ❌ Ошибка: ${e.message}`); console.error('Ошибка:', e.message); res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(page(`
Ошибка: ${e.message}
`, logs.join('\n'))); } } else { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.end(page('', '')); } }).listen(port, () => console.log(`Сервер запущен на порту ${port}`));