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

如何检测Telegram机器人Web应用被用户关闭?

检测Telegram Web应用被自带关闭按钮关闭的可行方案

目前Telegram官方并未提供直接监听自带关闭按钮触发事件的原生接口,但可以通过以下两种稳定方案实现你的需求:

1. 后端心跳超时检测

  • 前端实现:Web应用启动后,每隔5-10秒通过异步请求(比如fetch或navigator.sendBeacon)向机器人后端发送心跳,请求携带从Telegram WebApp的initData中提取的唯一用户标识(如user.id)。
  • 后端处理:后端维护一个存储用户最后活跃时间的缓存或数据库表,同时启动定时任务(比如每分钟执行一次),扫描所有用户的最后活跃时间。若某用户的最后活跃时间超过设定阈值(建议设为20-30秒,大于心跳间隔),则判定Web应用已被关闭,执行对应的数据库操作。
  • 优势:不受前端环境限制,即使前端因网络波动无法发送关闭信号,后端也能通过超时判断用户状态,可靠性最高。

2. 前端视口变化事件间接判断

  • 前端实现:监听Telegram WebApp提供的viewportChanged事件,该事件会在Web应用的视口尺寸变化时触发。当检测到视口高度或宽度骤降至接近0(比如小于10px)时,立即调用navigator.sendBeacon()向后端发送关闭通知(携带用户标识)。
  • 注意事项:需排除正常的视口调整场景(比如移动端横屏切换),可以通过判断尺寸变化的幅度和速度来过滤误触发;使用navigator.sendBeacon()而非普通AJAX,因为它能在页面卸载阶段异步发送请求,避免因页面关闭导致请求中断。

关键说明

  • 前端的unload、beforeunload、pagehide等事件在Telegram的WebView环境中会被限制,无法可靠触发;
  • web_app_close事件仅在你主动调用Telegram.WebApp.close()时触发,无法捕获Telegram自带关闭按钮的操作;
  • 心跳超时方案是生产环境中最推荐的方式,视口变化方案可作为补充,但需做好误触发的过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 16:16:14