Telegram-Bot
This repository is a starter for building Telegram bots in Go without collapsing everything into a single main.go file. It gives you a working runtime shape, a small but useful command surface, session storage, health probes, and deployment modes that cover both local development and production delivery.
What the template already includes
- A single process entrypoint in
cmd/server - Environment-based configuration with validation
- Telegram transport support for both polling and webhook delivery
- Command menu synchronization on startup
- Built-in commands for
/start,/help,/ping,/echo,/keyboard,/hidekeyboard,/menu, and/session - Inline query and callback query demos
- HTTP endpoints for
/,/healthz, and/readyz - Session storage backed by Redis or an in-memory fallback
- Docker Compose files for local infrastructure and containerized runs
What this documentation site covers
- How the application boots, validates configuration, and shuts down cleanly
- How Telegram updates are routed into command handlers
- How session keys are stored in memory and Redis
- How to run the bot in polling mode locally and webhook mode in deployed environments
- How to extend the template without breaking the current architecture
Core runtime shape
The application is deliberately split into a few stable layers:
cmd/serverloads environment variables, configures logging, validates config, and handles OS signalsinternal/configparses and validates environment variablesinternal/appwires the bot service, session backend, and HTTP server togetherinternal/botowns Telegram-specific transport and handler registrationinternal/handlerexposes the HTTP endpoints used for health checks and webhook deliveryinternal/sessionabstracts session persistence behind a small store interface
This keeps Telegram SDK details local to one part of the codebase and leaves room for future application logic to live outside transport handlers.
Default interaction model
The template is intentionally small but it demonstrates the most common Telegram interaction paths:
- Standard slash commands
- Reply keyboards
- Inline keyboards with callback data
- Inline query answers
- Per-chat session counters with TTL
- A default fallback response for unrecognized text messages
That combination is enough to turn the repository into a real bot instead of a transport proof of concept.
When to use this template
Use it when you want:
- A Go bot project that can start locally with only a bot token
- A codebase that is already structured for tests and future growth
- A clean switch between polling and webhook deployment modes
- A lightweight session layer without committing to a database on day one
If you need background job orchestration, persistent domain data, or multiple external integrations, this repo is still a good starting point, but those parts are expected to be added on top of the current skeleton.