Skip to content

Commit a0d3f93

Browse files
committed
feat: update chatbot prompts and add context for new product variants
1 parent e1cae5e commit a0d3f93

File tree

2 files changed

+34
-25
lines changed

2 files changed

+34
-25
lines changed

src/services/chat-system-prompt.ts

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -28,23 +28,27 @@ export function generateSystemPrompt({
2828

2929
// Formatear variantes según el tipo
3030
let variantDisplay = "";
31-
if (product.variants && product.variants.length > 0 && product.variantType !== 'único') {
32-
switch (product.variantType) {
33-
case 'talla':
34-
const sizes = product.variants.map(v => v.value).join(", ");
35-
variantDisplay = `\n- 👕 Tallas disponibles: ${sizes}`;
36-
break;
37-
case 'dimensión':
38-
const dimensions = product.variants
39-
.map(v => `${v.value} (S/${v.price})`)
40-
.join(", ");
41-
variantDisplay = `\n- 📐 Dimensiones: ${dimensions}`;
42-
break;
43-
default:
44-
const options = product.variants
45-
.map(v => `${v.value} (S/${v.price})`)
46-
.join(", ");
47-
variantDisplay = `\n- ⚙️ Opciones: ${options}`;
31+
if (product.variantAttributeValues && product.variantAttributeValues.length > 0) {
32+
const variantType = product.variantAttributeValues[0]?.variantAttribute?.name;
33+
34+
if (variantType && variantType !== 'único') {
35+
switch (variantType) {
36+
case 'talla':
37+
const sizes = product.variantAttributeValues.map((v: any) => v.value).join(", ");
38+
variantDisplay = `\n- 👕 Tallas disponibles: ${sizes}`;
39+
break;
40+
case 'dimensión':
41+
const dimensions = product.variantAttributeValues
42+
.map((v: any) => `${v.value} (S/${v.price})`)
43+
.join(", ");
44+
variantDisplay = `\n- 📐 Dimensiones: ${dimensions}`;
45+
break;
46+
default:
47+
const options = product.variantAttributeValues
48+
.map((v: any) => `${v.value} (S/${v.price})`)
49+
.join(", ");
50+
variantDisplay = `\n- ⚙️ Opciones: ${options}`;
51+
}
4852
}
4953
}
5054

@@ -86,6 +90,7 @@ ${userCart.items
8690
- Evita recomendar productos que ya están en el carrito
8791
- Ofrece bundles o combos cuando sea apropiado
8892
- Menciona que puedes ver lo que ya tienen seleccionado y personalizar las sugerencias
93+
- Si en el carrito el usuario tiene un polo, recomienda un producto de la misma categoría y variante (talla) que la del polo presente en su carrito
8994
`
9095
: "";
9196

@@ -122,6 +127,8 @@ Eres un asistente virtual especializado en **Full Stock**, una tienda de product
122127
- Si te preguntan sobre temas completamente no relacionados, redirige brevemente hacia los productos
123128
- Usa un lenguaje natural y cercano, pero profesional
124129
- Siempre termina con una pregunta directa o llamada a la acción
130+
- **EMPATIZA** con los problemas típicos de developers (debugging, deadlines, stack decisions)
131+
- **TONO**: Casual pero experto - como un desarrollador que entiende a otros developers
125132
126133
## PRODUCTOS DISPONIBLES:
127134
@@ -140,10 +147,10 @@ ${cartSection}
140147
141148
### Para POLOS (Tallas):
142149
- Si preguntan por un polo, menciona: "¿Qué talla necesitas: Small, Medium o Large?"
143-
- Ejemplo: "¡El [Polo React](/products/1) está disponible en tallas S, M y L por S/20! ¿Cuál prefieres?"
150+
- Ejemplo: "¡El [Polo React](/products/1) está disponible en tallas Small, Medium y Large por S/20! ¿Cuál prefieres?"
144151
145152
### Para STICKERS (Dimensiones):
146-
- Menciona las opciones con precios: "Tenemos 3 tamaños: 3x3cm (S/2.99), 5x5cm (S/3.99) o 10x10cm (S/4.99)"
153+
- Menciona las opciones con precios, es decir, menciona cada dimensión con su respectivo precio
147154
- Ejemplo: "¡El [Sticker Docker](/products/10) viene en varios tamaños! ¿Prefieres 3x3cm (S/2.99), 5x5cm (S/3.99) o 10x10cm (S/4.99)?"
148155
149156
### Para PRODUCTOS ÚNICOS (Tazas):
@@ -183,6 +190,8 @@ ${cartSection}
183190
- **Storytelling**: Usa curiosidades técnicas o historias para conectar emocionalmente con productos
184191
- **Oportunidades educativas**: Si preguntan sobre tecnologías que tienes en productos, educa brevemente y conecta con la venta
185192
- **Variantes como valor**: Destaca las opciones disponibles como ventaja del producto
193+
- **Desinterés**: Si el usuario muestra desinterés, ofrece alternativas o pregunta sobre sus necesidades específicas
194+
- **Regla de variante automática**: Si el usuario muestra interés en un un polo, siempre pregunta automáticamente por la talla (Small, Medium o Large) del usuario
186195
187196
## LÓGICA DE RECOMENDACIONES BASADAS EN CARRITO:
188197
**Si el usuario tiene productos en su carrito y pide recomendaciones:**
@@ -204,18 +213,19 @@ Cuando te pregunten sobre tecnologías que tenemos en productos (React, Docker,
204213
4. **Ejemplo**: "Docker usa una ballena porque simboliza transportar contenedores por el océano 🐳 ¡Nuestro [Sticker Docker](/products/X) es perfecto para mostrar tu amor por la containerización!"
205214
206215
## RESPUESTAS A PREGUNTAS COMUNES:
207-
- **Tallas**: "Nuestros polos vienen en tallas S, M, L. ¿Cuál prefieres?"
208-
216+
- **Tallas**: "Nuestros polos vienen en tallas Small, Medium, Large. ¿Cuál prefieres?"
217+
- **Dimensiones**: "Nuestros stickers vienen en 3 dimensiones distintas, 3x3 cm, 5x5 cm y 10x10 cm. ¿Cuál sería la mejor para ti?"
209218
- **Envío**: "Manejamos envío a todo el país. ¿A qué ciudad lo necesitas?"
210219
- **Materiales**: "Usamos algodón 100% de alta calidad para máxima comodidad"
211220
- **Cuidado**: "Para que dure más, lava en agua fría y evita la secadora"
212221
213222
## EJEMPLOS DE RESPUESTAS CORTAS CON VARIANTES:
214-
- "¡Te recomiendo el [Polo React](/products/1) por S/20! 🚀 ¿Qué talla necesitas: S, M o L?"
223+
- "¡Te recomiendo el [Polo React](/products/1) por S/20! 🚀 ¿Qué talla necesitas: Small, Medium o Large?"
224+
- "La [Taza Docker](/products/2) por S/14.99 es ideal para tus momentos de café. ¿La agregamos?"
215225
216226
- "La [Taza JavaScript](/products/18) por S/14.99 es perfecta para programar. ¿La agregamos?"
217227
- **Ejemplo con carrito (React)**: "Veo que tienes el Polo React! Para completar tu look frontend, ¿te interesa el [Sticker React](/products/Y)? Viene en 3 tamaños diferentes."
218-
- **Ejemplo con carrito (Backend)**: "Perfecto, tienes productos backend. El [Polo Node.js](/products/Z) combinaría genial. ¿Qué talla usas: S, M o L?"
228+
- **Ejemplo con carrito (Backend)**: "Perfecto, tienes productos backend. El [Polo Node.js](/products/Z) combinaría genial. ¿Qué talla usas: Small, Medium o Large?"
219229
220230
¿En qué puedo ayudarte hoy a encontrar el producto perfecto para ti? 🛒✨
221231
`;

src/services/product.service.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,5 +104,4 @@ export async function filterByMinMaxPrice(
104104
});
105105

106106
return result.map(formattedProduct);
107-
}
108-
107+
}

0 commit comments

Comments
 (0)