A bot minden üzenetre válaszol, amíg le nem csukod a laptop fedelét. Utána a felhasználók hiába várnak választ. Egy kis VPS ezt havi néhány dollárért megoldja. A Telegram-bothoz legjobb VPS attól függ, hogyan kapja meg a bot a frissítéseket: vagy lekéri őket a Telegramtól, vagy a Telegram küldi el őket neki.
Ez a döntés határozza meg a szükséges portokat és tanúsítványt, valamint azt, kell-e nyilvános IPv4-kapcsolat.
A rövid verzió
- Egyetlen bothoz VPS-en használj long pollingot. Nem kell hozzá domain, tanúsítvány vagy nyitott port.
- A webhookokhoz HTTPS szükséges a 443-as, 80-as, 88-as vagy 8443-as porton, valamint nyilvános IPv4-cím. A Telegram nem továbbít webhookokat IPv6-on.
- 512 MB of RAM is a workable start for one bot with no local database.
- A botot systemd segítségével tartsd működésben, vagy a Docker újraindítási szabályával, ha már konténereket telepítesz.
- A szolgáltatót az IPv4 és a szabad RAM-kapacitás alapján válaszd ki, ne csupán a listaár alapján.
Polling vagy webhookok: a szerverigényt meghatározó döntés
A Telegram-bot kétféleképpen kaphat frissítéseket. Long polling esetén a bot meghívja a getUpdates metódust, a Telegram pedig nyitva tartja a kérést, amíg nem érkezik frissítés, vagy le nem jár az időkorlát. Így minden kapcsolat a szerveredről indul. Webhook esetén egyszer regisztrálsz egy URL-t a setWebhook segítségével, majd a Telegram minden frissítést HTTPS-en, POST-kérésben küld el oda.
| Követelmény | Long polling (getUpdates) |
Webhook (setWebhook) |
|---|---|---|
| Bejövő port | Nincs; csak kimenő kérések | HTTPS a 443-as, 80-as, 88-as vagy 8443-as porton |
| Nyilvános IPv4 | Nem szükséges | Szükséges; a webhookok nem támogatják az IPv6-ot |
| Domain és tanúsítvány | Nem szükségesek | Tanúsítvány szükséges; általában domaint használnak, de egy önaláírt tanúsítvány CN mezője az IP-cím is lehet |
| Folyamat | Folyamatosan fut | Folyamatosan válaszol a HTTPS-kérésekre |
A webhookos oszlop a Telegram webhookkövetelményeit követi.
A bot által használt módszer megállapításához kérdezd le a Bot API-t:
curl "https://api.telegram.org/bot<YOUR_TOKEN>/getWebhookInfo"
Ha a válaszban "url":"" szerepel, nincs beállítva webhook, így a bot használhat long pollingot. A grammY bot.start() hívása alapértelmezés szerint long pollingot használ; a python-telegram-bot esetén run_polling() vagy run_webhook() használható.
Egyetlen, saját VPS-en futó bothoz pollingot választanék, ami a grammY alapértelmezett ajánlása is. A webhookok akkor előnyösebbek, ha a gépen már fut fordított proxy (a HTTPS-kéréseket a bothoz továbbító webszerver), több bot osztozik egy HTTPS-végponton, vagy serverless platformot használsz. Ilyenkor a Caddy beszerzi és megújítja a tanúsítványt cronfeladat nélkül.
Egy rövid kiesés késlelteti az üzeneteket, de nem veszti el őket. A Bot API frissítési szabályai szerint a Telegram legfeljebb 24 órán át tárolja a frissítéseket, amíg a bot át nem veszi őket, mindkét módszernél, és megismétli a sikertelen webhookkéréseket, mielőtt feladná.
Ha a webhook közvetlenül használja a portját, korlátozd a hozzáférést a Telegram közzétett forráscímtartományaira. Ha a 443-as portot más webhelyeket is kiszolgáló fordított proxy osztja meg, a korlátozást csak a webhook útvonalára alkalmazd, vagy használd a Telegram titkos tokenjét a többi HTTPS-forgalom letiltása helyett. A webhookútmutató két forráscímtartományt sorol fel, és figyelmeztet, hogy ezek változhatnak. UFW-t használva a gép tűzfalaként:
sudo ufw allow 22/tcp # keep SSH open before you enable the firewall
sudo ufw allow proto tcp from 149.154.160.0/20 to any port 443
sudo ufw allow proto tcp from 91.108.4.0/22 to any port 443
sudo ufw allow 80/tcp # if your HTTPS setup uses HTTP validation or redirects HTTP to HTTPS
sudo ufw enable
Módosítsd a 443 értéket, ha a webhook a 80-as, 88-as vagy 8443-as porton figyel. Ezek a szabályok a közvetlenül a gazdagépen futó botot védik. A Docker tűzfal-dokumentációja kimondja, hogy a közzétett port megkerüli az UFW-t, ezért a -p 443:443 kapcsolóval indított webhookkonténer mindenki számára elérhető marad. Állíts be secret_token értéket is a setWebhook hívásban. A Telegram ezt minden kérés X-Telegram-Bot-Api-Secret-Token fejlécében visszaküldi, és a kéréskezelőd elutasítja azokat a kéréseket, amelyekből hiányzik.
A bot folyamatos működtetése: systemd vagy Docker
Egy Telegram-bot éjjel-nappali működtetéséhez összeomlás és gépújraindítás után újra kell indítani a botot. VPS-en ezt a systemd végzi, vagy a Docker, ha a botot image-ként terjeszted.
A systemd-egység egy rövid konfigurációs fájl, amely megmondja az init rendszernek, hogyan indítson el és indítson újra egy programot. Hozd létre a /etc/systemd/system/telegram-bot.service fájlt:
[Unit]
Description=Telegram bot
After=network-online.target
Wants=network-online.target
[Service]
User=bot
WorkingDirectory=/opt/bot
EnvironmentFile=/opt/bot/.env
ExecStart=/opt/bot/venv/bin/python bot.py
# Node: ExecStart=/usr/bin/node bot.js
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Helyezd a tokent a projektmappában egy .env fájlba BOT_TOKEN=... formában, és olvasd be az os.environ["BOT_TOKEN"] segítségével (Node: process.env.BOT_TOKEN), hogy ne kerüljön a kódba. Ezután másold a projektet a helyére, és indítsd el:
sudo mkdir -p /opt/bot
sudo cp -r ~/your-bot/. /opt/bot/ # your project, after git clone or scp from your machine; include .env and requirements.txt
sudo apt install -y python3-venv # Debian/Ubuntu
sudo useradd --system --no-create-home bot
sudo chown -R bot:bot /opt/bot
sudo -u bot python3 -m venv /opt/bot/venv
sudo -u bot /opt/bot/venv/bin/pip install -r /opt/bot/requirements.txt
# Node: skip the venv and pip commands above, then run:
cd /opt/bot && sudo -u bot npm ci
sudo chmod 600 /opt/bot/.env
sudo systemctl daemon-reload
sudo systemctl enable --now telegram-bot
systemctl status telegram-bot # look for: Active: active (running)
sudo journalctl -u telegram-bot -f # follow the bot's logs
A Restart=always szabály szabályos kilépés és összeomlás után is újraindítja a botot; az on-failure kihagyja a szabályos kilépéseket a systemd.service kézikönyve szerint. A RestartSec=5 szünetet iktat a próbálkozások közé, a WantedBy=multi-user.target és az enable pedig rendszerindításkor elindítja a botot. Ha folyton újraindul, a sudo journalctl -u telegram-bot -n 50 megmutatja a hibaveremet. Először ellenőrizd, hogy nem hiányzik-e a BOT_TOKEN.
A Dockerben egy kapcsoló felel meg ennek:
docker run -d --name telegram-bot --restart unless-stopped --env-file .env your-bot-image
docker logs -f telegram-bot
A Compose-ban ez a sor: restart: unless-stopped. A Docker újraindítási szabályainak dokumentációja szerint a konténer kilépés vagy a démon újraindítása után visszatér, de nem akkor, ha te állítottad le. Ez a gépújraindításokat is lefedi, ha maga a Docker rendszerindításkor elindul, ahogy Debianon és Ubuntun alapértelmezés szerint történik. Más rendszereken futtasd a sudo systemctl enable docker.service parancsot.
Az én szabályom: egyetlen szkript kis gépen systemd-t kap, további démon nélkül a memóriában. Ha már készítesz image-eket vagy futtatsz más konténereket, használj Dockert, és számolj a démon RAM-fogyasztásával.
Egyik eszköz sem jelzi, ha a bot leállt. Egy második szerveren futó Uptime Kuma push monitor képes erre. A bot időzítve hívja a monitor URL-jét, az Uptime Kuma pedig Telegramon riaszt, amikor a hívások megszűnnek.
Ahol az ingyenes tárhely és az otthoni szerverek korlátokba ütköznek
A Render 15 perc bejövő forgalom nélküli működés után leállítja az ingyenes webszolgáltatást, és a Render ingyenes csomagjának dokumentációja szerint az ébresztés körülbelül egy perc. A pollingot használó bot nem kap bejövő forgalmat, ezért leállítják. A webhookos botot a Telegram POST-kérése ébreszti fel, így csendes időszakok után hidegindítás történik. Az tehát, hogy az ingyenes tárhely megfelel-e Telegram-bothoz, a használt módszertől függ.
A grammY útmutatója a serverless platformokat jó választásnak tartja webhookokhoz, míg a long polling éjjel-nappal működő gépet igényel. A Fly.io használat alapján számláz, és mentett bankkártyát kér.
Egy Raspberry Pi vagy régi PC képes pollingot használó botot futtatni, amíg a gép, az áramellátás és a kapcsolat működik. Az otthoni webhookokhoz nyilvános cím és porttovábbítás is kell. Egy hobbibothoz bármelyik ingyenes út elegendő lehet.
A VPS mindkét módszerhez megfelel, rögzített havi áron.
Öt VPS-szolgáltató összehasonlítása Telegram-bothoz
A táblázat öt fizetős belépőcsomagot hasonlít össze Telegram-botok üzemeltetéséhez, a 2026 októberében érvényes, meghirdetett havi árakon, adók nélkül. Az akciós árakat külön jelezzük, ahol érvényesek.
| Szolgáltató | A belépőcsomag jellemzői | Havi ár | Nyilvános IPv4 | Számlázás |
|---|---|---|---|---|
| Cloudzy | 1 vCPU (AMD EPYC), 512 MB DDR5, 20 GB NVMe, 1 TB adatforgalom | 2,48 USD akciósan (4,95 USD normál áron) | Az árban, IPv6-tal együtt | Óránként vagy havonta |
| DigitalOcean | 1 vCPU, 512 MiB, 10 GiB SSD, 500 GiB adatforgalom | 4 USD-től | Az árban | Másodpercenként, legfeljebb a havi árig |
| Vultr | 1 vCPU, 512 MB, 10 GB SSD, 512 GB adatforgalom | 2,50 USD-től csak IPv6; 3,50 USD-től IPv4-gyel | Csak a 3,50 USD-s csomagban | Óránként vagy havonta |
| Hetzner (Németország/Finnország) | 2 vCPU, 4 GB, 40 GB SSD, 20 TB adatforgalom | 5,49 EUR-tól áfa nélkül | Felár, havi 0,50 EUR-tól áfa nélkül (az IPv6 ingyenes) | Óránként, legfeljebb a havi árig |
| Linode (Akamai) | 1 vCPU, 1 GB, 25 GB tárhely, 1 TB adatforgalom | 5 USD-től | Az árban | Óránként vagy havonta |
A Vultr csak IPv6-os csomagjában nincs IPv4, a Hetzner ára pedig nem tartalmazza az IPv4-címet. Enélkül egyik sem tud webhookot fogadni.
A pollingot használó bot kizárólag IPv6-on is futhat, mert az api.telegram.org rendelkezik IPv6-címmel. Minden más elért célpontnak is kell ilyen cím, beleértve a csomagregisztereket, a Git-tárhelyedet és az összes meghívott API-t. Választás előtt ellenőrizd mindegyik kiszolgálót:
dig +short AAAA api.telegram.org
dig +short AAAA github.com
dig +short AAAA pypi.org # repeat for every host your bot or its installs reach
Az üres válasz azt jelenti, hogy a kiszolgálónak nincs IPv6-címe.
Elég 512 MB egy Telegram-bothoz?
Egyetlen, helyi adatbázis nélküli botot 512 MB-on indítanék el. A python-telegram-bot dokumentációja nem ad meg memóriaigényt. Az számít, mi osztozik a gépen: az operációs rendszer, adott esetben a Docker démonja és a helyi adatbázis. Mérd meg a fogyasztást.
free -m # "available" is your headroom; the Swap row shows swap use
ps -o rss,cmd -p "$(systemctl show -p MainPID --value telegram-bot)" # bot's resident memory, in KB
docker stats --no-stream # per-container memory, if the bot runs in Docker
journalctl -k | grep -i "out of memory" # kernel OOM kills
Memóriahiány miatti leállításkor (OOM) a kernel befejez egy folyamatot, hogy RAM-ot szabadítson fel. A systemd újraindítja a botot, így ez a naplósor lehet az egyetlen bizonyíték. Válts 1 GB-ra, ha OOM miatti leállítás történik, ha folyamatos a swap használata, vagy mielőtt helyi adatbázist vagy második botot adsz hozzá.
Melyiket válaszd?
Egy bothoz 512 MB-os csomagot választanék, nyilvános IPv4-gyel az árban. A szolgáltató ezután az ártól, a szabad kapacitástól és a felhasználók helyétől függ.
- A legalacsonyabb jelenlegi havi ár: Cloudzy 2,48 USD-ért az 50%-os akció alatt, IPv4-gyel és IPv6-tal az árban.
- A legalacsonyabb jelenlegi ár IPv4-gyel: Cloudzy 2,48 USD-ért az akció alatt. A dedikált IPv4 és az IPv6 is benne van az árban.
- 1 GB of headroom for Docker or a small database: Linode, from $5 a month.
- Több bot vagy adatbázis, európai felhasználók: Hetzner, a táblázatban a legtöbb erőforrást adja eurónként, ha a csomag elérhető (2026 októberében nem elérhetőként szerepelt). Webhookokhoz add hozzá az IPv4 díját.
- Több tárhely és adatforgalom 512 MB mellett: Cloudzy. Az 512 MB-os csomagok közül ez kínálja a legtöbb tárhelyet (20 GB NVMe a 10 helyett) és adatforgalmat (1 TB a körülbelül 500 GB helyett), IPv4-gyel és IPv6-tal az árban. A jelenlegi akciós áron a Cloudzy a többi itt összehasonlított belépőcsomagnál is olcsóbb.
A jelenlegi akciós áron a Cloudzy az összehasonlítás legalacsonyabb havi árát több tárhellyel és adatforgalommal párosítja, mint a többi 512 MB-os csomag. A Cloudzy 512 MB-os csomagja óránkénti számlázást és 14 napos pénzvisszafizetési garanciát kínál, így néhány napig futtathatod rajta a botot, mielőtt elköteleződsz. Válaszd a felhasználókhoz legközelebbi helyszínt, telepíts egy Cloudzy Linux VPS-t, és add hozzá a fenti systemd-egységet.
Gyakran ismételt kérdések
Melyik a legolcsóbb VPS, amelyen Telegram-bot futtatható?
A 2026 októberében érvényes árakon a Cloudzy 512 MB-os csomagja a legolcsóbb az öt közül: havi 2,48 USD az 50%-os akció alatt, dedikált IPv4-gyel és IPv6-tal az árban. Normál ára havi 4,95 USD. A Vultr csak IPv6-os lehetősége valamivel magasabb áron indul, 2,50 USD-től.
Miért kell HTTPS a Telegram-webhookokhoz?
A Telegram a porttól függetlenül SSL/TLS-t követel a webhookokhoz a webhookútmutatója szerint. A sima HTTP-t elutasítja, és TLS 1.2-es vagy újabb verziót fogad el. TLS nélkül minden POST titkosítatlanul továbbítaná a felhasználók üzeneteit. A Let's Encrypt tanúsítványa működik, ahogy a setWebhook segítségével feltöltött önaláírt tanúsítvány is.
Futhat Telegram-bot 512 MB RAM-mal?
Általában igen, egyetlen, helyi adatbázis nélküli bot esetén. Figyeld a kernelnaplót memóriahiány miatti leállítások után kutatva, és válts 1 GB-ra, ha ilyet látsz, vagy amikor adatbázist adsz hozzá.
Hogyan tartsam működésben a Telegram-botot újraindítás után?
Engedélyezd a systemd-szolgáltatását a sudo systemctl enable --now telegram-bot paranccsal, vagy futtasd a konténert a --restart unless-stopped kapcsolóval, és engedélyezd a docker.service szolgáltatást, hogy a Docker rendszerindításkor elinduljon.
A Telegram IP-cím alapján korlátozza a botok kéréseinek gyakoriságát?
A Telegram botokra vonatkozó, korlátokról szóló GYIK-je botonkénti és csevegésenkénti korlátokat ír le; az új szerverre költözést nem szabad e korlátok megkerülési módjának tekinteni. Túllépéskor az API HTTP 429-et ad vissza egy retry_after értékkel. Várj ennyi másodpercet az újrapróbálkozás előtt.
Melyik szerverrégiót válasszam Telegram-bothoz?
Válaszd a felhasználókhoz és a bot által meghívott szolgáltatásokhoz legközelebbi helyszínt, majd mérd meg a kapcsolódási időt minden szóba jövő helyről a curl -o /dev/null -s -w '%{time_connect}\n' https://api.telegram.org paranccsal.
Beszélgetés
Hozzászólások
Jelentkezzen be a beszélgetéshez.