You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PythonAnywhere上TeleBot Webhook失效问题排查求助

问题排查与修复方案

核心问题定位

从描述来看,单元测试调用Telegram API时大概率意外清空了Webhook配置——getWebhookInfo未返回URL,说明当前Bot的Webhook已被移除,这是PythonAnywhere上Webhook失效的直接原因。本地轮询正常,说明Bot核心逻辑、API密钥本身无问题,问题出在Telegram侧的Webhook配置状态。

分步修复步骤

1. 手动重置Webhook

直接通过Telegram API重新配置Webhook,确保参数正确。在本地运行以下代码(替换成你的Bot密钥和PythonAnywhere Webhook地址):

import requests

BOT_TOKEN = "你的Bot API密钥"
WEBHOOK_URL = "https://你的PythonAnywhere用户名.pythonanywhere.com/webhook"

response = requests.post(
    f"https://api.telegram.org/bot{BOT_TOKEN}/setWebhook",
    json={"url": WEBHOOK_URL}
)
print(response.json())

返回{"ok": true, "result": true, "description": "Webhook was set"}即表示配置成功。

2. 排查单元测试代码

重点检查测试用例中是否存在调用deleteWebhook的逻辑,或是测试时误操作清空了Webhook。如果测试需要临时移除Webhook,建议在测试结束后自动恢复配置:

# 测试收尾阶段添加恢复逻辑
def teardown_module():
    requests.post(
        f"https://api.telegram.org/bot{BOT_TOKEN}/setWebhook",
        json={"url": WEBHOOK_URL}
    )

3. 验证PythonAnywhere端配置

  • 确认Web应用的域名和路径与Webhook URL完全一致,必须带正确的后缀(比如/webhook),且是HTTPS协议(Telegram强制要求)。
  • 查看PythonAnywhere的访问日志(而非错误日志),检查是否有Telegram服务器的POST请求记录。若存在请求,说明连接正常;若无,大概率是URL配置错误。

4. 排查基础运行状态

  • 确认PythonAnywhere的Web应用处于正常运行状态,未被暂停。
  • 测试域名可访问性:用curl命令模拟请求,比如curl -X POST https://你的域名/webhook -d "test",验证Web应用是否能正常响应。

后续预防建议

  • 单元测试使用独立的测试Bot账号,避免操作生产Bot的Webhook配置。
  • 定期用getWebhookInfo检查状态,防止配置被意外修改:
response = requests.get(f"https://api.telegram.org/bot{BOT_TOKEN}/getWebhookInfo")
print(response.json())

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:12:32