151 lines
4.6 KiB
JavaScript
151 lines
4.6 KiB
JavaScript
const router = require('express').Router();
|
|
const { getSupabaseClient } = require('./supabaseClient');
|
|
const { getGigaAuth } = require('./get-constants');
|
|
const { SupportAgent } = require('./support-ai-agent/support-agent');
|
|
|
|
// Хранилище агентов для разных пользователей
|
|
const userAgents = new Map();
|
|
|
|
/**
|
|
* Получить или создать агента для пользователя
|
|
*/
|
|
async function getUserAgent(userId) {
|
|
if (!userAgents.has(userId)) {
|
|
const GIGA_AUTH = await getGigaAuth();
|
|
const config = {
|
|
threadId: userId,
|
|
temperature: 0.7,
|
|
GIGA_AUTH
|
|
};
|
|
userAgents.set(userId, new SupportAgent(config));
|
|
}
|
|
return userAgents.get(userId);
|
|
}
|
|
|
|
// GET /api/support - Получить историю сообщений пользователя
|
|
router.get('/support', async (req, res) => {
|
|
const supabase = getSupabaseClient();
|
|
const { user_id } = req.query;
|
|
|
|
if (!user_id) {
|
|
return res.status(400).json({ error: 'user_id обязателен' });
|
|
}
|
|
|
|
try {
|
|
// Получаем все сообщения пользователя из базы данных
|
|
const { data: messages, error } = await supabase
|
|
.from('support')
|
|
.select('*')
|
|
.eq('user_id', user_id)
|
|
.order('created_at', { ascending: true });
|
|
|
|
if (error) {
|
|
return res.status(400).json({ error: error.message });
|
|
}
|
|
|
|
res.json({
|
|
messages: messages || [],
|
|
success: true
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Ошибка в GET /support:', error);
|
|
res.status(500).json({
|
|
error: 'Внутренняя ошибка сервера',
|
|
success: false
|
|
});
|
|
}
|
|
});
|
|
|
|
// POST /api/support
|
|
router.post('/support', async (req, res) => {
|
|
const supabase = getSupabaseClient();
|
|
const { user_id, message, apartment_id } = 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 = await getUserAgent(user_id);
|
|
|
|
// Получаем ответ от AI-агента, передавая apartment_id
|
|
const aiResponse = await agent.processMessage(message, apartment_id);
|
|
|
|
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; |