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

如何从Telegram内嵌H5游戏中获取玩家的用户信息?

获取Telegram H5游戏内的用户信息解决方案

核心误区纠正

你提到「开始游戏」按钮的回调消息from字段是Bot,这是正常行为——该回调是Telegram转发的Bot触发事件,并非用户直接发送的请求,不能通过这个回调获取当前游玩用户的信息。

正确获取流程

  1. 确保游戏通过sendGame方法发送
    只有使用Telegram Bot API的sendGame接口发送的游戏消息,Telegram才会在用户打开游戏时注入用户信息。不要用普通的链接消息替代sendGame请求,否则不会触发参数注入。

  2. 前端获取用户信息的正确方式
    Telegram不会把用户信息直接拼在URL上,而是通过内置WebView的Telegram.WebApp对象注入数据。你需要在H5游戏中做以下操作:

    • 先引入Telegram WebApp脚本:
      <script src="https://telegram.org/js/telegram-web-app.js"></script>
      
    • 初始化并获取用户信息:
      // 告知Telegram WebApp页面已加载完成
      window.Telegram.WebApp.ready();
      // 获取用户信息(initDataUnsafe包含未验证的原始数据,适合前端快速获取)
      const currentUser = window.Telegram.WebApp.initDataUnsafe.user;
      // 可拿到的字段示例:user_id、first_name、username(可选)、last_name(可选)
      console.log("当前游玩用户:", currentUser);
      
  3. 后端验证信息合法性(推荐)
    为了避免用户篡改前端数据,建议在后端验证信息真实性:

    • 从前端获取initData(可通过window.Telegram.WebApp.initData拿到完整的参数字符串)
    • 验证逻辑:
      1. 将initData按参数键名升序排序,拼接成key=value连接的字符串
      2. 使用Bot的token作为密钥,通过HMAC-SHA256算法对拼接字符串生成哈希值
      3. 将生成的哈希值与initData中的hash参数对比,一致则信息合法

常见排查点

  • 确认游戏是在Telegram内置WebView中打开,而非外部浏览器
  • 检查sendGame请求的game_short_name与BotFather中设置的游戏短名称完全一致
  • 确保H5页面使用HTTPS协议(Telegram WebApp仅支持HTTPS)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:01:12