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.
Buenas prácticas
Guarda la clave como un secreto
- Va en una variable de entorno o en el gestor de secretos de tu servidor, nunca en el código ni en un repositorio.
- Nunca la pegues en un chat, ni en uno con @gepeto: se muestra una sola vez y en su propio bloque justamente para copiarla ahí donde la vas a guardar.
- Para cambiarla (por ejemplo, si alguien del equipo se va), toca Nueva clave en @gepeto: la anterior deja de servir al instante. Actualiza tu servidor enseguida.
- Una clave por bot. Si necesitas probar, crea otro bot.
Usa siempre un clientId
El clientId de message.send evita mensajes duplicados cuando reintentas. Deriva el tuyo de algo estable, como el id de la novedad que estás contestando (eco-${update.id}). Si usas uno aleatorio, un reintento manda el mensaje dos veces.
Confirma bien las novedades
- Confirma después de atender, no antes: si tu programa se cae a la mitad, la novedad vuelve.
- El
offsetes el id de la última novedad más uno (conBigInten JavaScript). - Haz tu manejo idempotente: una novedad puede llegar dos veces (por ejemplo, con un webhook). El
idde la novedad sirve para descartarla.
Cuida los turnos
- Contesta con pocos mensajes: 5 por turno y 10 por día sin turno nuevo.
- Para algo largo, usa un solo mensaje y edítalo.
- No mandes avisos por tu cuenta cada rato: son «mensajes sin turno» y se acaban.
Webhooks
- Verifica siempre
Huwi-Signaturey la hora (5 minutos). - Firma el cuerpo tal cual llegó; no lo vuelvas a serializar.
- Contesta 2xx rápido y trabaja después. Más de 10 segundos cuenta como fallo.
- Guarda el
whsec_...como un secreto. Cambia cada vez que llamasbot.setWebhook.
Mensajes y componentes
- Un componente no debe pasar de 16 KB ni de 150 piezas (hoy el servidor no lo revisa al enviar, pero es el contrato). Si tienes mucho para mostrar, usa una
tableo varias tarjetas. - No dependas de lo que la app todavía no dibuja (
huwiEmbed, tipos de campo delformdistintos detext, gráficos que no sean de barras). - Pon un
alta las imágenes y unlabelclaro a los botones: son para personas.
Sé un buen vecino
- El responsable de tu bot eres tú, su dueño: de lo que dice, de lo que guarda y de cómo usa lo que la gente le escribe.
- Dile a la gente que es un bot (ya lo dice el robotcito) y qué sabe hacer, con
bot.setCommandsy un buen/start. - Respeta cuando alguien detiene el bot: no hay forma de escribirle hasta que vuelva.
- No uses un bot para hacer spam de me gusta, comentarios o seguir cuentas: hay topes por día, y el bot se denuncia y bloquea como cualquier cuenta.
Errores comunes
| Lo que ves | Por qué pasa | Qué hacer |
|---|---|---|
FORBIDDEN notAllowed al escribir | La persona no le escribió o no tocó Empezar, lo detuvo, o es menor sin que el bot sea apto. | Espera a que te escriba. No hay forma de saltarlo. |
FORBIDDEN botPermission | Ese procedimiento pide un permiso que el equipo o el dueño apagó, o está cerrado. | Mira bot.me > permissions. |
FORBIDDEN botPaused | El bot está en pausa. | Mira bot.me > paused. |
TOO_MANY_REQUESTS botRate | Pasaste el tope de mensajes (ráfaga, turnos o grupo). | Espera unos segundos y reintenta con el mismo clientId. |
TOO_MANY_REQUESTS botDaily | Pasaste el tope diario de publicar, comentar, reaccionar o seguir. | Espera al día siguiente. |
BAD_REQUEST webhookActive | Hay un webhook puesto y pides bot.updates. | Quita el webhook. |
UNAUTHORIZED | Falta la clave o está mal, o ya hay una nueva. | Revisa el encabezado x-api-key. |
| Me llega la misma novedad otra vez | Pasaste el offset sin sumarle uno, o no confirmaste. | offset = id + 1. |
Preguntas frecuentes
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.
Referencia de la API
Cómo se llama la API de Huwi con la clave de un bot, la forma de las respuestas y los errores, los procedimientos principales con su entrada y salida, y la lista completa por permiso.