如何为Azure Web App Service托管的Telegram Bot启用长连接
解决Azure Web App上Telegram Bot闲置后停止响应的问题
嘿,这个问题我之前帮朋友处理过!你遇到的核心问题其实是Azure Web App免费层的自动休眠机制——当你的Web App连续20分钟左右没有收到任何外部请求时,平台会自动关闭应用实例来节省服务器资源,这时候你的Telegram Bot就会停止运行;而手动刷新链接本质上是触发了实例重启,所以Bot又能恢复响应。
下面给你几个实用的解决方案,按优先级排序:
1. 开启Web App的「始终开启」功能
这是最直接有效的办法,步骤很简单:
- 登录Azure门户,找到你的目标Web App服务
- 在左侧导航栏里选择「配置」>「常规设置」
- 找到「始终开启」选项,把它从「关闭」切换为「开启」
- 点击页面顶部的「保存」按钮,等待配置生效
划重点:这个功能在免费学生订阅里是完全可用的,对于Telegram Bot这类低负载应用来说,完全能满足需求,不会触发配额问题。
2. 设置定时Ping请求唤醒应用
如果「始终开启」偶尔出现失效(比如免费层资源调度的小波动),可以用定时任务定期向你的Web App发送请求,防止它进入休眠:
- 你可以写个简单的脚本(比如Python或PowerShell),每隔15分钟向
http://appname.azurewebsites.net发送一个GET请求 - 也可以用Azure自带的「逻辑应用(Logic Apps)」创建一个定时触发器,每隔一段时间调用你的Web App URL
- 还可以在Bot代码里加一个
/health健康检查接口,返回200状态码,定时任务ping这个接口既能唤醒应用,还能顺便检查Bot的运行状态
3. 优化Bot的Webhook配置(辅助项)
如果你用的是Telegram Bot的Webhook模式,确保配置正确,让Telegram的请求能稳定触发你的应用:
- 确认已经通过Telegram Bot API的
setWebhook方法设置了正确的Webhook URL - 避免把Bot的逻辑只绑定在单次请求处理中,尽量用后台托管服务(比如.NET的Hosted Service)来运行Bot的核心逻辑,这样即使没有外部请求,Bot也能保持内部活跃(不过还是需要配合前面的方案防止Azure休眠)
额外小提醒
- 免费层的Web App有每日运行时间配额,不过对于Telegram Bot这种非高频应用来说,基本不会用完
- 如果之后Bot的使用量变大,免费层不够用了,可以考虑升级到基础层,那里的资源限制更少,休眠机制也可以更灵活配置
内容的提问来源于stack exchange,提问作者TheMelancholicMan




