接口回 17,代码把 17 当成功,实际含义是本月额度已用完,整批结果都是空,日志里一条错误都没有。日志里能对上时间点,这种反而好排。

文档里 0 是成功,17 到 19 都是额度类错误,返回体仍然带 200。判断写成了 code 小于 20,把额度不足也算进成功。这一点先确认清楚,后面就不用反复试。

OK = 0
if body['code'] != OK:
    log.error('ocr fail %s %s', body['code'], body.get('msg'))

「识别返回码语义」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。

改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。

处理上按这个顺序:只把 0 当成功 其余一律走异常分支;把错误码表抄进常量文件并附文档链接;额度类错误单独告警 不要混在解析失败里;加一条对账 成功数必须等于入库数。

结果对不对很好判断,额度不足时任务立即失败并告警 不再产出空结果。

作者 9823189