If your Telegram bot is not replying to the /start command, Hey! Don’t worry this is one of the most common issues developers face while building bots.
In most cases, the problem is small and easy to fix. This guide walks you through the exact reasons and quick solutions.
Quick Answer
Your bot usually fails to respond to /start because of one of these:
- Bot is not running
- Wrong token
- Handler not registered
- Privacy mode issue
- Webhook/polling conflict
- Bot blocked by user
- Bot received too many requests
- Long Polling Backlog (Bot Processing Old Updates)
- Corrupted Session Files (in Pyrogram bots)
Check these first and one of them is almost always the culprit.
1. Bot Is Not Running
This is the number one reason.
If your script is stopped, crashed, or stuck, the bot will appear online but won’t reply.
What to check
- Is your script running continuously?
- Any errors in the console?
- Did the process exit silently?
Quick fix
Restart your bot:
python bot.pyAlso, check logs carefully – many beginners miss hidden exceptions.
2. Wrong Bot Token
If the token is incorrect, the bot connects but cannot receive updates properly.
Common mistakes
- Extra spaces in token
- Using old token
- Copy–paste error
Verify token
Get the correct token again from Telegram BotFather and replace it.
3. /start Handler Not Registered
Sometimes the bot is running perfectly, but you forgot to add the handler.
Example problem
You wrote the function, but never attached it.
Correct example (python-telegram-bot)
from telegram.ext import Application, CommandHandler
async def start(update, context):
await update.message.reply_text("Hello!")
app = Application.builder().token("YOUR_TOKEN").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()Checklist
- Function exists
- Handler added
- Command name is correct (
"start")
4. Privacy Mode Issue (Group Chats)
If your bot works in private chat but not in groups, privacy mode is the reason.
By default, bots in groups only see commands, not all messages.
Fix
- Open BotFather
- Send:
/setprivacy- Disable privacy mode
After this, restart your bot.
5. Polling vs Webhook Conflict
Your bot cannot use both webhook and polling at the same time.
Symptoms
- Bot shows no error
/startgives no reply- Bot worked earlier
Check webhook
Run:
https://api.telegram.org/bot<TOKEN>/getWebhookInfoFix
If webhook exists and you use polling:
https://api.telegram.org/bot<TOKEN>/deleteWebhookThen restart your bot.
6. Bot Blocked by User
If the user blocked the bot, it cannot reply.
How to confirm
- Try from another account
- Check for
Forbidden: bot was blocked by the userin logs
Fix
User must manually unblock the bot.
7. Bot Crashes Inside the Handler
Sometimes the bot receives /start but crashes before replying.
Example
async def start(update, context):
print(unknown_variable) # crash hereWhat to do
Always wrap with logging or try–except while debugging.
async def start(update, context):
try:
await update.message.reply_text("Hello!")
except Exception as e:
print(e)8. Multiple Bot Instances Running
Running the same bot twice causes update conflicts.
Symptoms
- Works sometimes
- Randomly stops
- No clear error
Fix
Ensure only one instance is running.
On Linux:
ps aux | grep pythonKill duplicates.
9. Bot Received Too Many Requests (Rate Limiting)
Sometimes your bot is working correctly but still doesn’t respond to /start because it is overwhelmed with too many incoming requests at the same time.
This usually happens when:
- Your bot goes viral
- Multiple users hit
/startsimultaneously - You are sending bulk messages
- The server is slow or underpowered
What happens internally
Telegram applies rate limits. When your bot exceeds them:
- Responses get delayed
- Messages may fail silently
- You may see
RetryAfteror flood errors in logs
How to identify this issue
Check your logs for errors like:
Flood control exceededRetryAfter- Timeout errors
- Slow response warnings
Also observe:
- Bot works during low traffic
- Bot fails during peak usage
Quick fixes
1. Add proper error handling
from telegram.error import RetryAfter
import asyncio
try:
await update.message.reply_text("Hello!")
except RetryAfter as e:
await asyncio.sleep(e.retry_after)
2. Use a queue system (recommended for busy bots)
Instead of replying instantly, push updates into a queue (Redis, RabbitMQ, etc.) and process them gradually.
This prevents sudden traffic spikes from killing your bot.
3. Improve your hosting
If you are running on a small VPS or shared hosting:
- Increase CPU/RAM
- Use faster network
- Avoid free-tier servers for production bots
4. Avoid aggressive bulk messaging
If you send messages to many users at once, Telegram may temporarily limit your bot.
Always add small delays in broadcast loops.
If your bot works perfectly during testing but fails in production, high traffic is often the hidden reason.
10. Long Polling Backlog (Bot Processing Old Updates)
This issue is specific to long polling bots (Bot API bots). If your bot was offline or overwhelmed, it may need to process a backlog of old updates before it reaches the latest /start command.
Because of this, users experience delayed responses even though the bot is running.
When this happens
This usually occurs when:
- Your bot was offline for some time
- The bot received many messages during downtime
- The bot is handling heavy traffic
- Processing logic is slow
When the bot comes back online, it starts processing updates in order — oldest first.
So new users who send /start must wait in the queue.
Symptoms
You may notice:
/startreplies come very late- Bot responds to old messages first
- High CPU usage after bot restart
- Large update queue
Why this happens
In long polling, Telegram stores pending updates for your bot. When your bot reconnects, it fetches all pending updates and processes them sequentially.
This is expected behavior and not a bug.
Quick fixes
1. Skip old updates on startup (recommended)
Most frameworks support dropping pending updates.
python-telegram-bot example:
app.run_polling(drop_pending_updates=True)This tells the bot:
Ignore old messages and start fresh.
2. Optimize handler speed
Slow database calls or heavy processing can worsen backlog delays.
Try to:
- Use async functions
- Avoid blocking code
- Move heavy work to background jobs
3. Consider webhooks for high-scale bots
If your bot handles heavy traffic regularly, webhooks are more scalable than long polling.
When NOT to drop pending updates
Do not enable drop_pending_updates=True if:
- You must process every message
- You are building a support bot
- You cannot afford to miss updates
11. Corrupted Pyrogram Session Files
If you are using Pyrogram-based bots, sometimes the bot stops responding to /start because the session file becomes corrupted or stuck. Changing the bot’s session name also makes it unresponsive.
This is more common when:
- The bot was forcefully stopped
- Bot session name changed
- The server crashed unexpectedly
- Multiple instances used the same session
- Disk write was interrupted
When the session is unhealthy, the bot may connect but fail to receive updates properly.
Symptoms
Watch for these signs:
- Bot shows “started” but does nothing
- No updates are received
- Works after fresh login
- Random disconnect issues
Quick fix
Stop your bot and delete the session files.
Typical files:
your_bot_session.session
your_bot_session.session-journalThen restart the bot so Pyrogram creates a fresh session.
Conclusion
When a Telegram bot ignores /start or any other commands, the issue is rarely complex. In most cases, it’s a missing handler, stopped process, or webhook conflict.
Start with the simple checks above, and you’ll usually fix the problem in minutes.
FAQ
1. Why does my bot show online but not reply?
Because the script is running but not receiving updates — usually due to webhook conflict or missing handler.
2. Why does /start work in private but not in group?
Privacy mode is enabled. Disable it using BotFather.
3. Do I need to restart the bot after changes?
Yes. Always restart after:
- Changing token
- Updating handlers
- Modifying webhook
Also Read:
