调用接口返回 code=2,只代表平台受理了这条预警,不代表对方手机一定收到、电话一定听完。要真正跟踪每条通知的送达情况,必须依赖回调状态通知。本文介绍如何接收互亿无线的回调,并在业务侧落库跟踪。 回调状态里有哪些信息 短信和闪信的回调会告…
调用接口返回 code=2,只代表平台受理了这条预警,不代表对方手机一定收到、电话一定听完。要真正跟踪每条通知的送达情况,必须依赖回调状态通知。本文介绍如何接收互亿无线的回调,并在业务侧落库跟踪。
回调状态里有哪些信息
短信和闪信的回调会告诉你实际是送达成功还是失败、失败原因是什么;语音回调除了状态,还会带回通话时长——这一点对预警尤其重要,能判断值班人到底听没听完整条播报。所有回调都以 HTTP POST 形式推送到你在控制台配置的地址。发送时拿到的 smsid 就是后续把回调和原告警对上的钥匙。
接收回调的代码示例
下面用 Python Flask 写一个回调接收服务,把送达状态落库:
from flask import Flask, request
app = Flask(__name__)
@app.route("/callback", methods=["POST"])
def callback():
data = request.form
smsid = data.get("smsid")
status = data.get("status") # 送达状态
reason = data.get("reason", "")
duration = data.get("voice_duration", "")
print("流水号%s 状态%s 原因%s 通话时长%s" % (smsid, status, reason, duration))
# 这里把状态写入数据库或更新工单
return "success"
if __name__ == "__main__":
app.run(port=8080)
状态跟踪的落地要点
- 发送时把 smsid 与业务告警 ID 一起入库,回调回来时按 smsid 反查并更新状态。
- 语音通话时长为 0 秒通常意味着未接听,应触发升级策略,通知下一级值班人。
- 回调接口要快速返回 success,避免平台重试;耗时操作放到异步队列。
- 公网回调地址需确保 HTTPS 可达,并做好来源校验,防止伪造回调。
回调数据怎么用起来
除了单条跟踪,回调数据还能做聚合分析:按号码段统计短信送达率、按时段统计语音接通率、按值班人统计平均响应时长。把这些报表每周看一次,就能发现"某个运营商号码段总是失败""夜间某时段语音接通偏低"这类规律,再反过来调整通道权重与呼叫时段。
状态查询带来的闭环
有了回调,预警通知就形成了"发送—受理—送达—接听"的完整闭环。运维在复盘一次故障时,能清楚看到告警几点几分发出、几点几分送达、值班人通话了多少秒,而不是凭记忆争论"当时到底通知到没有"。
回调地址的部署要求
回调是平台主动推送到你的公网地址,所以这个地址必须稳定可达。建议部署在独立的小服务上,端口开放给平台,内部再转发到业务系统;接口收到后立即返回 success,真正的写库操作丢进异步队列,避免回调超时被平台重复推送。
用回调做升级判断
def on_callback(smsid, status, duration):
update_ticket(smsid, status)
if duration == "0" and is_voice(smsid):
# 语音未接听,升级到下一级值班人
escalate_next_oncall(smsid)
- 语音通话时长为 0 秒通常代表未接听,应触发升级而不是干等。
- 回调要校验来源,防止有人伪造送达状态污染统计。
- 把回调数据按周聚合,能看出哪个通道、哪个时段触达偏低。
回调数据的日常用法
除了单次升级判断,回调数据还能用来做周报:本周发了多少条、送达率多少、语音接通率多少、哪类告警升级多。这些数字帮团队判断告警体系是否健康,而不是只在出故障时才关心它。
互亿无线通话时长可查,正是为这种闭环设计的。想搭建状态跟踪可以注册免费试用。