SmartCall v1.0.2 新增了两项直接影响呼叫中心运营效率的能力:查看 AI 对话内容,以及配置录音打断。前者让通话过程从“只能听结果”变成可检索、可复盘的数据;后者则帮助语音机器人在播放提示音或合成语音时,更准确地处理客户插话。
SmartCall 本身基于 AI 大模型与 Asterisk 通信引擎构建,覆盖智能呼入、智能外呼、IVR 编排、实时语音识别(ASR)、语音合成(TTS)和大模型意图识别。此次更新没有改变这些基础能力,而是补上了运营审计和交互控制中的两个关键环节。
AI 对话内容不只是“聊天记录”
在智能客服系统中,一次通话通常会经过多层处理:Asterisk 建立媒体通道,ASR 将语音转换为文本,大模型识别意图并生成回复,TTS 再把回复播放给客户。过去如果只能拿到录音,排查一次异常通话往往需要从头听到尾。
能够直接查看 AI 对话内容后,运营和开发团队可以围绕文本开展更细致的工作:
- 定位 ASR 是否把产品名、金额或地址识别错误。
- 检查大模型是否遗漏上下文,或生成了不符合业务规则的回答。
- 对照客户问题与机器人回复,评估知识库的覆盖范围。
- 根据高频未解决问题调整 IVR 节点、提示词和人工转接条件。
- 在投诉复盘或质检过程中,快速找到关键对话片段。
对话文本也存在边界。它不能完全替代录音,因为语气、停顿、背景噪声和双方抢话等信息可能不会完整保留在转写结果中。较稳妥的做法是将对话文本作为检索入口,再通过时间戳关联原始录音。
录音打断决定了机器人是否“会听人说话”
语音机器人播放欢迎语、业务说明或确认问题时,客户经常会提前回答。如果系统坚持把整段语音播放完,通话会显得迟钝;如果任何声音都触发打断,键盘声、咳嗽或环境噪声又可能导致提示语被截断。
录音打断配置需要在响应速度与抗噪能力之间取舍。实际部署时通常需要关注以下参数维度:
- 是否允许客户语音打断当前播放内容。
- 检测到多长时间的连续语音后才触发打断。
- 音量或置信度达到什么阈值才视为有效输入。
- 打断后是立即进入 ASR,还是先等待短暂静音。
- 欢迎语、合规声明等特定节点是否禁止打断。
例如,菜单询问“请问您要查询订单还是申请退款”适合允许打断;金融风险提示、录音授权声明等必须完整播放的内容,则应谨慎开启。
可以这样实践:把打断参数纳入版本管理
来源摘要没有给出 SmartCall v1.0.2 的实际配置字段或 API。下面是一个可直接改造的 YAML 配置模板,用来说明如何在项目中管理不同场景的打断策略;字段名需要替换为 SmartCall 实际支持的配置项。
# voice-policy.yaml
# 假设性配置模板:请按 SmartCall 实际字段进行映射
profiles:
interactive_service:
interrupt_enabled: true
min_speech_ms: 350
end_silence_ms: 600
confidence_threshold: 0.72
mandatory_notice:
interrupt_enabled: false
routes:
order_query:
profile: interactive_service
refund_request:
profile: interactive_service
compliance_notice:
profile: mandatory_notice
可以使用 Python 在上线前检查配置,避免出现阈值越界、路由引用不存在等问题。下面的脚本可以直接运行,唯一依赖是 PyYAML:
python -m pip install pyyaml
python validate_voice_policy.py voice-policy.yaml
# validate_voice_policy.py
import sys
from pathlib import Path
import yaml
def validate(path: Path) -> None:
data = yaml.safe_load(path.read_text(encoding="utf-8"))
profiles = data.get("profiles", {})
routes = data.get("routes", {})
if not profiles:
raise ValueError("profiles must not be empty")
for name, profile in profiles.items():
if not profile.get("interrupt_enabled", False):
continue
min_speech_ms = profile.get("min_speech_ms", 0)
confidence = profile.get("confidence_threshold", 0)
if not 100 <= min_speech_ms <= 2000:
raise ValueError(f"{name}: min_speech_ms must be 100..2000")
if not 0 <= confidence <= 1:
raise ValueError(f"{name}: confidence_threshold must be 0..1")
for route, settings in routes.items():
profile_name = settings.get("profile")
if profile_name not in profiles:
raise ValueError(f"{route}: unknown profile {profile_name!r}")
print(f"OK: {len(profiles)} profiles, {len(routes)} routes")
if __name__ == "__main__":
config_path = Path(sys.argv[1] if len(sys.argv) > 1 else "voice-policy.yaml")
validate(config_path)
这类配置适合与 IVR 流程版本一起提交到 Git。修改阈值时应记录业务场景、测试号码和变更原因,避免运营人员只能看到一个数字,却不知道它为什么存在。
上线时同时验证文本、录音与打断事件
仅确认页面上能看到对话内容还不够。建议选择安静环境、办公室噪声和免提通话三类场景,分别执行正常问答、播放中插话、短促噪声和长时间沉默等测试。
一条完整的测试记录至少应包含:
- 通话 ID、主叫与被叫的脱敏标识。
- 每轮用户文本和 AI 回复文本。
- ASR、模型生成与 TTS 的时间戳或耗时。
- 发生打断时的节点、阈值和识别结果。
- 与对话时间戳对应的录音位置。
- 是否触发重试、兜底话术或人工转接。
对话内容可能包含姓名、手机号、订单号和身份信息,因此查看权限、导出权限、数据脱敏与保留周期必须同步设计。生产环境中不宜让所有坐席默认看到完整敏感字段,也不应在普通应用日志中重复输出完整对话。
升级前后的检查清单
SmartCall v1.0.2 的价值不只在于多了两个配置入口,而在于团队能否把它们接入质检和调优流程。升级时可以按以下顺序落地:
- 先在测试环境确认历史通话与新通话的对话内容展示是否符合预期。
- 检查查看对话、导出数据和访问录音的角色权限。
- 为可交互话术和不可打断声明建立不同策略。
- 使用真实线路测试噪声、抢话、方言和网络抖动场景。
- 记录升级前后的打断率、误打断率、平均通话时长和人工转接率。
- 小流量灰度后再逐步扩大范围,并保留快速回退配置。
对于已经在电商售后、金融服务或外呼场景中运行 AI 客服的团队,这次更新适合从高频、低风险的流程开始验证。对话可见性解决“发生了什么”,录音打断配置解决“机器人何时闭嘴并开始听”;两者结合,才能形成可观察、可调试的语音交互闭环。