Laaffic SMS
30 subscribers
1 photo
主营:RCS、短信/双向群发、彩信营销、语音群呼。专注IGaming行业营销,提供高达5000条短信测试。已在灰度平台上压8888U,支持担保。

🤝@laaffic_sms0123
www.laaffic.com
Download Telegram
Channel created
Channel photo updated
Channel name was changed to «Laaffic SMS»
Channel photo updated
这个频道讲什么

Laaffic 做出海云通讯。这个频道不讲服务,只讲我们每天在看的数据。

内容大致四类:

一、指标 —— 提交量、到达量、失败分布、时延分布。单看一个"到达率"几乎没有判断价值,我们更关心失败集中在哪一类、时延的长尾有多长;

二、区域 —— 拉美几个主要市场(墨西哥、巴西、哥伦比亚、阿根廷)在同一口径下的差异。基线、波动幅度、失败构成,三个要分开看;

三、归因 —— 拿到一批失败记录之后怎么分层,倒推出问题出在提交层、网关层、运营商侧还是终端;

四、方法 —— 样本量够不够、口径怎么统一、为什么均值会骗人、A/B 测试怎么算有效。这些是最基础、也最常被跳过的部分。

所有内容来自我们自己的观测数据,结论只对我们看到的样本负责。

更新节奏:每周 2 到 3 条。想看哪个主题,可以在评论区提。
没有回执,不等于失败

看数据的时候,最容易处理错的不是"失败",而是"没有回执"。

一条消息从提交到最终状态,中间会经过几个环节,每个环节只会给出它能给出的那一部分信息:

提交层 —— 我们自己的记录最完整:什么时间进来、内容多长、走哪条路由;

通道层 —— 给一个受理结果,之后陆续回传状态码;

运营商侧 —— 只在部分区域、部分条件下回传最终状态;

终端 —— 我们观测不到,只能靠上一层的状态去推断。

所以任何一批数据里都有三类:明确成功的、明确失败的、以及没有最终状态的。第三类占多少,区域之间差别很大,有的是个位数,有的能到两位数。

最常见的两种错误:把第三类直接算进失败,到达率被低估;或者反过来,把它从分母里剔掉,到达率被高估。两种做法都能让曲线变好看或变难看,但都不是事实。

我们的处理方式只有三条:

单独留一列,不和成功、失败混在一起;
看它占比随时间的变化,而不是看它的绝对值;
只有占比明显抬升时才当异常信号处理。

也就是说,"沉默"本身是一个指标,不是一个等着被填满的空白。判断不了的部分,就承认判断不了。
一条消息,算几条

同一批数据,两个系统报出来的数字经常差一截。最常被忽略的原因是:一条消息不一定等于一条记录。

我们这边有三个计数单位,混着用一定会乱:

按提交次数 —— 调用的那一次;
按拆分后的段数 —— 超过单条长度的内容会被拆成多段下发;
按接收方 —— 不管拆成几段,落到同一个人身上算一次。

长度怎么算,取决于字符集。纯 GSM 标准字符(英文、数字、常见符号)单条是 160;一旦内容里出现中文、emoji、或者从文档复制过来的全角引号这类字符,整条会转成 UCS-2 编码,单条降到 70,超出就要拆段,拆分后每段还要带拼接头,可用长度再少一点。

结果是同一批内容会有两种口径:

按段数算,长消息被拆开之后到达率天然偏低 —— 一段出问题,整条算失败还是算部分失败,先要定清楚;
按接收方算,数字会好看一些。

两种都不算错,但同一份报表里只能用一种,而且要写明用的是哪一种。

我们的规则:看趋势用接收方口径,看链路问题用段数口径,两者不出现在同一张图里。

还有一个坑值得单独提 —— 内容里一个不起眼的字符就能把整条从 GSM 打成 UCS-2,段数直接翻倍。这种问题在报表上的样子很典型:某一批条数突然涨了,但内容明明没改。
Laaffic SMS pinned «这个频道讲什么 Laaffic 做出海云通讯。这个频道不讲服务,只讲我们每天在看的数据。 内容大致四类: 一、指标 —— 提交量、到达量、失败分布、时延分布。单看一个"到达率"几乎没有判断价值,我们更关心失败集中在哪一类、时延的长尾有多长; 二、区域 —— 拉美几个主要市场(墨西哥、巴西、哥伦比亚、阿根廷)在同一口径下的差异。基线、波动幅度、失败构成,三个要分开看; 三、归因 —— 拿到一批失败记录之后怎么分层,倒推出问题出在提交层、网关层、运营商侧还是终端; 四、方法 —— 样本量够不够、口…»
拉美四国:基线不同,别直接比绝对值

把墨西哥、巴西、哥伦比亚、阿根廷放在同一张表里比到达率,是我们早期最常做、也最没用的一件事。

四个市场的基线本来就不在一个水平上。有的整体高几个点,有的低几个点,差异常年存在。这种差异来自各自的网络结构、运营商数量、路由方式,不是哪一方"做得更好"。

所以横向比绝对值,比出来的基本是基线差,不是变化。看到巴西比墨西哥低三个点,什么都不说明。

能比的只有三种东西:

一是**同一个市场的时间序列** —— 今天和上周比,和上月比。基线被消掉了,剩下的是变化;

二是**变化的幅度** —— 哪个市场波动更大、哪个更稳;

三是**失败的构成** —— 同样是失败,是集中在某一类,还是均匀铺开。构成比总量更能指向原因。

我们现在的看板默认视图是国家 + 时间双轴,不给"四国排名"这种视角。排名会诱导人把基线差当成业绩差,然后去追一个不存在的问题。

一句话:**跨市场比结构,同市场比变化。**
波动幅度比基线更重要

一个市场长期到达率是 92%,另一个是 89%。大多数人会认为前者更好。

但如果前者在 86 到 96 之间来回跳,后者稳定在 88.5 到 89.5 之间,结论要反过来。

原因是**可预期性本身有价值**。稳定在 89% 的市场,出问题时偏离一眼就能看出来,因为它的正常范围很窄;波动大的市场,89% 和 96% 都在"正常"区间里,真出问题的时候会被噪声盖住,等发现已经晚了。

所以我们现在会单独维护一个指标:**滚动窗口内的波动幅度**(过去 7 天日到达率的标准差,或者 P10 到 P90 的跨度)。它和到达率并列放,不是附属项。

看波动要注意两件事:

一是**窗口长度**。窗口太短,日常节奏会被当成波动;太长了会钝,突变成形几天才反应。7 天对大多数市场够用,量小的市场要拉到 14 天甚至 30 天;

二是**量级不同的市场不能直接比波动**。量小的市场天然抖得更厉害,因为单条记录对占比的影响更大。要先看样本量够不够,再谈波动。

基线和波动,是两个独立的维度。只看前者,等于只看了这张图的一半。
失败怎么分层:提交层 / 网关层 / 运营商侧

拿到一批失败记录,第一件事不是看状态码,是**分层**。不分层的话,所有失败堆在一起,只能得到一个总数,而总数什么都指不出来。

我们按三层分:

提交层 —— 请求还没出去就失败。参数不合法、内容超长、签名或模板不匹配、频率限制。这一类是我们自己的记录最完整的部分,也最好查:几乎所有字段都在我们这边。修起来也最快。

网关层 —— 请求出去了,通道给了受理结果,但后续状态是失败。这里的问题通常在路由、通道容量、或者对端返回的错误码。特征是**成片出现**,而且往往跟时间段相关。

运营商侧 —— 通道已经把消息交出去了,最终状态由运营商回传。这一层的失败带有明显的**区域特征**:同一个国家、同一个运营商号段集中出现,换一个号段就正常。

分层的实际操作很简单:按失败返回的**位置**分组,而不是按错误码分组。错误码有几百个,位置只有几个。先把几百个码归到三个层里,再看每层里哪个码占大头。

一个经验:**提交层失败占比上升,大概率是我们自己这边改了什么**(模板、参数、频率);**运营商侧占比上升,基本和外部有关**。网关层介于两者之间,看它是不是集中在某个时段。

分层做完,才谈得上归因。没分层就说"到达率掉了",后面所有排查都是猜。
"到达率"这三个字自带歧义

同一个词,在不同人的嘴里是三个不同的东西。开复盘会的时候,一半的时间其实花在对齐这个词上。

**到达率 A**:到达量 ÷ 提交量。分母是调用次数,包含了那些最终没有状态的记录。

**到达率 B**:到达量 ÷(到达量 + 失败量)。分母把"无最终状态"剔掉了,数字会好看几个点。

**到达率 C**:按接收方去重之后算。同一条内容拆成三段,落在一个人身上算一次,数字又会不一样。

三个都叫"到达率",三个都能在报表上算出来,三个的差距能到五六个点。

问题不在于哪个对,而在于**会议桌上三个人各自拿着一个版本,还以为在讨论同一件事**。

我们的处理办法很笨但有效:**报表上的每一个比率都必须带分母定义**,写在同一行的括号里,不是放在文档里。看到"到达率 93.2%(到达/提交,接收方口径)"这种写法,歧义就没了。

还有一条:**对外汇报和对内排查用不同口径**,这是允许的,但必须写明。对外看趋势用接收方口径,对内查链路用段数口径。混在一张图上,一定出错。

下次有人说"到达率下降了",先问一句:哪个到达率。
一条消息从提交到回执,会留下哪些字段

排查问题的时候,最拖时间的事往往是"不知道去看哪个字段"。这里把我们这边一条消息从进入到结束会留下什么,从头列一遍。

进入时**:时间戳、接收方所属国家与运营商号段、内容长度、字符编码(GSM 还是 UCS-2)、拆分后的段数、走的是哪条路由、内容模板编号。

**提交后**:通道返回的受理结果、一个我们自己的内部流水号。这个流水号很重要 —— 后面所有回执都靠它串起来。

**过程中**:陆续回传的状态码,每个码带自己的时间。注意这里的"陆续",有的码几秒就回来,有的要几分钟,有的根本不回。

**结束时**:最终状态(成功 / 失败 / 无最终状态)、耗时、以及失败时的失败层级。

**补充字段**:重试次数、是否走了备用路由。

几个常被忽略但很有用的:

**编码字段
—— 段的拆分问题几乎都能靠它解释;
模板编号 —— 某一批突然变差,往往是模板变了,内容自己看不出来,编号一眼就看到;
重试次数 —— 不记这个,重试会把提交量放大,后面所有比率都是歪的;
每个状态码的时间 —— 只看最终状态会丢掉"等了多久"这个信息,而很多时候问题就出在等待上。

字段不多,但要一开始就记全。**回溯补不出来的数据,事后只能靠猜。**
临时失败和永久失败,不是一回事

失败记录里,有一半以上的误判来自把两类失败混在一起处理。

永久失败**:这一次不会成功,再试也不会。号码不存在、格式不合法、被明确拒绝。这类记录的价值在于**它指向的对象有问题 —— 是可以从后续批次里剔除的信号。

**临时失败**:当前不成功,换时间、换路由可能就成功。对端繁忙、超时、容量限制。这类记录指向的是**当时的状态**,不是对象本身。

处理上完全不同:

永久失败 —— 计数、归类、看它的占比是否异常抬升。占比突然涨,通常意味着上游进来的数据质量变了;

临时失败 —— 看它集中在什么时间、什么路由、什么号段。它往往跟着时段走,画成时间曲线比看总量有用得多。

最容易出错的地方**是:把临时失败当成永久失败统计,于是到达率被低估;或者对永久失败反复重试,把提交量放大,看起来很努力,实际只是把数字搅浑。

还有一种情况值得单独拎出来说:**同一个对象先临时失败、后成功**。如果只看最终状态,它是成功的;如果只看第一次回执,它是失败的。所以**最终状态和首次回执要分开存**,两者回答的是不同问题 —— 前者算率,后者看链路。

判断不了归哪一类的,就归"未知"。宁可多一类,别硬塞。
均值为什么不靠谱

"平均时延 3.2 秒"这句话,几乎可以肯定掩盖了真相。

时延这类数据不是正态分布的,它有一条长长的尾巴。大部分记录在 1 到 2 秒,少量记录拖到十几秒甚至更久。尾部那些记录数量少,但把均值往上拽得很明显,最后算出来的 3.2 秒,可能**没有任何一条记录真的落在 3.2 秒附近**。

更麻烦的是方向:均值上升,可能是整体变慢了,也可能只是尾巴变长了。**两种情况的处理方式完全不同**,但均值看不出区别。

我们现在一律用分位数:P50 看典型体验,P90 看有多少人开始受影响,P99 看最坏情况有多坏。三个一起看。

一个真实的形态:某批数据 P50 从 1.4 秒变到 1.5 秒,几乎没动;P99 从 8 秒变到 22 秒,翻了近三倍。只看均值的话,这一批会被判定为"正常"。

还有两个均值常见的事故现场:

跨市场取均值 —— 四个市场量级差很多,直接平均等于让量大的市场说了算,量小的市场变化被完全吃掉。要加权就说清加权,不加权就分开看;

跨时段取均值 —— 把高峰和低谷平均在一起,得到一个谁都没经历过的数字。

结论很简单:**凡是带尾巴的指标,不要用均值汇报。** 到达率可以用均值(它是比率),时延、重试次数、队列等待时间不能。
样本量多少才够

"这一批只有 200 条,到达率掉了 4 个点,要不要处理?"

大多数情况下,答案是**先看样本量再说话**。

同一个比率,样本越小,波动越大。200 条里差 4 个点,可能只是 8 条记录的差别 —— 这 8 条集中在哪个号段、哪个时段,就能解释全部。样本大了之后,同样的 4 个点需要几百条记录的偏移才能造成,那才更像真实变化。

我们内部有个粗糙但好用的判断方式:**看变化量对应多少条记录**。

变化 3 个点 × 样本 200 条 = 6 条记录 → 大概率是噪声;
变化 3 个点 × 样本 20000 条 = 600 条记录 → 值得查。

换算成条数之后,直觉比看百分比准得多。

还有几条实操经验:

**单市场单日低于几百条时,不做结论**,只做记录。量小的市场把窗口拉到 7 天再看;

**分维度之后样本会急剧变小**。一个国家按 5 个运营商号段拆分,每个只剩几十条,这时候任何"某个号段特别差"的判断都要打问号;

**小样本上的异常要复现才算数**。同一现象连续两天出现,可信度比一天高一个量级;

**不要为了凑样本把不相关的数据混进来**。跨市场合并样本能让数字变稳,但代价是丢失了区域差异 —— 而区域差异往往正是要找的东西。

样本不够的时候,正确的输出是"数据不足以判断",不是硬给一个结论。
A/B 测试怎么算有效

"换了条路由,到达率从 91.3% 涨到 92.1%,新路由更好。"

这句话在绝大多数情况下不成立。

第一,样本量。 和前面那条一样,先算这 0.8 个点对应多少条记录。如果两批各几千条,差 0.8 个点可能落在正常波动区间内;如果各几十万条,那确实值得看。

第二,两组是不是真的可比。 最常见的错误是两组的时间窗不同 —— 上午跑 A、下午跑 B,或者今天跑 A、明天跑 B。时段差异和日间差异通常比路由差异大得多,最后测出来的是时间,不是路由。要**同时跑、随机分**,或者至少交替着跑足够多轮。

第三,口径一致。 两组的分母定义必须相同,段数口径和接收方口径不能混着比。

第四,看的是分布不是单点。 只比较一个汇总数字,等于把信息压成一比特。两组都要看分维度:按国家、按号段、按时段拆开,如果 A 在墨西哥好、B 在巴西好,那结论就不是"A 更好",而是"分市场选"。

第五,跑够时间。 一天的结果不算。我们一般要求至少覆盖一个完整周期(包含工作日和周末),因为周期性的量峰会把单日结果带偏。

怎么判断有效**:看两组差值的波动范围。如果差值本身在正负之间反复换号,那就是没差别;如果差值稳定在同一侧,且幅度大于单组自身的日常波动,才算有信号。

最后一条经验:**大多数"优化有效"的结论,最后发现是分组不均或时间窗错位。
测试设计比测试结果重要。
短信营销新玩法:AI 智投!
别单点群发了,Laaffic 短信 AI 智能投放,帮你把多产品串联成矩阵。
精准识别用户行为,持续承接。
成本仅增 3%,转化提升 25%
无需过多操作,全权交给 AI。
Laaffic · 让每一次短信都精准有效。
欢迎私信了解详情!