Objetivos de aprendizaje
Después de leer este artículo podrás:
- Entender qué hacen realmente un webhook y un bot
- Comparar límites, permisos y costo de mantenimiento
- Elegir la opción correcta para tu caso, o combinar las dos
Webhook y bot se parecen porque ambos hacen aparecer un mensaje en un canal de Discord. La diferencia está en el sentido de la comunicación. El webhook es una puerta de entrada: haces un POST y el mensaje aparece. El bot es un participante: recibe eventos, decide qué hacer y responde.
Elegir mal cuesta tiempo. Quien levanta un bot solo para avisar "despliegue terminado" mantiene un proceso encendido sin necesidad. Quien intenta crear comandos con un webhook descubre tarde que no escucha nada.
¿Qué es un webhook de Discord?#
Es una URL que Discord genera para un canal (en Ajustes del canal, Integraciones, Webhooks). Se llama con POST /webhooks/{id}/{token}, sin cabecera de autenticación: el token dentro de la URL ya es la credencial. Cualquiera que tenga la URL puede publicar en el canal.
Por API, el webhook acepta content (hasta 2000 caracteres), embeds (hasta 10 por mensaje), archivos, encuestas, y username y avatar_url para cambiar el nombre y la foto de cada mensaje. Debes enviar al menos uno entre contenido, embeds, componentes, archivo o encuesta. Con ?wait=true la API devuelve el mensaje creado, y con thread_id publica en un hilo.
Ejemplo mínimo con curl:
curl -X POST "$DISCORD_WEBHOOK_URL" \
-H "Content-Type: application/json" \
-d '{"content": "Despliegue terminado", "username": "CI"}'Lo mismo en Node.js, con el fetch nativo y sin ninguna librería (guárdalo como .mjs, por el await fuera de una función):
const res = await fetch(process.env.DISCORD_WEBHOOK_URL + "?wait=true", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
embeds: [{ title: "Nuevo pedido", description: "Pedido #1234 pagado", color: 0x57f287 }],
}),
});
if (res.status === 429) {
const { retry_after } = await res.json();
console.error(`Límite alcanzado, reintenta en ${retry_after}s`);
} else if (!res.ok) {
console.error("Falló:", res.status, await res.text());
}¿Qué es un bot de Discord?#
Es una aplicación con usuario propio, creada en el Portal de Desarrolladores, que se autentica con un token. Puede conectarse al Gateway (una conexión WebSocket) y recibir eventos en tiempo real: mensajes, entrada de miembros, reacciones, comandos de barra. También puede recibir interacciones por HTTP si configuras una Interactions Endpoint URL, sin mantener el Gateway abierto. Con esa URL configurada, las interacciones dejan de llegar por el Gateway. Cada petición al endpoint HTTP trae las cabeceras X-Signature-Ed25519 y X-Signature-Timestamp, y debes validar la firma.
El bot puede hacer casi todo lo que hace un miembro: gestionar roles, moderar, reproducir audio, mostrar menús y botones. Para crear uno, mira cómo hacer un bot de Discord.
Webhook o bot: ¿qué cambia en la práctica?#
| Webhook | Bot | |
|---|---|---|
| Dirección | Solo envía mensajes | Envía y recibe |
| Autenticación | Token dentro de la URL | Token del bot |
| Debe estar en línea | No (es solo una URL) | Sí con Gateway; no si usa solo HTTP |
| Lee mensajes y eventos | No | Sí (el contenido de mensajes exige el intent privilegiado) |
| Comandos de barra, botones | No | Sí |
| Alcance | Un canal | Todos los servidores donde se añadió |
| Código | Una llamada HTTP | Librería como discord.js o discord.py |
| Mantenimiento | Casi ninguno | Actualizar librerías, manejar caídas, reconectar |
Un detalle sobre la lectura: un bot sin el intent privilegiado MESSAGE_CONTENT recibe content vacío en los mensajes, con excepciones como los mensajes que mencionan al bot, los mensajes directos con él y los que envía él mismo. Detalles en intents privilegiados.
¿Cuándo basta con un webhook?#
Elige webhook cuando el flujo es de una sola vía y el disparador viene de fuera de Discord:
- alertas de monitoreo, fallo de build o deploy terminado;
- notificación de venta, registro o pago;
- feed de RSS, commits o changelog en un canal;
- un script de cron que publica un resumen diario.
La ventaja es la simplicidad. No hay token de bot, intents ni reconexión. El costo es que el webhook solo conoce el canal: no sabe quién está ahí, no escucha respuestas y no pasa por permisos de roles.
¿Cuándo necesitas un bot?#
Necesitas un bot en cuanto Discord pasa a ser la entrada del flujo:
- comandos de barra (
/ticket,/play), botones y menús; - moderación, bienvenidas, roles automáticos;
- respuestas que dependen del usuario, del historial o de una base de datos;
- música, voz o cualquier cosa que use el Gateway;
- mensajes en varios servidores o canales elegidos en tiempo de ejecución.
Si el bot debe responder las 24 horas, necesita un proceso siempre encendido. Mira cómo mantener un bot de Discord 24/7.
¿Qué límites afectan a cada uno?#
El límite global de la API es de 50 peticiones por segundo por bot, y las rutas tienen límites propios que Discord pide no fijar en el código. Las peticiones sin cabecera de autorización, como las de webhook, se limitan por IP. Al superarlo, la API responde 429 con retry_after en segundos. Espera el tiempo que indica la cabecera Retry-After o el campo antes de reintentar. El ejemplo de arriba ya lee el campo. Más en error 429 de Discord.
Otro cuidado: si un webhook devuelve 404, deja de usarlo (probablemente fue eliminado). La documentación indica no insistir, porque los reintentos llevan a una restricción temporal.
Los límites de contenido son los mismos en ambos: 2000 caracteres de texto, 10 embeds por mensaje y 6000 caracteres sumados en los textos de los embeds.
¿Se pueden combinar?#
Sí, y muchos proyectos lo hacen. El bot gestiona comandos y eventos dentro del servidor. Los sistemas externos (CI, pasarela de pago, monitor) envían alertas por webhook, sin depender de que el bot esté en línea en ese momento. Si el bot cae, las alertas siguen llegando.
Una regla práctica: empieza con webhook si solo necesitas avisar. Pasa a bot cuando aparezca la primera necesidad de leer o responder.
Cómo hacerlo en Square Cloud#
El webhook no necesita hosting, pero el código que lo dispara tiene que ejecutarse en algún sitio. El bot de Gateway, en cambio, necesita un proceso siempre encendido. En Square Cloud los contenedores no entran en modo de suspensión, y el reinicio automático (activado por defecto en el deploy desde el panel) vuelve a levantar el bot cuando el proceso termina con error.
Despliegas el bot en Node.js, Python, Java u otro runtime con un ZIP en el panel, la CLI, GitHub o la extensión de VS Code. La RAM del plan es un pool compartido entre tus aplicaciones, con un mínimo de 256 MB por aplicación en segundo plano, como un bot. El plan Hobby cuesta desde R$12,49 al mes. Guarda el token del bot y la URL del webhook como variables de entorno de la aplicación, no en el código.
Para empezar, consulta la página de hosting para bots de Discord.
Hosting de bots
Tu bot en línea 24/7, con reinicio automático
Preguntas frecuentes
¿Un webhook de Discord necesita hosting?
El webhook en sí no, porque es solo una URL de Discord. Lo que necesita dónde ejecutarse es tu código que llama a esa URL, como un script, un cron o un servicio de CI. Un bot que usa el Gateway sí: es un proceso que permanece conectado todo el tiempo.
¿Un webhook puede leer mensajes o responder a comandos?
No. El webhook entrante solo publica mensajes en el canal. Para leer mensajes o reaccionar a usuarios necesitas un bot (Gateway) o una app que reciba interacciones por HTTP.
¿Puedo usar webhook y bot juntos?
Sí, y es lo habitual. El bot se encarga de comandos y eventos, y los webhooks envían alertas de sistemas externos, como deploys, monitoreo o pagos.
¿Es seguro dejar la URL del webhook en el código?
No. El token forma parte de la URL y cualquiera que la tenga puede publicar en el canal. Guárdala en una variable de entorno y genera otra URL si se filtra.
Más en Bots
Ver los 33 artículos- ¿Cuánto cuesta hospedar un bot de Discord?El costo de hospedar un bot de Discord depende de la RAM, el tiempo en línea, la base de datos y los servicios externos. Aprende a estimar el tuyo.
- Correr un bot en el celular (Termux) o en tu PC vs hospedarloUn bot en tu PC o celular (Termux) se cae cuando el equipo se apaga, se suspende o pierde la red. Compara las tres opciones y cuándo sirve cada una.
- Cómo mantener tu bot de Discord en línea 24/7Para mantener un bot de Discord en línea 24/7, ejecuta el proceso en una máquina siempre encendida con reinicio automático. Compara PC, VPS con pm2 o systemd.
- Por qué tu bot de Discord se apaga o aparece offlineUn bot de Discord aparece offline cuando el proceso se cae, el token es inválido, falta una intent o se acaba la memoria. Diagnostica y corrige cada causa.