fix(prod): sync serverless function logic with vector and numeric fixes
This commit is contained in:
@ -69,95 +69,30 @@ export default async function handler(req, res) {
|
||||
|
||||
// ── PASO 6: Guardar en Supabase ───────────────────────
|
||||
paso = 'guardado'
|
||||
const payload = {
|
||||
cliente_id, niche, sub_niche, mercado_objetivo, idioma,
|
||||
proyecto_nombre, competidor_referente,
|
||||
url_origen: url, plataforma, duracion_segundos: duracion,
|
||||
vistas: vistas ? Number(vistas) : null,
|
||||
likes: likes ? Number(likes) : null,
|
||||
compartidos: compartidos ? Number(compartidos) : null,
|
||||
fecha_publicacion,
|
||||
contexto_video: contexto_video || null,
|
||||
...analisis,
|
||||
transcript,
|
||||
embedding_vector: vector, // Array nativo para pgvector
|
||||
procesado_ok: true,
|
||||
version_prompt: 'v1.0',
|
||||
}
|
||||
|
||||
const { data: guion, error: errorSupabase } = await supabase
|
||||
.from('guiones')
|
||||
.insert({
|
||||
// Organización
|
||||
cliente_id,
|
||||
niche,
|
||||
sub_niche,
|
||||
mercado_objetivo,
|
||||
idioma,
|
||||
proyecto_nombre,
|
||||
competidor_referente,
|
||||
|
||||
// Metadata del video
|
||||
url_origen: url,
|
||||
plataforma,
|
||||
duracion_segundos: duracion,
|
||||
vistas,
|
||||
likes,
|
||||
compartidos,
|
||||
fecha_publicacion,
|
||||
|
||||
// Análisis de GPT-4o (campos de storytelling)
|
||||
estructura_narrativa: analisis.estructura_narrativa,
|
||||
gancho_tipo: analisis.gancho_tipo,
|
||||
gancho_texto: analisis.gancho_texto,
|
||||
gancho_duracion_seg: analisis.gancho_duracion_seg,
|
||||
desarrollo_tipo: analisis.desarrollo_tipo,
|
||||
cta_tipo: analisis.cta_tipo,
|
||||
cta_texto: analisis.cta_texto,
|
||||
arco_emocional: analisis.arco_emocional,
|
||||
conflicto_central: analisis.conflicto_central,
|
||||
resolucion: analisis.resolucion,
|
||||
pacing_ritmo: analisis.pacing_ritmo,
|
||||
numero_actos: analisis.numero_actos,
|
||||
|
||||
// Cialdini
|
||||
cialdini_reciprocidad: analisis.cialdini_reciprocidad,
|
||||
cialdini_escasez: analisis.cialdini_escasez,
|
||||
cialdini_autoridad: analisis.cialdini_autoridad,
|
||||
cialdini_consistencia: analisis.cialdini_consistencia,
|
||||
cialdini_prueba_social: analisis.cialdini_prueba_social,
|
||||
cialdini_simpatia: analisis.cialdini_simpatia,
|
||||
cialdini_unidad: analisis.cialdini_unidad,
|
||||
sesgo_cognitivo: analisis.sesgo_cognitivo,
|
||||
trigger_emocional: analisis.trigger_emocional,
|
||||
intensidad_emocional: analisis.intensidad_emocional,
|
||||
|
||||
// Neuropublicidad
|
||||
atencion_visual: analisis.atencion_visual,
|
||||
lenguaje_sensorial: analisis.lenguaje_sensorial,
|
||||
contraste_narrativo: analisis.contraste_narrativo,
|
||||
efecto_novedad: analisis.efecto_novedad,
|
||||
dolor_placer: analisis.dolor_placer,
|
||||
personalizacion: analisis.personalizacion,
|
||||
carga_cognitiva: analisis.carga_cognitiva,
|
||||
velocidad_locucion: analisis.velocidad_locucion,
|
||||
uso_musica: analisis.uso_musica,
|
||||
micro_compromisos: analisis.micro_compromisos,
|
||||
|
||||
// Contenido
|
||||
tema_principal: analisis.tema_principal,
|
||||
angulo_unico: analisis.angulo_unico,
|
||||
palabras_clave: analisis.palabras_clave,
|
||||
transcript,
|
||||
tono: analisis.tono,
|
||||
persona_narradora: analisis.persona_narradora,
|
||||
promesa_explicita: analisis.promesa_explicita,
|
||||
nivel_especificidad: analisis.nivel_especificidad,
|
||||
contexto_video: contexto_video || null,
|
||||
|
||||
// Diagnóstico
|
||||
fortalezas: analisis.fortalezas,
|
||||
debilidades: analisis.debilidades,
|
||||
sugerencias_mejora: analisis.sugerencias_mejora,
|
||||
hashtags_sugeridos: analisis.hashtags_sugeridos,
|
||||
|
||||
// Métricas (score_engagement lo calcula el trigger de Supabase)
|
||||
score_virabilidad: analisis.score_virabilidad,
|
||||
resumen_patron: analisis.resumen_patron,
|
||||
embedding_vector: `[${vector.join(',')}]`,
|
||||
|
||||
// Auditoría
|
||||
procesado_ok: true,
|
||||
version_prompt: 'v1.0',
|
||||
})
|
||||
.insert(payload)
|
||||
.select('id, niche, score_virabilidad, resumen_patron')
|
||||
.single()
|
||||
|
||||
if (errorSupabase) {
|
||||
console.error('[Supabase Error]:', errorSupabase)
|
||||
throw new Error(`Supabase error: ${errorSupabase.message}`)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user