外呼失败以后最省事的写法,是给所有未接通电话加一条“30 分钟后重拨”。它也最容易把一个本来愿意接听的用户打成退订,把线路故障伪装成客户不感兴趣,或者在不该联系的时间继续呼叫。
忙线、无人接听、语音信箱、号码技术失败和用户退订的原因不同,下一步也不同。外呼策略的第一条规则不是“怎样多打几次”,而是“什么时候必须停”。
本文提供一个对接闪电智能VoiceAgent 的结果码策略框架。它只说明工程状态与人工边界,不给出任何地区的外呼合规结论,也不把联系频次当作业务增长承诺。
目录
同样没接通,为什么不能同样重试
busy 往往说明号码可达、当前占线;no_answer 只说明在给定振铃窗口内没有接起;voicemail 还涉及是否允许留语音以及脚本内容;failed 可能是线路、号码格式或供应商回执问题。它们不能由模型猜测替代,应该来自电话平台的明确回执和可追溯时间戳。
最常见的误判是把 failed 当成用户拒接,然后不断重拨。另一个误判是把语音信箱当成“已触达”。在客服或销售流程中,这两种误判会污染后续分组、人工跟进和效果统计。
先把禁止联系条件放在最前面
任何重试计算之前,都先检查退订、黑名单、业务联系窗口和人工锁定。它们应当是硬闸门,而不是在“最大重试次数”之后才执行的优化条件。
opted_out / blacklist / forbidden window -> stop
answered -> stop or enter post-call workflow
busy / no_answer -> candidate retry
voicemail -> only follow an approved consent path
failed -> handoff review
这里的 stop 不是删除历史,也不是把用户标记为无价值;它表示本次自动外呼不能继续。人工若要恢复联系,应有新的业务依据和审计记录。
结果码到下一动作的映射
| 回执 | 默认动作 | 为什么 |
|---|---|---|
busy | 较短延迟后候选重试 | 当前占线,不等于拒绝 |
no_answer | 更长时间窗口后候选重试 | 避免在同一时段重复振铃 |
voicemail | 停止或走已批准的留言策略 | 需确认用户同意和业务规则 |
failed | 人工/线路复核 | 先排除号码、供应商或路由问题 |
opt_out | 立即停止 | 不能被重试预算覆盖 |
表中的分钟数不是通用参数。示例把 busy 设为 30 分钟、no answer 设为次日,只是为了让代码可测试。生产系统至少应按活动类型、时区、当地规则、用户显式偏好和已触达记录校准。
最小策略代码与测试
examples/outbound_policy.py 的关键不是延迟数字,而是优先级:
if a.opted_out or a.blacklisted:
return Plan("stop", None, "contact_suppressed")
if a.disposition == "voicemail":
return Plan("stop" if not a.voicemail_consent else "retry", ...)
if a.disposition == "failed":
return Plan("handoff_review", None, "technical_failure")
这避免了“所有失败都指数退避”的惯性写法。技术失败先交线路复核,退订直接停,语音信箱没有经过批准就不自动留消息。运行:
PYTHONPATH=. python3 -m examples.run_demo
PYTHONPATH=. python3 -m unittest discover -s tests -v
8 项测试覆盖忙线与无人接听的不同节奏、退订/黑名单优先级、联系窗口、语音信箱同意和重试预算。它们只验证合成策略输入,不验证拨号系统、线路质量或任何法律要求。
怎么评估策略,而不是只看接通率
接通率不是唯一目标。建议分开记录:
- 组件层:回执分布、回执缺失率、重试调度失败率。
- 流程层:每个处置码的平均尝试数、退订后误拨次数、技术失败进入人工复核的时长。
- 业务与风险层:完成任务比例、用户投诉、错误联系事件。它们不能从接通率单独推导。
例如 no_answer 比例升高,可能是联系窗口错误,也可能是号码质量变化或运营商回执延迟。先看回执链路和时区字段,再改重试间隔;不要一看到接通率下降就提高并发。
边界与参考
外呼自动化不能替代同意管理、退订处理、频控、隐私保护和人工判断。涉及投诉、营销同意、敏感群体或不明确意图时,系统应停止自动决策并交给有权限的人员处理。
可执行规则是:将“禁止联系”放在任何重试之前;按电话平台的明确回执分类处置;技术失败先复核,不把它伪装成用户行为。
参考:

3万+

被折叠的 条评论
为什么被折叠?



