通过GitHub部署到Heroku的Telegram Bot无法接收Webhook消息求助
我之前把Telegram Bot部署到Heroku时也踩过类似的Webhook坑,咱们一步步排查解决:
1. 先修复最容易忽略的函数名冲突
看你的代码里,/start和/help命令的处理器函数名都是send_welcome,这会导致后面的/help处理器直接覆盖前面的/start处理器!Bot根本没法正确响应命令,看起来就像没收到消息。
赶紧把函数名改成不同的:
@bot.message_handler(commands=['start']) # welcome message handler def send_start_welcome(message): # 你的/start逻辑代码 @bot.message_handler(commands=['help']) # help message handler def send_help_welcome(message): # 你的/help逻辑代码
2. 验证Webhook URL是否配置正确
代码里的bot.set_webhook(url='https://myherokuapp.herokuapp.com/' + TOKEN),这里的myherokuapp必须替换成你实际的Heroku应用名称!比如你的Heroku app叫my-telegram-converter-bot,那URL就得写成https://my-telegram-converter-bot.herokuapp.com/ + TOKEN。
你可以手动调用Telegram的API检查Webhook状态,在终端执行:
curl https://api.telegram.org/bot<你的TOKEN>/getWebhookInfo
返回结果里的url要和你的Heroku域名完全一致,同时看last_error_message字段,Telegram会直接告诉你消息发送失败的原因(比如URL错误、SSL问题等)。
3. 确认依赖版本兼容性
旧版本的pyTelegramBotAPI可能和Flask的Webhook处理有兼容问题,确保你用的是最新稳定版:
- 本地执行
pip install --upgrade pytelegrambotapi - 在
requirements.txt里明确指定版本,比如:flask==2.3.3 pytelegrambotapi==4.14.0
Heroku部署时会严格按照这个文件安装依赖,版本不匹配很容易导致奇怪的问题。
4. 检查Flask服务是否正常运行
先访问你的Heroku应用根路径(比如https://your-app-name.herokuapp.com/),如果能返回!,说明Flask服务启动正常;
再用POST请求测试Webhook路由,用curl或者Postman执行:
curl -X POST https://your-app-name.herokuapp.com/<你的TOKEN>
如果返回!,说明路由配置没问题。
5. 查看Heroku日志找线索
登录Heroku控制台,实时查看应用日志:
heroku logs --tail
这里会显示Flask的请求记录、TeleBot的错误信息,比如有没有收到Telegram的POST请求,有没有报错(比如403、500错误),这些日志能直接帮你定位问题根源。
内容的提问来源于stack exchange,提问作者Erik Van Moon

