PythonAnywhere部署Telegram Bot POST接口不工作问题咨询
解答
1. 是否必须使用付费账户
不需要。PythonAnywhere免费账户完全可以正常运行Telegram Bot Webhook服务,仅需遵守免费账户的限制规则:
- 仅可使用平台分配的
*.pythonanywhere.com二级域名,你当前使用的https://logrt.pythonanywhere.com符合要求,且自带HTTPS,满足Telegram Webhook的证书要求 - 免费账户有每日CPU运行时长、请求次数配额,个人自用Bot的流量完全不会触达上限,仅高流量公开Bot需要升级付费方案
- 注意:所有账户(含付费)访问Telegram API都必须走平台指定的
http://proxy.server:3128代理,你代码中的代理配置思路正确,但旧教程的适配写法存在兼容问题
2. 无错误输出是否为依赖安装问题
存在极大的依赖、配置适配问题,按以下优先级排查:
- 首先修复依赖兼容问题:
telepot库已停止维护超过5年,和urllib3 2.0+版本存在静默兼容问题,代理请求会直接失败且不抛出可见错误。执行pip install urllib3==1.26.18将urllib3降级到1.26.x版本即可解决该问题。 - 检查Web应用运行环境一致性:确认PythonAnywhere Web面板中配置的Python版本、虚拟环境路径,和你安装
flask/telepot/urllib3的环境完全一致,新用户常出现依赖装在全局Python、但Web应用跑在独立虚拟环境的情况,会导致库导入失败。 - 移除全局位置的
bot.setWebhook()调用:你当前代码在Flask应用初始化阶段就会向外发送请求配置Webhook,免费账户应用启动阶段的出站请求可能被拦截,直接导致整个Flask应用加载失败,POST路由自然无法响应。正确做法是将Webhook配置逻辑单独写成一次性脚本,手动执行一次完成配置即可,不要放在Flask服务的运行代码中。 - 直接查看错误日志定位问题:PythonAnywhere的Web应用报错不会打印在你运行脚本的终端,所有加载错误、请求处理错误都会存在对应站点的错误日志中,路径为
/var/log/logrt.pythonanywhere.com.error.log,直接查看日志即可拿到明确的错误信息。 - 额外检查:不要在Flask入口文件中写
app.run()逻辑,PythonAnywhere通过WSGI进程直接加载app对象,手动调用run方法会触发端口冲突,导致服务无法启动。
3. 最新部署注意事项
目前已经不推荐参考2018年基于telepot的旧教程,部署时注意以下要点即可:
- 优先选择仍在维护的Telegram Bot库,比如官方维护的
python-telegram-botv20+版本,或者轻量的pyTelegramBotAPI,这类库已经适配新版Python和依赖,不会出现旧库的兼容问题。 - Webhook配置完成后,可调用Telegram Bot API的
getWebhookInfo接口检查状态,只要返回结果中pending_update_count为0、last_error_message字段为空,就说明Telegram侧的Webhook配置完全正常。 - 每次修改代码后,需要到PythonAnywhere的Web面板点击「Reload」按钮重启Web应用,修改才会生效,很多新用户改完代码不重启,会一直运行旧版本代码。
内容的提问来源于stack exchange,提问作者David Ricardo Menacho Vadillo
相关产品推荐
相关产品推荐

