IA y MCP
Conecta un modelo de IA a tu bot. Respuestas que se van escribiendo y el servidor MCP de Huwi con la misma clave del bot.
Huwi no pone el modelo: tu bot trae el suyo (el que tú elijas, con tu propia cuenta y tu propia clave del proveedor). Huwi pone el chat, los componentes y la API.
Un asistente con un modelo
El patrón es el de siempre: pides novedades, le das el texto al modelo y mandas lo que contesta. Para que se sienta en vivo, manda un mensaje corto y edítalo mientras llegan las palabras:
import { mutate } from "./huwi.ts";
// Texto que se va escribiendo (por ejemplo, la respuesta de un modelo): se manda un mensaje y se edita.
async function* model(): AsyncGenerator<string> {
for (const word of "Claro, te cuento cómo va tu pedido: sale hoy y llega en la tarde.".split(" ")) {
await new Promise((resolve) => setTimeout(resolve, 150));
yield `${word} `;
}
}
const chatId = process.env.CHAT_ID!;
const message = await mutate("message.send", { chatId, clientId: crypto.randomUUID(), text: "…" });
let text = "";
let last = 0;
for await (const piece of model()) {
text += piece;
// Edita como mucho cada ~700 ms: cada edición es un pedido más y llega a la persona en vivo.
if (Date.now() - last > 700) {
await mutate("message.edit", { messageId: message.id, text });
last = Date.now();
}
}
await mutate("message.edit", { messageId: message.id, text: text.trim() }); // la versión finalReemplaza model() por la respuesta en streaming de tu proveedor. Algunas ideas que funcionan bien:
- Un mensaje de bienvenida con
/starty botones con las tres cosas que sabe hacer. - Un comando
/olvidarque borre la memoria de esa conversación en tu servidor. - Mensajes de menos de 2000 caracteres: es el máximo de un mensaje. Parte las respuestas largas.
- Una frase en el perfil del bot que diga que es un asistente de IA. Quien le escribe lo lee quien maneja el bot, y la gente tiene que saber que habla con un programa (por eso lleva el robotcito).
Respeta los turnos
Si el modelo manda varios mensajes seguidos, recuerda: 5 respuestas por turno y 5 mensajes cada 5 segundos por chat. Mejor un mensaje que se edita que cinco mensajes.
Servidor MCP
Huwi tiene un servidor MCP en POST https://huwi.app/api/mcp. Un agente conectado con la clave del bot puede ver qué procedimientos tiene permitidos, llamarlos y pedir novedades. Es JSON-RPC 2.0 sobre HTTP.
La clave va en x-api-key o como Authorization: Bearer hwk_.... Sin clave, el servidor responde unauthorized.
| Herramienta | Qué hace |
|---|---|
list_procedures | Una línea por procedimiento que la clave puede usar, con una frase de lo que hace. |
call | Llama un procedimiento: { "path": "message.send", "input": { ... } }. Lo cerrado para bots responde forbidden. |
wait_for_updates | Las novedades pendientes (offset opcional). No espera: responde al instante. |
# Listar las herramientas
curl -s https://huwi.app/api/mcp \
-H "x-api-key: $HUWI_KEY" -H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
# Llamar a un procedimiento
curl -s https://huwi.app/api/mcp \
-H "x-api-key: $HUWI_KEY" -H "content-type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"call","arguments":{"path":"bot.me"}}}'La respuesta trae el resultado como texto JSON en result.content[0].text.
Para que un agente conozca la API
Un agente con la clave puede pedir la lista viva de procedimientos y su forma exacta (JSON Schema):
# Todos los procedimientos que esta clave puede usar
curl -s "https://huwi.app/api/trpc/api.index" -H "x-api-key: $HUWI_KEY"
# La entrada y la salida de los que empiezan igual
curl -s -G "https://huwi.app/api/trpc/api.index" -H "x-api-key: $HUWI_KEY" \
--data-urlencode 'input={"json":{"prefix":"message.send"}}'api.index solo responde con una clave (con una sesión común da FORBIDDEN con apiKeyOnly) y deja afuera lo cerrado para bots.
Y el resumen del sitio, para el modelo, está en llms.txt.
Ejemplos
Ejemplos listos para copiar en curl, TypeScript y Python. Novedades, mensajes, tarjetas con botones, comandos, webhooks, publicar, grupos y texto en vivo.
Buenas prácticas y preguntas frecuentes
Errores comunes al hacer un bot de Huwi y cómo evitarlos. Idempotencia con clientId, confirmar novedades, guardar la clave, webhooks y respuestas a las dudas más comunes.