Logia de agente de Whatsapp
This commit is contained in:
33
mvp/Whatsapp-bot/src/conversacion/conversacion.entity.ts
Normal file
33
mvp/Whatsapp-bot/src/conversacion/conversacion.entity.ts
Normal file
@@ -0,0 +1,33 @@
|
||||
import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
ManyToOne,
|
||||
JoinColumn,
|
||||
} from 'typeorm';
|
||||
import { Lead } from '../leads/lead.entity';
|
||||
|
||||
export type RolMensaje = 'user' | 'assistant' | 'system';
|
||||
|
||||
@Entity('conversacion')
|
||||
export class Conversacion {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
|
||||
@Column({ type: 'integer' })
|
||||
lead_id: number;
|
||||
|
||||
@ManyToOne(() => Lead, { onDelete: 'CASCADE' })
|
||||
@JoinColumn({ name: 'lead_id' })
|
||||
lead: Lead;
|
||||
|
||||
@Column({ type: 'text' })
|
||||
rol: RolMensaje;
|
||||
|
||||
@Column({ type: 'text' })
|
||||
mensaje: string;
|
||||
|
||||
@CreateDateColumn()
|
||||
created_at: Date;
|
||||
}
|
||||
11
mvp/Whatsapp-bot/src/conversacion/conversacion.module.ts
Normal file
11
mvp/Whatsapp-bot/src/conversacion/conversacion.module.ts
Normal file
@@ -0,0 +1,11 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { Conversacion } from './conversacion.entity';
|
||||
import { ConversacionService } from './conversacion.service';
|
||||
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([Conversacion])],
|
||||
providers: [ConversacionService],
|
||||
exports: [ConversacionService],
|
||||
})
|
||||
export class ConversacionModule {}
|
||||
41
mvp/Whatsapp-bot/src/conversacion/conversacion.service.ts
Normal file
41
mvp/Whatsapp-bot/src/conversacion/conversacion.service.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { Conversacion, RolMensaje } from './conversacion.entity';
|
||||
|
||||
@Injectable()
|
||||
export class ConversacionService {
|
||||
constructor(
|
||||
@InjectRepository(Conversacion)
|
||||
private readonly convRepo: Repository<Conversacion>,
|
||||
) {}
|
||||
|
||||
async guardarMensaje(
|
||||
leadId: number,
|
||||
rol: RolMensaje,
|
||||
mensaje: string,
|
||||
): Promise<Conversacion> {
|
||||
const entry = this.convRepo.create({ lead_id: leadId, rol, mensaje });
|
||||
return this.convRepo.save(entry);
|
||||
}
|
||||
|
||||
async obtenerHistorial(leadId: number): Promise<Conversacion[]> {
|
||||
return this.convRepo.find({
|
||||
where: { lead_id: leadId },
|
||||
order: { created_at: 'ASC' },
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Devuelve el historial en formato OpenAI/Claude messages array.
|
||||
*/
|
||||
async obtenerHistorialComoMessages(
|
||||
leadId: number,
|
||||
): Promise<Array<{ role: string; content: string }>> {
|
||||
const historial = await this.obtenerHistorial(leadId);
|
||||
return historial.map((h) => ({
|
||||
role: h.rol,
|
||||
content: h.mensaje,
|
||||
}));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user