Chatbot con IA para WhatsApp: prográmalo con Kimi y DALL-E 3
Aprende a programar un chatbot de WhatsApp con IA usando Kimi para la lógica conversacional y DALL-E 3 para generar imágenes. Tutorial paso a paso
Chatbot con IA para WhatsApp: prográmalo con Kimi y DALL-E 3
Mira, colega, montar un chatbot de WhatsApp que no dé vergüenza ajena es más fácil de lo que parece. La clave está en separar responsabilidades: Kimi (el modelo de Moonshot AI, con su API compatible con OpenAI) se encarga de entender y responder, y DALL-E 3 genera imágenes cuando el usuario las pide. Vamos al lío.
El stack mínimo
- Node.js + whatsapp-web.js (o Baileys si prefieres). Yo tiro con whatsapp-web.js porque documenta mejor.
- API de Kimi (endpoint compatible:
https://api.moonshot.cn/v1/chat/completions). Necesitas API key de platform.moonshot.ai. - API de DALL-E 3 vía OpenAI.
Paso 1: detectar si piden imagen
Antes de llamar a Kimi, o mejor, dejando que Kimi decida. La forma limpia es pedirle a Kimi que devuelva un JSON con {tipo: "texto"|"imagen", prompt: "..."}. Así no haces regex cutres.
const systemPrompt = `Eres un asistente de WhatsApp. Si el usuario pide una imagen, responde SOLO con este JSON:
{"tipo":"imagen","prompt":"descripción detallada en inglés para DALL-E"}
Si es una conversación normal, responde:
{"tipo":"texto","respuesta":"tu respuesta en español, breve, máximo 3 frases"}
No añadas nada fuera del JSON.`;
async function decidirConKimi(mensaje) {
const res = await fetch("https://api.moonshot.cn/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIMI_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "moonshot-v1-8k",
messages: [
{ role: "system", content: systemPrompt },
{ role: "user", content: mensaje }
],
temperature: 0.6
})
});
const data = await res.json();
return JSON.parse(data.choices[0].message.content);
}
Paso 2: generar la imagen con DALL-E 3
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
async function generarImagen(prompt) {
const img = await openai.images.generate({
model: "dall-e-3",
prompt,
size: "1024x1024",
quality: "standard",
n: 1
});
return img.data[0].url;
}
Paso 3: el handler de WhatsApp
client.on("message", async (msg) => {
if (msg.from === "status@broadcast" || msg.fromMe) return;
const decision = await decidirConKimi(msg.body);
if (decision.tipo === "imagen") {
await msg.reply("Dame 15 segundos, que la genero...");
const url = await generarImagen(decision.prompt);
await client.sendMessage(msg.from, { media: { url } });
} else {
await msg.reply(decision.respuesta);
}
});
Paso 4: prompts útiles para personalizar el bot
Copia y pega estos según el caso:
Actúa como recepcionista de una clínica dental. Responde en máximo 2 frases, siempre pregunta si quiere pedir cita al final. Si pide imagen, genera prompt para DALL-E con estilo fotorrealista.
Eres un sommelier virtual. Cuando el usuario describa una comida, recomienda un vino en 3 líneas y ofrece generar una imagen del maridaje. Idioma: español de España.
Si el mensaje contiene la palabra "logo", devuelve tipo:imagen con prompt describiendo un logo minimalista vectorial con fondo blanco. En cualquier otro caso, responde como asistente general.
Traduce al inglés el prompt de imagen siempre, y añade "high detail, soft lighting, 4k" al final para mejorar el resultado de DALL-E 3.
Detalles que marcan la diferencia
- Rate limit: Kimi es barato pero no infinito. Cachea respuestas repetidas.
- Timeout: DALL-E 3 tarda 10-15s. Manda un mensaje intermedio o el usuario pensará que el bot murió.
- Coste: cada imagen DALL-E 3 son ~0,04$. Pon un contador por usuario y limita a 3 imágenes/día.
- Moderación: filtra prompts con la propia moderación de OpenAI antes de generar.
Y tu, ¿qué usas para darle vida a tus bots de WhatsApp?



