Sube el bot a un repositorio de GitHub
curl -LO https://botnetwork.tech/downloads/telegram-grammy.zip unzip telegram-grammy.zip -d mi-bot && cd mi-bot git init && git add . && git commit -m "first version" # create an empty repo on GitHub, then: git remote add origin git@github.com:YOUR_USER/mi-bot.git git push -u origin mainRevisa que
.envesté en.gitignoreantes del primer commit.Crea el proyecto en Railway
Inicia sesión en Railway, elige New Project, luego Deploy from GitHub repo y selecciona tu repositorio. Railway detecta el Dockerfile y lo compila.
Agrega las variables
Abre el servicio, ve a Variables y agrega:
BOT_TOKEN=123456789:your-real-token MODE=pollingPara la plantilla de discord.js usa
DISCORD_TOKENyCLIENT_ID, y ejecuta una vez el script de registro desde tu computadora.Despliega y revisa los logs
Guardar variables provoca un nuevo despliegue. Abre Deployments y luego los logs del último despliegue.
Figura 2. Así se ve un primer despliegue sano en la vista de Deploy Logs (ilustración, no es una captura real). Mantén una sola réplica con long polling: dos copias con el mismo token causan 409 Conflict.
Opcional: cambia a webhooks
En Settings, Networking genera un dominio público. Después configura:
MODE=webhook WEBHOOK_URL=https://YOUR-SERVICE.up.railway.app/telegram/webhook WEBHOOK_SECRET=paste-output-of-openssl-rand-hex-32Railway inyecta
PORT; la plantilla escucha en ese puerto y responde/healthz. Con webhooks puedes tener más de una réplica.Entiende el costo
La página de precios de Railway (verificada el 2026-10-19) muestra un plan Hobby de $5 USD al mes que incluye $5 USD de uso, y tarifas de aproximadamente $10 USD por GB de RAM al mes y $20 USD por vCPU al mes, cobradas por segundo. Un bot pequeño e inactivo que use unos 100 MB de RAM y muy poca CPU consume más o menos $1 USD de RAM al mes con esas tarifas, lo que cabe en el uso incluido. Es una estimación: revisa la página de uso después de unos días y define un límite. railway.com/pricing
Solución de problemas
- El build falla en npm ci: haz commit de package-lock.json o cambia el Dockerfile a npm install.
- El bot inicia y se detiene: falta una variable; la plantilla termina con un mensaje claro en los logs.
- 409 Conflict: tu copia local sigue haciendo polling con el mismo token. Detenla.
Compara con otros proveedores en el comparador de hosting.