这两个词经常被混着用,但它们指的不是同一种东西。
机器人,就是你平时在聊天列表里点进去的那个对话。你发一句,它回一句。它能给你发文字、发图片、发一排按钮让你点。
小程序,是从机器人里(或者从某个按钮里)打开的一个界面。它看起来更像一个网页:有输入框、有列表、有选项卡、有确认按钮,可以往下滚。
用一句话概括区别:机器人的世界是"消息",小程序的世界是"界面"。
机器人的本质:一个对话式的接口
要理解区别,先看清机器人到底是什么。
它本质上是一个"对话式接口"。也就是说,它的输入是消息,输出也是消息。
这种形态的能力边界是被"消息"这个概念框住的。它能做的是:给你发一段文字、发一张图、发一个文件、发一排按钮。你点按钮,它再发下一条消息。
这个形态非常适合做那些"一步步问、一步步答"的事情。比如查一个状态、订阅一个提醒、走一个简单的选择流程。
但它不适合做复杂的东西。因为它没有表单,没有列表页,没有多步骤的填写界面。你想让它收集五个字段的信息,它只能一条一条问,体验非常别扭。
而这就是小程序被做出来的原因。
小程序的本质:一个在聊天里打开的网页
小程序的技术本质其实很朴素:它是一个跑在应用内部的网页。
你可以把它理解成"应用里开了一个浏览器窗口",只不过这个窗口被包装得像应用自己的一部分。你能在聊天里点开它,用完之后划掉,不用跳到外面去。
这个本质决定了它的能力边界完全不同。
既然它是一个网页,那它能做的事就多了:可以有完整的表单、可以有多页的流程、可以有列表和搜索、可以有图表、可以做那种"填完一屏再填下一屏"的操作。
所以这两者的区别可以概括成这样:机器人是"用消息跟你对话",小程序是"让你用一个应用"。
而这也解释了为什么很多操作看起来必须有小程序:一个需要你填地址、选规格、确认金额的流程,用消息一条条问会累死人,用一个界面就很自然。
怎么当场分辨你在跟哪一种打交道
道理讲完了,说一个实用的:你面对屏幕的时候,怎么知道自己现在是跟机器人说话,还是在一个小程序里。
最简单的判断是看有没有"聊天框"。
如果屏幕上主要是对话:你的消息在右边,它的回复在左边,你能打字,能点它给的按钮——那你在跟机器人打交道。
如果屏幕上出现了可以上下滚动的界面、有多个栏位、有表单让你填、有选项卡让你切——那你在小程序里。
还有一种情况介于两者之间,而且非常常见:机器人给你发了一条消息,下面带一排按钮,你点其中一个,界面就展开了。这时候你其实是跨了两种东西——从机器人走到了它挂的小程序。
另外有一个辅助线索:小程序通常是可以"收起"或者"关掉"的,关掉之后你会回到聊天里。而机器人的对话不存在"关掉"这个动作,它就是一个对话。
不过要说明的是,这个分辨的意义不在于分类,而在于提醒你自己当下在做什么。
因为在这两种状态下,你要交出去的东西不一样。跟机器人对话时,你要交的是"你发出去的那条消息";而在小程序里,你面对的是一个应用,它可能向你请求信息,你也可能在填一整个表单。后者交出去的东西往往更多。
所以分辨一下的好处是:你会意识到"现在这一步不是在聊天,是在填表"。而填表这件事,值得多看两眼。
所以区别不只是入口
回到标题那句判断。
很多人以为这俩的差别就是"入口不同"——一个在聊天列表里,一个要点按钮打开。这只是一半。
真正的差别在于:它们是两种界面形态,能力面不一样,能拿走的东西也不一样。
机器人能拿到的,主要是你发给它的消息。这一点我在讲机器人权限的那篇里详细说过。它的边界相对清楚:你不发给它,它一般拿不到。
而小程序呢?它在被你打开的那一刻,是一个正在运行的网页应用。它能向你请求一些东西,比如手机号;它也能让你在里面输入内容。
这两件事的性质不同。跟机器人打交道,你发送什么它才知道什么;跟小程序打交道,它是主动向你要的。
所以判断风险的方式也不一样。对机器人,你要留意"我发了什么给它";对小程序,你要留意"它向我请求了什么,以及我填了什么给它"。
至于小程序具体能拿到哪些权限,不同平台版本和不同小程序差别不小,我没有核实到一个统一的口径。所以我不给一张清单,而是给一个更稳的态度:别假设它安全,也别假设它无所不能——看它当场向你要什么。
它们常常是同一个东西的两个面
这是我觉得最需要说清的一点。
小程序很少单独存在。它通常是挂在某个机器人下面的:你从那个机器人的按钮点进去,进入到小程序界面。
也就是说,"机器人"和"小程序"往往不是两个不同的服务,而是同一个开发者的两个门面。
一个门面是消息式的(机器人和你对话),另一个门面是界面式的(小程序让你操作)。它们背后很可能是同一套服务器、同一个开发方。
这个事实的推论很重要:你在小程序里做的操作,那个机器人(也就是那个开发方)是知道的。 因为它们是同一家。
所以"入口不同"这个说法,反过来看才更准确:它们往往共用一个后端,只是给你看了两种不同的界面。
理解这一点之后,你对"我从机器人点进小程序,应该更放心吗"这个问题就有答案了:不会更放心,也不会更不放心——因为对你来说,它们本来就是一个对象。
权限从哪来,怎么撤回
既然它们常常是一家,那权限的来源也就清楚了:都是你点了同意。
不过这两者的"撤回"方式不一样,这一点值得记住。
机器人是一个"你添加过的对象"。所以你可以把它移除、可以拉黑它。移除之后,它就不能再主动给你发消息了。这个动作在讲机器人权限的文章里写过。
而小程序更像一个"你打开过的东西"。它不是列表里的一个条目,所以"移除"这个概念不完全适用。真正要撤回的,是你之前给过的那次授权。
具体在哪撤回,不同版本不太一样,通常要去设置里找和授权、已连接的网站或者类似字眼的地方看。所以我的建议是:如果你在某个小程序里给过手机号或者别的信息,后来不想给了,就去那个地方把它撤掉,而不是去聊天列表里找一个"移除",因为那儿没有。
这也带出一条实用结论:给小程序授权之前想清楚,比授权之后去找撤回更容易。
那到底该看什么
讲完原理,最后给判断的方法。和我在很多地方用的一样:不看它是什么,看它要什么。
有一个铁律值得先单说:正常的登录流程,永远不会在一个小程序里问你要密码。
因为这套体系的登录靠的是验证码和扫码,压根不需要你在第三方的界面里输入账号密码。所以只要某个小程序里出现了"请输入你的账号和密码",那它百分之百不是在帮你登录,而是在收你的凭据。这一条没有例外。
除了这条铁律,还有几个要留意的地方。
一个是它主动要你的手机号。有些小程序确实需要手机号才能用,但如果它一上来就要,而用途又说不清,那就值得停下来想想。
一个是它把你往外引。如果它要你点一个链接跳到外部网站去完成操作,那这个小程序就只是个跳板,后面那一步的风险得另外评估。
一个是它要钱。涉及付款、买币、充值的,都要按最高警惕处理。
一个是它要你替它拉人。让你转发、让你邀请、让你发展下线的,性质就变了。
这四条的判断方式,和判断一个机器人是否可信是完全一样的——因为它本来就是同一家。
几个常见的坑
第一个坑,是把小程序当成"比机器人更安全的版本"。它们是同一个开发方的两个界面,不存在哪个更可信。
第二个坑,是在小程序里输入账号密码。这一条没有例外,任何情况都不该做。
第三个坑,是给过授权之后忘了。小程序不会主动提醒你"你还给过我信息",所以要自己去设置里对一遍。
第四个坑,是想"移除"一个小程序却找不到入口。因为它不是一个你可以删除的对象,你要撤的是授权。
第五个坑,是以为小程序能力有限所以无害。它是网页应用,能力面比消息接口宽,所以更要看它当场向你要什么。
最后
如果只用三句话记住这篇,我希望是这三句。
机器人是"用消息跟你对话",它的边界被消息这个概念框住;小程序是"在聊天里打开的一个网页",它能给你完整的界面和流程。所以它们的区别不只是入口不同,而是两种界面形态、两种能力面。
而它们通常也不是两个服务,而是同一个开发方的两个门面——你从机器人点进小程序,背后往往是同一套东西。所以"从机器人进去是不是更安全"这个问题本身就不成立。
真正该看的是它当场向你要什么。记住那条没有例外的铁律:正常的登录永远不会在一个小程序里问你要密码。以及想撤回的时候,要撤的是授权,不是去找一个"移除"。