fix(prod): sync serverless function logic with vector and numeric fixes

This commit is contained in:
2026-03-31 18:59:14 -05:00
parent fe2b8f5131
commit 6054ea051a

View File

@ -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}`)
}