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

部署在Heroku的Telegram Bot被匿名GET请求ping无法休眠如何解决

Heroku部署Telegram Bot被匿名GET请求阻止休眠的解决方案

排查源头定时请求

首先优先排查是否配置了第三方存活检测服务:

  • 大部分每30分钟一次的固定GET请求都来自自动存活检测工具,如果你之前为了避免Bot休眠配置过这类服务,直接关闭即可解决问题
  • 检查代码仓库的CI/CD配置、Heroku应用的附加组件,确认没有配置自动ping的定时任务

应用层快速拦截无效请求

如果是未知来源的扫描请求,可以直接在应用入口拦截所有非Telegram Webhook所需的请求,尽可能降低资源占用:

方案1:全局拦截GET请求

如果你用Flask、Django这类Web框架提供Webhook服务,直接在顶层路由匹配所有GET路径,返回无内容的204响应,避免后续多余逻辑执行:

# Flask示例代码
from flask import Flask, Response

app = Flask(__name__)

# 匹配所有路径的GET请求,直接返回204
@app.route('/', methods=['GET'], defaults={'path': ''})
@app.route('/<path:path>', methods=['GET'])
def block_all_get(path):
    return Response(status=204)

# 保留原有Telegram Webhook的POST路由
@app.route('/你的webhook路径', methods=['POST'])
def webhook_handler():
    # 原有业务逻辑
    pass

方案2:新增Telegram IP白名单校验

Telegram官方公开了所有Webhook请求的来源IP段,你可以在应用入口新增IP校验逻辑,仅放行来自官方IP段的POST请求,其他所有来源的请求直接返回204,从根源拦截无效扫描请求。

调整进程类型彻底规避HTTP请求

如果你使用轮询模式(而非Webhook模式)运行Telegram Bot,直接修改Heroku的Procfile文件,把进程类型从web改为worker:

worker: python 你的启动文件.py

worker进程不会开放公共HTTP端口,不会收到任何外部HTTP请求,完全避免被无效GET请求唤醒,符合免费层30分钟无任务自动休眠的规则。修改完成后需要到Heroku应用的资源面板,关闭原有的web进程,启用新的worker进程才会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:54:03