JokeLink AI
智能AI外呼短信双向系统
⚡ 返回总控后台 欢迎您 {{ account.name }}({{ account.roleLabel || account.role }})! | {{ clock }} |
{{ t.title }}×
刷新 + 新增 × 删除 批改 最大并发: {{ liveMaxConcurrency }} 【并发控制: -】 选择列
显示 {{ pageFrom }} 到 {{ pageTo }} ,共 {{ filteredTasks.length }} 记录
{{ live.concurrency || 0 }}
呼叫并发
{{ live.todayCalls || 0 }}
今日呼叫量
{{ live.todayCost || 0 }}
今日消费
{{ live.onlineAgents || 0 }}
在线坐席数

账户

{{ account.name }}
{{ account.role }}@{{ account.tenant }}
余额 {{ live.balance }}
今日消费 {{ live.todayCost }}
短信单价 ${{ account.sms_price || live.sms_price || 0 }} / 条

业务

当前并发 {{ live.concurrency }} 最大并发 {{ live.maxConcurrency }}
呼出呼叫 {{ live.todayCalls }} 呼入呼叫 {{ live.inbound }}
录音呼叫 {{ live.recorded }} 活动任务 {{ live.activeTasks }}
在线坐席数 {{ live.onlineAgents }} 在线分机数 {{ live.onlineExts }}

运营

DID总数 {{ live.didTotal }} 坐席总数 {{ live.agentTotal }} 分机总数 {{ live.extTotal }}

呼叫任务趋势

刷新 + 新增 × 删除
刷新 + 新增 批改 微信解绑 选择列
刷新 + 新增 × 删除 选择列
刷新 + 新增
磁贴视图 列表视图 刷新 全部 置忙(*100) 置闲(*101) 离线(*000) 重签(*001)
{{ monitor.total }}共 坐席
{{ monitor.working }}工作中
{{ monitor.idle }}空闲
{{ monitor.busy }}忙
{{ monitor.away }}离开
{{ monitor.offline }}离线
{{ a.jobNo }} {{ a.name }}
状态:{{ a.monitorStatus === '离线' ? '未登录' : a.monitorStatus }}
分机:{{ a.ext }} | {{ a.monitorStatus === '离线' ? '未注册' : '已注册' }}
呼出统计 呼入统计 显示图形报表 选择列

任务信息

{{ report.task.name }}
{{ report.task.mode }}
{{ report.task.voice }}
{{ report.task.createdAt }}
{{ report.task.total }}
{{ report.task.called }}
{{ Number(report.task.progress || 0).toFixed(1) }}%
{{ report.task.callerGroup }}

呼叫结果:{{ report.task.mode }}

概要信息 详细信息 导出 刷新
请在外呼任务列表点击【详情】打开任务报表。
刷新 导出
刷新
刷新
新增 删除 导入 CRM 资料 导出 批改 分配 回收 生成呼叫名单 生成短信名单
刷新 + 新增坐席 ⚡ 批量生成坐席 一键均分发信号码 📤 上传客资 ⚡ 智能切包分发 🚀 批量群发 数据包看板 短信回访转化统计 发信号码池共 {{ dist.senderPool.length }} 个号码 号码池、轮询与单号日上限由本租户自行配置,与其他租户隔离
总坐席数{{ dist.summary.agents }}
已激活通道总数{{ dist.summary.channels }}
总承载客资条数{{ dist.summary.leads }}
数据包{{ dist.summary.packages }}

本租户短信发信号码池

写入 Unimatrix sms.message.send 的 from;同一把 Key 可驱动多个号码。不绑号则不传 from,由网关分配公用信道。 保存号码池 重置今日计数
批量添加 清空输入
号码调度策略
单号日发送上限
{{ p.number }} ({{ p.sentToday || 0 }}/{{ p.dailyLimit }})

尚未添加短信发信号码。添加后即可在下方表格分配给坐席;未绑定号码时 Unimatrix 走公用信道。

已选 {{ seatSelCount }} 个坐席 批量绑定号码池 批量一键群发 批量解绑数据包

短信模板

真实接口 GET/POST/PUT/DELETE /api/sms-templates,保存后外呼任务与坐席工作台可直接引用 刷新 + 新增模板

短信群发任务

异步调度,支持暂停 / 终止;进度每 2 秒刷新 刷新 📤 上传客资 🚀 新建群发
刷新 + 新增
是否 坐席班长 启用禁用 启用禁用 全选 不设置 不设置 启用禁用不设置
{{ v.original_name || v.filename }} {{ v.duration ? (v.duration + '秒') : '' }}
{{ voicePlaying ? '❚❚' : '🔊' }} 试听 上传新音频
支持 mp3 / wav,单文件不超过 20MB。上传后自动选中并可试听。
不发送匹配模板发送指定模板发送 按话单结果自动匹配触发机制:未接听 → AFTER_NO_ANSWER,放音完毕 → AFTER_PLAYBACK {{ d }}

开始时间快捷区间

全部今天昨天本周本月
粘贴号码 导入文件追加 从呼叫名单追加
选择文件
选择文件 下载模板(txt)下载模板(xls) 开启关闭 男女 选择文件
已输入 {{ tplChar.chars }} 字 / 预估 {{ tplChar.segments }} 条短信
仅写入语音 INVITE 的 From / P-Asserted-Identity,不参与短信发信。
UDPTCP G.711u G.711a G.729 OPUS

数据来自坐席累计与客户回复;群发进行中每 4 秒自动刷新。

共 {{ convRows.length }} 条 前往 页

将对 {{ blastForm.agentIds.length }} 个已勾选坐席使用同一话术启动队列;未绑定客资或发信号码的坐席会自动跳过。

上传新客资
有效号码 {{ blastForm.pkgCount || 0 }} 条{{ blastForm.dataPackage ? '' : ' · 请先上传或选择号码包' }}
全部号码
当前 {{ blastChar.chars }} 字符 / {{ blastChar.segments }} 条计费({{ blastChar.cap }} 字/条)
先填网址,再点话术框上方的 🔗 专属短链,或右侧「插入 {link}」。发送时会生成可追踪短链 /s/xxxx。
预计消耗余额:{{ blastCost.people }} 人 × {{ blastCost.segs }} 条 × ${{ blastCost.price.toFixed(2) }} = ${{ blastCost.total.toFixed(2) }}
当前钱包余额 ${{ Number(account.balance || 0).toFixed(4) }}{{ blastCost.over ? ' · 余额不足,请先充值' : '' }}
数据包样例 {{ blastPreview.phone }} · {{ blastPreview.langLabel }} {{ blastPreview.country_name_zh || blastPreview.country_name || '' }}
{{ blastPreview.de }}
{{ blastPreview.zh }}
条/秒,避免运营商通道拥堵
已选 {{ (blastForm.selectedSenders || []).length }}/{{ (blastForm.senders || []).length }} 个号码 · 已勾选号码按轮询发送
{{ n }}
该坐席尚未绑定发信号码,请先到「坐席分配」勾选通道。此处不展示总控未分配的平台号码。
请至少勾选一个发信号码,否则无法启动群发。
{{ blastJob.status || '—' }} 暂停 继续 终止
{{ Number(blastJob.progress || 0).toFixed(1) }}%
{{ blastJob.total || 0 }}
总数据量
{{ blastJob.submitted || 0 }}
已提交/已发送
{{ blastJob.delivered || 0 }}
成功到达
{{ blastJob.failed || 0 }}
发送失败/黑名单

{{ blastJob.failReason }}

实时投递日志

{{ l.at }} {{ l.phone }} {{ l.lang }} {{ l.status }} {{ l.ms }}ms {{ l.sender }} {{ l.error }}
等待调度器写入日志…
粘贴号码(一行一个) 选择本地文件
已选 {{ leadForm.file.name }}({{ Math.round((leadForm.file.size || 0) / 1024) }} KB)
大文件流式入库(txt/csv,适合 10 万行+)
xlsx 会在浏览器解析;超大 txt/csv 请勾选流式,避免整包载入内存。
自动剔除非数字 自动去重 国际区号补全(德国 +49)
有效 {{ leadPreview.count }} 条 跳过空行/重复/无效 {{ leadPreview.skipped }} 条
将自动去除空格与特殊符号,只保留 7–16 位数字。
留空则自动命名:{{ leadPreview.autoName }}
入库后打开「新建群发」并选中本包
{{ pkgForm.name }} ({{ pkgForm.agentId }})

将对已选 {{ seatSelCount }} 个坐席写入同一组发信号码。

生成后按坐席数均分当前发信通道

将生成 {{ batchSeat.prefix }}{{ String(batchSeat.start).padStart(3,'0') }} ~ {{ batchSeat.prefix }}{{ String(batchSeat.start + batchSeat.count - 1).padStart(3,'0') }},已存在的坐席会自动跳过。

已选 {{ bigForm.file.name }}({{ Math.round((bigForm.file.size || 0) / 1024) }} KB)
自动剔除非数字与格式清洗 自动去除重复号码 国际区号补全标准化(德国 +49)

支持单文件 10 万行以上,后端按行流式入库,不会把整包 JSON 一次性载入内存。

模式 A · 按坐席平分并自动绑定 模式 B · 固定规格切包 不足一整包时会生成一个包含剩余号码的子包

{{ slicePlan.hint }}

总号码 / 已分配 / 发送进度来自客资包目录;群发进行中每 4 秒自动刷新。