发出去的 WhatsApp 链接,和你打的字一模一样

号码和消息各填一次。复制链接,或直接打印二维码——每个字符都做了编码,表情、& 符号和换行都不会在传递途中丢掉。

🔒 100% 浏览器内运行 · 零服务器上传

这个页面不会发出任何东西:没有账号、没有上传、没有 WhatsApp Business API。它也看不出有没有人点过——统计点击需要跳转服务,而本站故意不运行任何跳转服务。

马来西亚规则与特殊情况

同一个请求,WhatsApp 有两个地址,只有一个是能印出去的。wa.me 会返回一次跳转,跳到 api.whatsapp.com/send,而在这次跳转里每个 4 字节的 UTF-8 字符都会被改写成 %EF%BF%BD——也就是 U+FFFD,替换字符。所以写进 wa.me 链接的表情,到达 WhatsApp 时会变成一个黑菱形里带问号;中文和马来文(每字 3 字节)却完好无损。正是这种不对称,让这个 bug 特别容易被忽略。本工具直接生成 api.whatsapp.com/send 链接,不经跳转,并把二维码解码回来逐字核对,证明结果就是它画进去的那串字符。

第二个问题更安静。手写链接 ?text=Harga RM89 & ada stok 到达时会变成 Harga RM89 :WhatsApp 在 & 处把消息截断,后面全部消失。这里的每条消息都做了百分号编码,所以 & 以 %26 传递,引号以 %22,换行以 %0A——WhatsApp 会把它显示成换行。

你输入的链接里带的
012-345 6789+60 12 345 6789
+60 12-345 6789+60 12 345 6789
60123456789+60 12 345 6789
0060123456789+60 12 345 6789
+65 9123 4567+65 9123 4567 · SG +65
12345— 位数太少,不像电话号码。
  • 马来西亚号码是被解析的,不是被改写的。开头的 0 是国内长途前缀,意思是 +60;0060 是同一件事,只是写法像传真机打出来的。号码用和本站其他工具同一个 Google 号码库解析,位数不可能的号码会被拒绝并说明原因,而不是「清理」成一个能拨通的陌生号码。
  • 外国号码照样能用,并且写明是哪个国家。+65 9123 4567 生成的是新加坡链接,字段下面会写清楚用的是哪个国家代码——因为把新加坡号码默默当成 +60,就是把电话打给柔佛的陌生人。
  • 点击聊天没有公开的长度上限。常被引用的 4,096 是 Cloud API 的请求体上限,那是另一个产品。真正会咬人的是浏览器:Chrome 在约 2,057 个字符处就不再跟进 URL,而非 ASCII 文字编码后每字要占三到四字节。页面统计整条编码后的 URL,超过 2,000 就提醒;但不拦截,因为一条能用的长链接,好过一个把你的消息吃掉一半的工具。
  • 换行留得住。文本框里的一次换行变成 %0A,在聊天里就是一次换行,而不是被挤成一大段没有标点的文字。
  • 二维码要么是打印级,要么不给。四模块静区(ISO 18004),300 dpi 下每模块整数像素,默认纠错等级 Q,只有当你打算遮挡码面时才用 H。小于约 2.5 厘米,廉价手机摄像头在店铺灯光下就扫不出来,页面会直接说出来,而不是给你一张在柜台前失效的漂亮贴纸。
  • 解码回来核对,才是承诺。画完之后,用和手机同类扫描器把码解出来,与链接逐字比较。两者不一致,下载按钮就不会出现——打开错对话的二维码,比没有二维码更糟。
  • 这个页面不是什么。它不发消息,不用 WhatsApp Business API,也看不出有没有人点过。统计点击需要在链接中间插一层跳转服务;本站故意一层都不跑,所以诚实的答案就是:这里看不到一次扫码。

处理前后

处理前

012-345 6789
Hai! Baju kurung Raya masih ada 😊
Harga RM89 — nak tempah?

处理后

https://api.whatsapp.com/send?phone=60123456789&text=Hai%21%20Baju%20kurung%20Raya%20masih%20ada%20%F0%9F%98%8A%0AHarga%20RM89%20%E2%80%94%20nak%20tempah%3F

使用方法

  1. 填写客户要联系的号码。马来西亚号码怎么写都行——012-345 6789、+60 12-345 6789、60123456789——字段下面会告诉你它读出来的是哪个号码。
  2. 填写消息。表情、& 符号和换行都会被编码;把「WhatsApp 上会看到什么」那一块和你原本想发的内容对一遍,因为那一块是解码后的链接,不是你打的字的副本。
  3. 复制链接,或选好打印尺寸下载二维码。下载之前会先解码回读:读出来不是同一条链接,就不提供下载。

常见问题

为什么不直接用 wa.me 链接?

因为 wa.me 会跳转,而那次跳转会把每个 4 字节 UTF-8 字符改写成 %EF%BF%BD。所有表情都算。你在浏览器里看着完美的消息,到 WhatsApp 时表情位置全是黑菱形;又因为中文和马来文没事,问题看起来像是随机的。api.whatsapp.com/send 提供的是同一个页面,没有跳转也没有改写,所以本工具生成的是那个地址。

这个工具真的会发出 WhatsApp 消息吗?

不会。链接只是把号码和消息填好、打开 WhatsApp;发送的人仍然要自己按「发送」。这个页面不发送任何东西,没有账号、没有上传,附近也没有任何 WhatsApp Business API 密钥。

能看出有多少人扫了二维码吗?

用这个工具看不到;说能的人,多半是在卖你一层跳转。统计点击需要一条指向某个服务的链接,由那个服务记录访问再转去 WhatsApp——也就是在客户对话中间塞一个第三方。本站不跑这种服务,所以这里看不到任何一次扫码。真需要数据,就用你自己能控制的短链服务,并接受它能看到每一次点击。

消息可以有多长?

点击聊天没有公开的长度上限,4,096 那个数字属于 Cloud API。真正卡住的是浏览器:Chrome 在约 2,057 个字符处就不再跟进 URL,而一个表情编码后要占四个。页面统计整条编码后的 URL,超过 2,000 个字符给出提醒。不过预填消息还是控制在两三行——聊天里一大堵文字,是会被直接关掉的消息。

印得很小的贴纸还能扫出来吗?

小于约 2.5 厘米就不行了,至少不可靠:廉价手机摄像头在店铺灯光下每个模块大约需要 8 个像素,29 模块的码印在 2 厘米上给不出来。店面用 5 厘米,桌面立牌用 3 厘米,而且下单印五十张之前,先用两台手机扫一遍打出来的纸。页面报的是四舍五入之后真正剩下的尺寸,不是你要求的那个尺寸。