Files
multy-stub/server/routers/kfu-m-24-1/sber_mobile/supportApi.js
2025-06-13 19:44:45 +03:00

115 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const router = require('express').Router();
const { getSupabaseClient } = require('./supabaseClient');
const { SupportAgent } = require('./support-ai-agent/support-agent');
// Хранилище агентов для разных пользователей
const userAgents = new Map();
/**
* Получить или создать агента для пользователя
*/
function getUserAgent(userId) {
if (!userAgents.has(userId)) {
const config = {
threadId: userId,
temperature: 0.7
};
userAgents.set(userId, new SupportAgent(config));
}
return userAgents.get(userId);
}
// POST /api/support
router.post('/support', async (req, res) => {
const supabase = getSupabaseClient();
const { user_id, message } = req.body;
if (!user_id || !message) {
return res.status(400).json({ error: 'user_id и message обязательны' });
}
try {
// Сохраняем сообщение пользователя в базу данных
const { error: insertError } = await supabase
.from('support')
.insert({ user_id, message, is_from_user: true });
if (insertError) {
return res.status(400).json({ error: insertError.message });
}
// Получаем агента для пользователя
const agent = getUserAgent(user_id);
// Получаем ответ от AI-агента
const aiResponse = await agent.processMessage(message);
if (!aiResponse.success) {
console.error('Ошибка AI-агента:', aiResponse.error);
return res.status(500).json({
error: 'Ошибка при генерации ответа',
reply: 'Извините, произошла ошибка. Попробуйте позже.'
});
}
// Сохраняем ответ агента в базу данных
const { error: responseError } = await supabase
.from('support')
.insert({
user_id,
message: aiResponse.content,
is_from_user: false
});
if (responseError) {
console.error('Ошибка сохранения ответа:', responseError);
// Не возвращаем ошибку пользователю, так как ответ уже сгенерирован
}
// Возвращаем ответ пользователю
res.json({
reply: aiResponse.content,
success: true
});
} catch (error) {
console.error('Ошибка в supportApi:', error);
res.status(500).json({
error: 'Внутренняя ошибка сервера',
reply: 'Извините, произошла ошибка. Попробуйте позже.'
});
}
});
// DELETE /api/support/history/:userId - Очистка истории диалога
router.delete('/support/history/:userId', async (req, res) => {
const { userId } = req.params;
try {
if (userAgents.has(userId)) {
const agent = userAgents.get(userId);
await agent.clearHistory();
res.json({
message: 'История диалога очищена',
success: true
});
} else {
res.json({
message: 'Агент для данного пользователя не найден',
success: true
});
}
} catch (error) {
console.error('Ошибка в /support/history:', error);
res.status(500).json({
error: 'Внутренняя ошибка сервера',
success: false
});
}
});
module.exports = router;