SmartCall:把大模型、语音机器人和 Asterisk 接进客服呼叫中心

2026-07-01 36 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:10 分钟

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 能力、业务规则和人工兜底一起设计出来的。


相关推荐