上周业务反馈了一个问题:短信批量发送,超过 8 个号码就不行。

由于她的截图➕描述偏向于前端做了限制,就归类到前端修改的问题中。

结果今天前端反馈输入框 textarea 并没有限制长度。问题反馈到我这里,我测试了一下,确实没有限制,也继续反馈给业务。

业务补充说明,是提交发送表单时不行。继续反馈给前端确认,我自己也查了一下发送短信的接口,确认接口代码一直到发送短信都没有限制长度。前端喊了一次狼来了:先是肯定在手机号的正则验证里有限制,后面又排出了正则的限制。

此时业务又补充了一点:超过 8 个号码,会提示 “发送失败”,而减少到 8 个号码则会发送成功。到了这前端基本被排除在外了。根据视频截图 “发送失败” 关键提示词,找到了提示位置。

try-catch 在捕获到 Exception 时就报这个错。try 里主要做了两件事,一件调用短信发送服务,发送短信;另一件就是插入数据库短信发送记录。一开始集中在短信发送服务上。跟短信服务商一顿掰扯解释,也没有解决问题,倒是文档里说明了短信发送时的手机号最大可达到 2000 多。这也排除了短信服务的长度限制。然后找日志,发现当天发送的记录里就没有因为失败而抛出异常的情况。这时候目光终于放到了短信记录的数据库插入操作,该操作也是可以产生异常的,比如主键冲突,或者字符长度不够等等。

最后查看数据库表结构,确认手机号字段为 varchar(100),正好够存 8 * (11+1) = 96 个字符的,再多一个号码都放不下。修改长度到 1200,让业务确认,问题解决。