add tickets creation
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
import { StructuredTool, ToolRunnableConfig } from '@langchain/core/tools';
|
||||
import { z } from 'zod';
|
||||
import { CallbackManagerForToolRun } from '@langchain/core/callbacks/manager';
|
||||
import { getSupabaseClient } from '../supabaseClient';
|
||||
|
||||
export class CreateTicketTool extends StructuredTool {
|
||||
name = 'create_ticket';
|
||||
description = 'Создает заявку в системе. ВАЖНО: используй этот инструмент ТОЛЬКО после получения явного согласия пользователя на создание заявки с конкретным текстом.';
|
||||
|
||||
schema = z.object({
|
||||
title: z.string().describe('Заголовок заявки'),
|
||||
description: z.string().describe('Подробное описание проблемы'),
|
||||
category: z.string().describe('Категория заявки (например: ремонт, уборка, техническая_поддержка, жалоба)'),
|
||||
});
|
||||
|
||||
private userId: string;
|
||||
private apartmentId: string;
|
||||
|
||||
constructor(userId: string, apartmentId: string) {
|
||||
super();
|
||||
this.userId = userId;
|
||||
this.apartmentId = apartmentId;
|
||||
}
|
||||
|
||||
protected async _call(
|
||||
arg: z.infer<typeof this.schema>,
|
||||
runManager?: CallbackManagerForToolRun,
|
||||
parentConfig?: ToolRunnableConfig<Record<string, any>>
|
||||
): Promise<string> {
|
||||
try {
|
||||
if (!this.apartmentId) {
|
||||
return 'Не удалось определить вашу квартиру. Обратитесь к администратору для создания заявки.';
|
||||
}
|
||||
|
||||
const supabase = getSupabaseClient();
|
||||
|
||||
const { data: ticket, error } = await supabase
|
||||
.from('tickets')
|
||||
.insert({
|
||||
user_id: this.userId,
|
||||
apartment_id: this.apartmentId,
|
||||
title: arg.title,
|
||||
description: arg.description,
|
||||
category: arg.category,
|
||||
status: 'open'
|
||||
})
|
||||
.select()
|
||||
.single();
|
||||
|
||||
if (error) {
|
||||
return 'Произошла ошибка при создании заявки. Попробуйте позже или обратитесь к администратору.';
|
||||
}
|
||||
|
||||
return `Заявка успешно создана!
|
||||
Номер заявки: ${ticket.id}
|
||||
Заголовок: ${ticket.title}
|
||||
Статус: Открыта
|
||||
Дата создания: ${new Date(ticket.created_at).toLocaleString('ru-RU')}
|
||||
|
||||
Ваша заявка принята в работу. Мы свяжемся с вами в ближайшее время.`;
|
||||
|
||||
} catch (error) {
|
||||
return 'Произошла техническая ошибка при создании заявки. Пожалуйста, попробуйте позже.';
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user