Saltar al contenido
Programación

Chatbot con IA para WhatsApp: prográmalo con Kimi y DALL-E 3

· (banco local)
Compartir X Facebook

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
(banco local)

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?

Más sobre Programación

Ver todo →