Telegram 游戏平台:HTML5 Canvas、WebGL 机器人架构与群组排行榜
本文介绍 Telegram 游戏与 Mini App 的运作机制:从点击 Play 到网页视图加载、排行榜写回消息,并说明开发者能看到哪些信息,以及哪些请求正常、哪些应当警惕。
本文介绍 Telegram 游戏与 Mini App 的运作机制:从点击 Play 到网页视图加载、排行榜写回消息,并说明开发者能看到哪些信息,以及哪些请求正常、哪些应当警惕。

Telegram 游戏是一个在聊天内打开的网页。无需安装任何东西,分数会以排行榜的形式回写到消息上,而整个游戏的存在与消亡都依附于它被发布的那段对话。
这套机制最初于 2016 年为游戏而构建,如今每一个 Mini App 用的都是同一套。理解了它,整个 Mini App 世界就变得清晰可读——包括其中那些值得警惕的部分。
你将能够做到
- 在任何聊天中启动一个游戏,并向其中的人发起挑战。
- 解释从点击 Play 到游戏出现之间发生了什么。
- 说明游戏或 Mini App 的开发者能看到你的哪些信息。
- 辨别 Mini App 发出的哪些请求是正常的,哪些不是。
排行榜是消息的一部分,而不是游戏的一部分——正因如此,聊天中的每个人都会同时看到它更新。
点击 Play 时会发生什么
在任何聊天中输入游戏机器人的用户名即可召唤一个游戏。机器人会回复一张卡片——包含标题、图片和 Play 按钮——作为一条普通消息发布,聊天中的每个人都能看到并使用。
点击 Play 会向 Telegram 请求一个一次性地址。Telegram 返回该地址,在聊天上方打开一个网页视图,游戏便从开发者自己的服务器加载。从那一刻起,你看到的是一个网页,而不是 Telegram。
当一局结束时,游戏会把你的分数回传,Telegram 则用新的排名重写原来那条消息。排行榜属于那条消息,所以同一个游戏发布在两个群里,会保留两份各自独立的竞争记录。
游戏、Mini App 以及该信任什么
它们都以同样的方式打开,而这恰恰就是问题所在。以下四种东西都会在那个网页视图中打开,我们来看看每一种的正常行为边界在哪里。
群组里的一个游戏
一个 Mini App
一个想要连接钱包的
一个想要密码的
一个普通游戏
一个真正干活的 Mini App
它要求连接钱包
它索要 Telegram 验证码或密码
整条规则就是:把网页视图里打开的东西当作一个网站来对待,因为它本来就是。
启动一个游戏
- 在聊天中输入游戏机器人的用户名 在任何对话或群组中,以 @ 加上名字开头。键盘上方会出现一张卡片。
- 从列表中选择一个游戏 机器人会提供它所托管的内容。选中一个,它就会作为一条消息发布到聊天中。
- 点击 Play 网页视图在聊天上方打开,游戏随之加载。
- 玩完,让它关闭 你的分数会被写回那条消息,聊天中的每个人都会看到排行榜更新。
- 滑动返回对话 聊天仍停留在你离开时的位置。没有安装任何东西,也没有任何东西在运行。
为什么这个小功能很重要
游戏平台证明了一个在当时看来微不足道的观点:一个完整的交互式应用可以运行在对话之中,作为一条消息被分享,并把结果写回聊天,而无需任何人离开或安装任何东西。
此后在 Telegram 上构建的一切都沿用了这种形态。商店、工具、票务、整波点击即玩的 App 以及附着其上的钱包,都是同一个网页视图、同一套握手流程,只是做得更多。上面各面板末尾的告诫也出自同一处:机制本身是中立的,它是否可信,完全取决于写这个页面的人是否可信。