SmartCall 的发布,指向了客服系统正在发生的一个明显变化:呼叫中心不再只是“排队、转接、录音”的通信系统,而是在语音链路上接入 ASR、TTS、意图识别和流程编排,让 AI 直接参与呼入接待、IVR 分流和批量外呼。
从摘要看,SmartCall 的核心组合是 AI 大模型 + Asterisk 通信引擎。这意味着它既要处理传统电话系统里的通话、坐席、线路、外呼任务,也要处理 AI 系统里的语音识别、语音合成、上下文理解和业务动作。
这个系统解决的不是“聊天”,而是“通话闭环”
很多 AI 客服产品容易停留在文本问答层面,但呼叫中心场景更复杂。一次电话通常包含这些环节:
- 用户呼入或系统外呼
- IVR 判断用户意图
- ASR 把实时语音转成文本
- 大模型识别意图、生成回复或触发流程
- TTS 把回复合成为语音
- 必要时转人工、记录工单或进入下一轮外呼
SmartCall 把这些能力放在一个呼叫中心系统里,价值不只是“机器人会说话”,而是让企业把客服链路自动化:电商售后可以先确认订单和问题类型,金融催收可以按规则外呼并记录结果,企业客服可以在高峰期先由 AI 承接基础问题。
这里的关键边界也很清楚:AI 语音机器人适合处理结构化、高频、可校验的问题;涉及投诉升级、复杂协商、强合规确认的场景,仍然需要人工坐席兜底。
Asterisk 在架构里的角色
Asterisk 是成熟的通信引擎,擅长处理 SIP、拨号计划、通道、录音、转接等电话系统能力。把它放在 SmartCall 这类系统里,可以把职责拆开:
- Asterisk 负责电话层:呼入、外呼、路由、坐席、通话控制
- ASR/TTS 负责语音层:语音转文本、文本转语音
- 大模型负责理解层:意图识别、话术生成、上下文判断
- IVR 编排负责流程层:不同业务节点走不同动作
- 业务系统负责结果层:订单、账单、工单、客户标签、外呼记录
这样的分层很重要。电话系统强调稳定性和实时性,大模型强调理解能力和弹性,两者不能混在一个不可控的黑盒里。比较稳妥的方式是:电话链路保持可观测、可中断、可转人工,AI 只在明确节点参与决策。
可以这样实践:用 Asterisk 把来电转给 AI 服务
下面是一个最小化示例,用来说明“电话进入 Asterisk 后,交给外部 AI 服务处理”的思路。具体接口名称需要按 SmartCall 或你自己的网关实现调整。
假设你有一个 HTTP AI 服务,接收来电号码和识别文本,返回下一步动作:播放语音、转人工或挂断。
1. 一个简化的 Asterisk 拨号计划
把下面内容改造到 extensions.conf 的对应 context 中:
[smartcall-inbound]
exten => 1000,1,Answer()
same => n,Set(CALLER=${CALLERID(num)})
same => n,Playback(custom/welcome)
same => n,Record(/tmp/${UNIQUEID}.wav,3,10,k)
same => n,System(curl -s -X POST http://127.0.0.1:8080/ai/intent \
-F caller=${CALLER} \
-F audio=@/tmp/${UNIQUEID}.wav \
-o /tmp/${UNIQUEID}.json)
same => n,Set(ACTION=${SHELL(jq -r .action /tmp/${UNIQUEID}.json)})
same => n,GotoIf($["${ACTION}"="transfer"]?to-agent)
same => n,Playback(custom/ai-reply)
same => n,Hangup()
same => n(to-agent),Dial(SIP/agent001,30)
same => n,Hangup()
运行前需要调整:
1000:你的呼入号码或分机入口custom/welcome:欢迎语音文件http://127.0.0.1:8080/ai/intent:你的 AI 意图识别服务地址SIP/agent001:人工坐席分机
这个例子非常粗糙,但它展示了核心路径:Asterisk 接电话,录音,调用 AI 服务,按返回结果转人工或继续机器人流程。
2. 一个可运行的 AI 意图服务示例
下面用 Python 写一个最小 HTTP 服务。它没有真正接入 ASR 和大模型,只用文件名和来电号码模拟返回结果,适合作为本地联调骨架。
安装依赖:
pip install fastapi uvicorn python-multipart
保存为 ai_intent_server.py:
from fastapi import FastAPI, File, Form, UploadFile
app = FastAPI()
@app.post("/ai/intent")
async def detect_intent(caller: str = Form(...), audio: UploadFile = File(...)):
content = await audio.read()
if caller.startswith("400"):
return {
"action": "transfer",
"reason": "vip_or_enterprise_customer",
"message": "正在为您转接人工客服"
}
if len(content) < 1024:
return {
"action": "hangup",
"reason": "empty_or_invalid_audio",
"message": "未检测到有效语音"
}
return {
"action": "robot_reply",
"intent": "after_sales",
"message": "请问您要查询订单、退货,还是物流进度?"
}
启动服务:
uvicorn ai_intent_server:app --host 0.0.0.0 --port 8080
在真实系统里,这个服务可以继续接入:
- ASR:把录音或实时音频流转成文本
- 大模型:识别用户意图、抽取订单号、判断是否转人工
- TTS:把回复文本合成为 Asterisk 可播放的音频文件
- CRM 或工单系统:写入客户标签、通话摘要和处理结果
智能 IVR 的重点是“流程可控”
传统 IVR 常见问题是层级太深:“售后请按 1,退款请按 2,物流请按 3”。AI 加入后,用户可以直接说“我的快递三天没动了”,系统识别出物流异常,再进入对应流程。
但智能 IVR 不能只靠自由对话。更稳妥的设计是把流程节点做成状态机:
- 当前节点允许哪些意图
- 哪些意图必须二次确认
- 哪些结果必须转人工
- 哪些回复必须使用固定话术
- 哪些字段必须从业务系统校验
例如金融催收、保险回访、医疗预约这类场景,AI 不能随意发挥。大模型可以负责理解和生成,但关键动作必须由规则、权限和审计控制。
落地时优先检查这些问题
如果准备评估或接入 SmartCall 这类 AI 呼叫中心,可以从下面几个维度开始:
- 线路与稳定性:Asterisk、SIP 中继、录音、坐席转接是否可靠
- 实时性:ASR、LLM、TTS 串起来后,用户等待时间是否可接受
- 可回退:机器人失败、识别低置信度、用户愤怒时能否快速转人工
- 合规性:外呼授权、录音告知、敏感信息处理是否符合业务要求
- 可观测性:每通电话是否有意图、转接原因、模型回复和最终结果
- 话术治理:AI 回复是否能被限制在业务允许的范围内
SmartCall 这类系统的价值,不在于把人工客服完全替换掉,而在于把高频、重复、标准化的电话流程自动处理掉,把人工坐席留给更复杂、更需要判断力的服务场景。真正能长期运行的 AI 呼叫中心,一定是通信系统、AI 能力、业务规则和人工兜底一起设计出来的。