摘要

环境:中小仓储企业,日来电 200—500 通,客服 3—8 人,来电中约六成是查货物入库状态、出库状态、库存余量这类基础咨询。解决的问题:仓库负责人想知道接入语音机器人承接基础查货来电,能不能实打实减少客服重复工作,而不是上了一套系统反而多一个维护负担。读完能拿到:仓储查货来电的分类拆法、语音机器人能接和不能接的边界、WMS 查询接口的返回结构和适配层写法、意图识别与转人工的配置示例、减负效果的量化测算公式和实测口径、从试点到全量的落地步骤、常见坑和方案边界。适合仓储企业负责人、客服主管和负责对接系统的技术人员参考。


一、仓储查货来电到底长什么样

要判断语音机器人能不能减负,先得把来电拆开看。我们统计过一家日来电 300 通左右的仓储企业,按通话内容分类大致是这样:

来电类型占比典型话术人工处理耗时
查入库状态约 28%“我昨天发的货入库了没有”40—90 秒
查出库/发货状态约 22%“我那批货什么时候能发”40—90 秒
查库存余量约 12%“某某型号还剩多少”50—120 秒
改单/加急/异常处理约 18%“这单要改地址”“货破损了”2—5 分钟
对账/费用咨询约 10%“这个月仓储费怎么算的”2—4 分钟
其他(合作、投诉等)约 10%——不定

前两类加起来占一半,加上库存余量接近六成。这六成来电的共同特征是:客户只问一个确定的事实,答案在 WMS 里查一下就能给,不需要判断、不需要协商。 这就是语音机器人能承接的部分。

剩下四成里,改单、异常处理、对账涉及判断和权限,语音机器人硬接反而容易把简单问题复杂化,这部分应该转人工。所以问题不是“语音机器人能不能替代客服”,而是“能不能把六成的基础咨询接过去,让客服专注剩下四成需要人处理的事”。


二、语音机器人能接什么、不能接什么

2.1 能接的三类基础咨询

第一类:单号查状态。 客户报运单号或订单号,机器人调 WMS 接口查入库/出库状态,用固定话术播报。这类问题答案结构化程度高,接口返回什么就说什么,出错概率低。

第二类:按客户名或货物名查库存。 客户报客户编码或货物型号,机器人查库存余量。要注意的是库存数据有权限边界,不是所有客户都能查所有货,机器人要先做身份校验(来电号码绑定客户编码,或让客户报验证信息)。

第三类:常见状态解释。 客户听到“已入库待上架”“已出库在途”这类状态词不理解,机器人用预设话术解释。这类不查数据,纯话术匹配,实现最简单。

2.2 不能接、应该转人工的四类

  • 改单、加急、取消:涉及订单变更,需要人工确认权限和费用。

  • 货损、货差、异常:需要定责和协商,机器人接不住。

  • 对账、费用争议:涉及金额和合同条款,必须人工。

  • 投诉和情绪激烈的来电:机器人识别到负面情绪关键词,应该直接转人工,不要硬聊。

边界划清楚比功能做多重要。 我们见过一些项目,机器人什么话都接,客户说“我要投诉”,机器人还在那循环“请问您要查询什么”,客户体验直接崩掉。转人工的触发条件要写死在对话流程里,不能靠模型临场判断。


三、技术实现:语音机器人怎么对接仓储系统

3.1 整体链路

一通查货来电进来,语音机器人要完成这几步:

text

来电接入 → 身份识别(来电号码/客户报编码)
→ 意图识别(查入库/查出库/查库存)
→ 信息抽取(运单号/货物型号)
→ 调 WMS 接口查询
→ 结果播报(TTS)
→ 未识别或异常 → 转人工

每一步的耗时和成功率都会影响最终体验,也影响“能不能真的减负”。下面拆开说关键环节。

3.2 身份识别:先确认“你是谁”

仓储查货有信息权限问题。客户 A 不能查客户 B 的库存。语音机器人第一步要做身份绑定,常见两种方式:

  • 来电号码绑定:客户在系统里预留了来电号码,机器人根据主叫号码匹配客户编码。这种方式体验最好,客户不用报信息,但要求号码库准确。

  • 报编码验证:客户报客户编码或订单号后四位,机器人校验。这种方式兼容性强,但多一轮对话,通话时长会增加 10—15 秒。

我们建议两种结合:号码能匹配上就直接用,匹配不上再让客户报编码。号码库的维护要纳入日常流程,客户换号要及时更新,不然匹配率会越来越低。

3.3 意图识别和信息抽取的配置写法

客户说话不会像填表那么规范。“我昨天发的那个货到了没”“帮我查下 A 型号还有多少”“单号 123456 那个件入库了吗”,这些表达要能归到查入库、查库存、查单号三类意图上。

意图识别用规则加模型结合的方式比较稳:关键词先做一层规则匹配,匹配不上的再走语义模型。规则配置可以写成下面这样,运维自己就能维护,不用每次都找算法同学:

yaml

intents:
  - name: query_inbound
    keywords: ["入库", "到了没", "到货", "收货", "上架"]
    slots: [waybill_no, customer_code]
    action: wms_query_inbound

  - name: query_outbound
    keywords: ["出库", "发货", "发走", "什么时候发", "在途"]
    slots: [waybill_no, customer_code]
    action: wms_query_outbound

  - name: query_stock
    keywords: ["库存", "还有多少", "剩多少", "余量"]
    slots: [sku_code, customer_code]
    action: wms_query_stock

# 兜底和转人工条件
fallback:
  max_retry: 2                 # 连续两次意图识别失败
  transfer_keywords: ["转人工", "找客服", "投诉", "破损", "货差", "改地址", "加急"]
  transfer_on_wms_error: true  # WMS 接口超时或异常直接转

信息抽取重点抽运单号、货物型号、客户编码。运单号通常是数字串,先用正则抓,抓不到再让客户重报。这里有个实操细节: 客户报单号经常带口音或者说得快,ASR 识别数字容易错,机器人要加一步确认,“您说的是 123456,对吗”,确认后再查。多这一轮对话,比查错了再道歉强。

3.4 WMS 查询接口返回结构怎么设计

这是整个链路里最不确定的一环。仓储企业的 WMS 有的是标准产品,有的自研,接口能力和响应速度差别很大。语音机器人调接口有三个要求:

  1. 接口要快。客户等播报的容忍度比等人工低,接口响应超过 1 秒,客户就会觉得机器人“卡住了”。实测 WMS 查询接口 P95 要控制在 800ms 以内。

  2. 接口要稳。高峰期 WMS 本身也在处理入库出库操作,查询接口不能把 WMS 拖垮,最好有独立的查询从库或者缓存。

  3. 返回要结构化。接口返回不能是一大段文本,要能拆出“状态”“时间”“数量”这些字段,TTS 才能按模板播报。

建议适配层统一返回下面这种结构,字段名固定,机器人侧按字段拼话术,WMS 换版本也不影响对话流程:

json

{
  "code": 0,
  "msg": "ok",
  "data": {
    "waybill_no": "1234567890",
    "status": "INBOUND_WAIT_SHELF",
    "status_text": "已入库待上架",
    "inbound_time": "2026-10-25 14:30:00",
    "warehouse": "华东仓",
    "qty": 120,
    "unit": "箱"
  }
}

状态码 code 非 0 时,机器人走兜底话术转人工,不要把 WMS 的原始错误信息播给客户听。

3.5 WMS 没有查询接口怎么对接

很多中小仓储的 WMS 只给页面操作,没有对外查询接口。这种情况要加一层适配服务,思路是只读查询、缓存兜底、限流保护:

python

# 适配层示意:只读查询 + 短缓存 + 限流
from flask import Flask, request, jsonify
import pymysql, time, threading

app = Flask(__name__)
_cache = {}          # {waybill_no: (expire_ts, data)}
_lock = threading.Lock()
CACHE_TTL = 60       # 状态类数据缓存60秒,够用且不会太旧

def query_wms(waybill_no):
    # 只读账号,连从库,禁止写操作
    conn = pymysql.connect(host='wms-slave', user='robot_ro',
                           password='***', database='wms',
                           connect_timeout=1, read_timeout=2)
    try:
        with conn.cursor(pymysql.cursors.DictCursor) as cur:
            cur.execute(
                "SELECT waybill_no, status, inbound_time, warehouse, qty "
                "FROM inbound_order WHERE waybill_no=%s LIMIT 1",
                (waybill_no,))
            return cur.fetchone()
    finally:
        conn.close()

@app.route('/api/query_inbound')
def query_inbound():
    waybill_no = request.args.get('waybill_no', '').strip()
    if not waybill_no:
        return jsonify(code=400, msg='missing waybill_no')

    now = time.time()
    with _lock:
        cached = _cache.get(waybill_no)
        if cached and cached[0] > now:
            return jsonify(code=0, data=cached[1])

    try:
        row = query_wms(waybill_no)
    except Exception:
        return jsonify(code=503, msg='wms_timeout')  # 机器人侧转人工

    if not row:
        return jsonify(code=404, msg='not_found')

    with _lock:
        _cache[waybill_no] = (now + CACHE_TTL, row)
    return jsonify(code=0, data=row)

几个要点:只读账号连从库,避免查询把主库拖慢;超时设短(连接 1 秒、读 2 秒),超时就让机器人转人工,别让客户干等;状态类数据缓存 60 秒,同一客户短时间内重复查同一单号直接走缓存;限流按客户编码维度做,防止单个客户刷接口。这层适配服务的工作量往往被低估,立项时要把这块算进去。

3.6 结果播报和转人工

播报话术要短、要具体。“您的运单 123456 已于 10 月 25 日 14:30 入库,当前状态为待上架”,比“您的货物已经入库了”有用得多。播报完加一句“如需其他帮助请说”,给客户留出口。

转人工的触发条件至少包括:连续两次意图识别失败、客户明确说“转人工”、识别到投诉/货损/改单关键词、WMS 接口超时或返回异常。转人工时要能把已识别的信息(客户编码、单号、意图)带过去,客服接起来不用重新问一遍,这个体验差别很大。


四、减负效果怎么量化:别拍脑袋说“减轻了”

仓库负责人最关心的是“到底能减多少”。这件事要能用数字说清楚,不能凭感觉。先说试点企业的基本情况,读者对照自己的条件判断能不能复现:

项目情况
行业细分快消品仓储,华东单仓
日来电总量约 300 通
客服人数6 人
WMS 类型自研,有只读从库,无对外查询接口
试点客户数42 家,占全部客户约三成
统计周期两周,工作日 9:00—18:00

4.1 先算可承接话务量

text

可承接话务量 = 日来电总量 × 基础咨询占比 × 机器人独立解决率

基础咨询占比靠来电分类统计,机器人独立解决率靠试点期实测。上面那家企业试点两周的数据是:日来电 300 通,基础咨询占 58%,机器人独立解决率 76%(没转人工、客户没有重复来电)。算下来每天约 132 通由机器人独立完成。

4.2 再算节省的人工工时

text

节省工时 = 可承接话务量 × 单通人工处理平均时长

基础咨询单通人工处理平均 65 秒,132 通 × 65 秒 ≈ 143 分钟,约 2.4 小时/天。按客服 6 人算,相当于每天释放出接近半个人的工作量。这个数字不算惊天动地,但对 6 人客服团队来说,高峰期少接 130 多通重复电话,能明显缓解排队和情绪消耗。

4.3 还要看间接指标

减负不只是省时间,还有几个间接效果要一起看:

指标试点前试点两周后
基础咨询平均等待时长38 秒12 秒(机器人秒接)
人工客服日均接话量约 210 通约 85 通
高峰期队列溢出(等待>60秒)占比14%6%
客户重复来电率(同号码 24 小时内)9%7%

重复来电率只降了 2 个百分点,说明机器人解决率还有提升空间,主要卡在客户报单号识别不准上。这个数据要如实写进报告,不能只挑好看的说。


五、落地步骤:从试点到全量

5.1 第一步:选一个客户群体做试点

不要一上来全量切。选一个客户数量适中、查货来电频繁、配合度高的客户群体先跑。试点期两周,重点看三个数据:意图识别准确率、独立解决率、转人工率。准确率低于 85% 先别扩,回去补语料和规则。

5.2 第二步:把转人工流程跑顺

试点期最容易出问题的不是机器人答错,是转人工转不过去或者转过去信息丢了。转人工的触发条件、转接路由、信息透传要单独测,找客服一起走几遍真实场景。

5.3 第三步:按来电类型分批放开

先放开查单号状态,这类最结构化、出错率最低;稳定后再放开查库存;状态解释类话术可以随时加。改单、异常、对账类永远转人工,不要尝试让机器人接。

5.4 第四步:建立日常维护机制

语音机器人不是上线就完事。每周要看未识别语料、转人工原因分布、客户重复来电录音,把新的表达方式补进意图库和话术模板。维护工作量大概每周 2—3 小时,要指定人负责,不然三个月后识别率会明显下降。


六、常见问题与避坑

Q1:客户不愿意跟机器人说话,直接喊“转人工”怎么办?
一句话结论:尊重客户选择,转人工要快。机器人第一句就说明“查货请直接说单号,需要人工请说转人工”,给客户明确预期。强行挽留反而招差评。

Q2:WMS 没有查询接口,是不是就做不了?
一句话结论:能做,但要加一层只读适配服务。只读账号连从库、短超时、短缓存、按客户维度限流,具体写法见 3.5 节。直接让机器人连生产库查,高峰期会把 WMS 拖垮。

Q3:客户报单号 ASR 老是识别错怎么办?
一句话结论:加确认环节,别硬猜。播报“您说的是 XXXX 对吗”,确认后再查。同时把常见单号格式做成正则模板,提高首轮抽取准确率。数字识别还可以开 ASR 的数字增强模式,对连续数字串识别率提升明显。

Q4:机器人查出来的状态和客户理解不一致,客户更生气了怎么办?
一句话结论:状态解释话术要提前打磨,不确定就转人工。WMS 里的“待上架”“已移库”这些内部状态词,客户听不懂,机器人要配通俗解释;解释不清的,直接转人工,不要让机器人反复说同一句。

Q5:选语音机器人平台时重点看什么?
一句话结论:看意图识别可配置性、WMS 对接方式和转人工能力,别只看语音音色。仓储场景的意图相对固定,规则加模型的混合配置比纯大模型更可控;对接方式要支持标准 HTTP 接口和自定义字段映射;转人工要能透传上下文。部分平台会提供意图配置和接口对接文档,选型时让服务商把对接流程走一遍演示,比看宣传材料有用。

Q6:上了机器人,客服人员会不会觉得被替代,配合度低?
一句话结论:提前说清楚定位,把客服拉进试点。机器人接的是重复劳动,客服转去做异常处理和客户维护,工作量结构变了但不是被替代。试点期让客服参与话术打磨和转人工测试,配合度会高很多。


七、方案边界

这套方案适合日来电 100—800 通、客服 3—10 人、WMS 有只读查询能力(或愿意加适配层)的中小仓储企业。基础咨询占比低于 40% 的企业,减负效果有限,优先级可以往后放;日来电超过 1000 通、多仓库多系统并存的,对接复杂度会明显上升,建议先做统一查询中台再上语音机器人。

另外要说明:语音机器人减的是“重复查询”的负,不是减“客服人数”的负。试点期人工接话量从 210 通降到 85 通,但客服并没有闲下来,释放出的时间转去做异常跟进和客户回访了。如果管理层预期是“上机器人就裁人”,落地过程一定会有阻力,这个预期要在立项时就对齐。


八、小结

仓储企业客户查货电话多,语音机器人能承接的是单号查状态、查库存、状态解释这三类基础咨询,约占来电六成,试点实测独立解决率七成多,每天能释放两个多小时人工工时,高峰期等待时长和队列溢出明显下降。改单、异常、对账、投诉这类必须人工接,边界要划死。落地关键不在机器人本身,在 WMS 只读接口的速度和稳定性、身份识别准确率、转人工流程这三件事上。先试点两周看数据,再分批放开,比一次性全量切换稳得多。


关键词:仓储企业语音机器人、查货电话、语音机器人承接基础咨询、客服工作量、WMS 接口对接、WMS 查询接口、意图识别配置、语音机器人转人工、ASR 数字识别、独立解决率、仓储客服减负、语音机器人落地、查入库状态、查库存、查询接口缓存

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐