跳到主要内容
ARTICLE GUIDE

聊了三年Telegram图,我把压箱底的踩坑记录翻出来说说

导读:这篇文章不讲空泛理论,只聊我亲手处理过的Telegram图片相关翻车现场。从头像设置失败、群组图片刷屏被限,到API发图报错,每个问题后面都跟着具体账号状态、错误代码和解决路径。

头像传不上去那晚,我陪着用户折腾到凌晨两点

之前遇到过一位做东南亚电商引流的用户,手里有二十多个号,突然有一天头像全变成默认灰色。他以为是客户端问题,卸载重装了三次,Telegram版本从10.2.9一路升到10.9.1,结果还是一样。我让他把其中一个号发给我远程看,发现他这些号注册地集中在+234和+57,注册时间不超过72小时,而且每个号在设置头像时都用了同一张带水印的产品图。问题就出在这里:Telegram的风控会对比新号上传图片的MD5值,短时间大量重复直接触发限制,表现就是头像消失且再次上传报错“PHOTO_TOO_SMALL”或干脆无响应。

好多人都以为这只是网络卡顿,反复试反而把号试进了更严的观察名单。我当时给他的方案是换图、换设备指纹、换IP,三个一起换。具体操作是每号间隔20分钟再传,图片全部用美图秀秀这种工具做像素级微调,让文件哈希值不撞。二十多个号分三天恢复,其中有一个号因为连续失败超过15次,被限制上传图片类内容整整168小时。这个数字我记得很清楚,因为那个用户每天问我一遍“解了没”。

所以我后来在社群里反复讲,新号先别急着上头像,养几天再动。你如果手里是那种已经养了一两周的稳定号,这个风险会低很多,像这类尼日利亚老号因为注册环境干净,头像上传的成功率明显高出一截。

群组里刷图刷到账号被限,问题出在频率不是内容

有个做币圈项目宣发的用户,他在一个2000人的群里发项目K线图,每张图配一段文字,一分钟内连发8条。发到第5条的时候提示“Too many requests: retry after 33”,他以为是群管理禁言,换了个号继续发,结果那个号也进去了。他把截图发给我看,我说你这不是被管理员踢了,是Telegram服务端对你这个账号的图片消息接口做了速率限制。根据我后来整理的记录,普通账号在群组里发图,如果一分钟内超过6张且总字节数超过12MB,大概率触发retry限制,首次是33秒,第二次翻倍到66秒,第三次直接限制图片发送权限24小时。

这里要区分一个概念:Telegram对文字消息和媒体消息的限流阈值是分开的。文字可以连着发十几条没事,图片不行。好多做社群运营的人栽在这个细节上,以为号养得够久就能随便发,实际上图片类内容的触发阈值跟账号年龄关系不大,跟短时行为密度关系更大。

我当时给他的建议是拆段发,每张图间隔45秒以上,同时把图片压缩到长边1280像素、体积控制在200KB以内。他后来用这个方法连续发了半个月没再触发限制。不过要注意,用API发图的话限流规则又不一样,Bot账号有单独的每秒30次调用上限,但媒体文件是按每文件5MB计算,超了直接返回“Request Entity Too Large”。

有人问为什么换头像后好友列表里还是旧图

这个问题我被问过不下50次。有个用户给手里的加拿大号换了新头像,自己看是新的,但让朋友截图给他看还是旧的。他以为是缓存问题,让朋友清空Telegram缓存、卸载重装,折腾了半天还是旧的。我告诉他这是Telegram的多级CDN缓存机制在起作用,头像图片上传后会分发到全球不同边缘节点,根据用户所在区域和运营商,刷新时间从几分钟到72小时不等。他自己能看到新图是因为走的是上传时命中的那个节点,朋友在另一个地区看到的是还没刷新的旧节点。

知道这个原理后就好办了。他后来用了一个小技巧:换头像后主动给几个不同地区的好友发一条消息,让他们的客户端触发一次头像拉取请求,这样能加速缓存刷新。实测下来,从原来平均等待26小时缩短到3小时以内。所以如果你发现头像换了别人看不到,先别急着反复上传,等一等或者用这个方法推一把。频繁重复上传反而可能触发前面说的重复图片限制。

还有一点是头像审核,Telegram对头像图片有隐式的NSFW过滤,如果图片被判定为敏感,会直接静默替换成默认头像,不会给你任何通知。有个做医美引流的用户就中过招,发了张术前术后对比图,自己看着正常,但所有好友看到的都是灰色默认头像。后来他把图片加了一层半透明蒙版才通过。

API发图报错那几次,我整理了一份错误代码对照表
API发图报错那几次,我整理了一份错误代码对照表

API发图报错那几次,我整理了一份错误代码对照表

用Telegram Bot API或者第三方库发图,报错信息比客户端直白得多。我经手过的错误里,出现频率最高的是“400: Bad Request: PHOTO_INVALID_DIMENSIONS”,这个通常是因为图片宽高比太极端,比如超过20:1的长图或者宽高都小于100像素的缩略图。Telegram的要求是图片一边至少100像素,宽高比在1:20到20:1之间。另外“400: Bad Request: PHOTO_EXT_INVALID”是格式问题,虽然官方文档说支持JPEG和PNG,但实际测试发现CMYK色彩模式的JPEG会被拒,必须转成RGB。

还有一类是“429: Too Many Requests: retry after X”,这个X是秒数。我记录过的最高一次retry after是371秒,那个用户用脚本批量给200个群发同一张活动海报,触发了全局媒体限流。后来他把发送间隔从2秒改成8秒,并给图片加了随机后缀改变哈希值,就再没出现过429。

对于用第三方库的用户,“502 Bad Gateway”经常出现在图片文件超过10MB的时候,Telegram对Bot API的单文件上传限制是50MB,但很多中转服务器实际卡在10MB。有个用户就是传了张12MB的高清图反复502,压缩到8MB就通过了。所以我一般建议图片先压缩再上传,这样既快又稳。

如果你手里的号本身状态就不太干净,比如注册后没怎么用过就上API,报错概率会翻倍。这种情况下换一批本身就有使用记录的号会省心不少,像这类加拿大API稳定号因为自带正常的收发记录,接口调用的成功率比新号高很多。

群组头图和频道封面,尺寸不对会浪费很多时间

有个用户是做本地社群运营的,他给一个500人的群换群头图,传了张手机拍的竖版照片,结果群头显示出来只有中间一条,两边全是黑边。他反复传了6次,每次都是同样的问题。我告诉他Telegram群组头图的显示区域是固定的横向矩形,推荐尺寸是1200x675像素,你传竖版图系统会强制居中裁剪,看上去就像被切了一刀。他后来按这个尺寸重新做图,一次就过了。

频道封面又是另一套尺寸,推荐1280x720像素,而且手机端和桌面端显示的裁剪范围不一样。我一般建议把关键信息放在画面正中央的方形区域内,这样两端怎么裁都不会丢内容。有个做新闻频道的用户没注意这点,封面上的频道名被裁掉了三分之二,读者根本看不全。

视频封面也有讲究,Telegram允许视频消息自带封面图,但这个封面图不是随便截一帧就行,需要单独上传,尺寸跟普通图片一样,但文件大小建议控制在50KB以内,否则加载会明显变慢。我测过一张200KB的封面图,在4G网络下加载要1.8秒,而50KB的只要0.4秒。这个差距在刷信息流的时候感知很明显。

FAQ

问:为什么我发出去的图在对方那边显示“Photo”但点不开?

答:这种情况多半是图片文件损坏或者上传过程中断。你可以让发的人重新发一次,如果还是同样的问题,检查一下图片是不是从某些网站直接复制粘贴的,那种链接图Telegram会尝试抓取但经常失败。换成从相册选原图发送就正常了。

问:用第三方客户端发图会不会更容易被限?

答:会。Telegram官方对非官方客户端的媒体上传接口有更严格的校验。我测试过同一个号在官方客户端发10张图没问题,换到某个第三方客户端发到第4张就触发了retry限制。如果你经常需要批量发图,建议用官方客户端或者Bot API。

问:账号被限制发图后,等时间到了会自动恢复吗?

答:大部分情况会自动恢复。但如果是因重复图片触发的限制,恢复后你再传同一张图,大概率会再次触发。我处理过的一个案例是用户等了72小时解封,结果传了原来那张图又进去了。所以解封后先换一批新图,别跟系统较劲。

聊了这么多,其实Telegram图相关的问题万变不离其宗:账号底子干净、操作频率克制、图片规格合规,这三点做到了,九成以上的坑都能绕过去。我们做账号服务这几年,经手的号从东南亚到南美都有,如果你手里缺靠谱的号源,或者遇到上面没提到的奇怪报错,可以来社群里丢截图,我看到了会回。买号也好,自己养也好,最终目的都是让业务跑顺,别在小细节上反复摔跤。

常见问题

为什么我发出去的图在对方那边显示“Photo”但点不开?

这种情况多半是图片文件损坏或者上传过程中断。你可以让发的人重新发一次,如果还是同样的问题,检查一下图片是不是从某些网站直接复制粘贴的,那种链接图Telegram会尝试抓取但经常失败。换成从相册选原图发送就正常了。

用第三方客户端发图会不会更容易被限?

会。Telegram官方对非官方客户端的媒体上传接口有更严格的校验。我测试过同一个号在官方客户端发10张图没问题,换到某个第三方客户端发到第4张就触发了retry限制。如果你经常需要批量发图,建议用官方客户端或者Bot API。

账号被限制发图后,等时间到了会自动恢复吗?

大部分情况会自动恢复。但如果是因重复图片触发的限制,恢复后你再传同一张图,大概率会再次触发。我处理过的一个案例是用户等了72小时解封,结果传了原来那张图又进去了。所以解封后先换一批新图,别跟系统较劲。