HuwiDevelopers

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 offset es el id de la última novedad más uno (con BigInt en JavaScript).
  • Haz tu manejo idempotente: una novedad puede llegar dos veces (por ejemplo, con un webhook). El id de 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-Signature y 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 llamas bot.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 table o varias tarjetas.
  • No dependas de lo que la app todavía no dibuja (huwiEmbed, tipos de campo del form distintos de text, gráficos que no sean de barras).
  • Pon un alt a las imágenes y un label claro 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.setCommands y 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 vesPor qué pasaQué hacer
FORBIDDEN notAllowed al escribirLa 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 botPermissionEse procedimiento pide un permiso que el equipo o el dueño apagó, o está cerrado.Mira bot.me > permissions.
FORBIDDEN botPausedEl bot está en pausa.Mira bot.me > paused.
TOO_MANY_REQUESTS botRatePasaste el tope de mensajes (ráfaga, turnos o grupo).Espera unos segundos y reintenta con el mismo clientId.
TOO_MANY_REQUESTS botDailyPasaste el tope diario de publicar, comentar, reaccionar o seguir.Espera al día siguiente.
BAD_REQUEST webhookActiveHay un webhook puesto y pides bot.updates.Quita el webhook.
UNAUTHORIZEDFalta la clave o está mal, o ya hay una nueva.Revisa el encabezado x-api-key.
Me llega la misma novedad otra vezPasaste el offset sin sumarle uno, o no confirmaste.offset = id + 1.

Preguntas frecuentes

En esta página