外呼任务 API

通过 Open API 以程序方式管理外呼任务模板、人工外呼任务、自动外呼任务及发送对象

简述

携带租户 API Key 请求 /api/v1/open/engagement,可管理:

  • 外呼任务模板(字段、话术)
  • 人工外呼任务(坐席手工拨打、分配对象)
  • 自动外呼任务(IVR / 机器人 / 坐席预测式外呼)

数据与 触达中心 共用;API 创建的任务与发送对象不绑定员工账号。API Key 仅用于服务端,勿写入前端或 App。

任务管理


适用场景

场景说明
CRM 批量下发名单外部系统 nightly 将待回访手机号与业务字段写入人工/自动外呼任务
活动触达自动化营销平台创建自动外呼任务、导入对象后调用 启动 接口开拨
模板与话术同步从中台同步外呼任务模板及话术树,保证坐席侧话术一致
进度对账分页拉取任务、发送对象、外呼记录,与源系统比对完成率

接入前准备

准备项说明获取方式
OpenDesk 访问地址租户部署根地址,下文记为 {OpenDesk地址}由实施或运维提供
API Key格式 sk-odk-...管理后台 → 全局设置 → API Key(超级管理员)
HTTP 客户端支持 JSON REST;导入接口需 multipartcurl、Python、Java、Node.js 等
外呼任务模板 ID创建任务时必填客服工作台 → 触达中心 预建,或通过本 API 创建模板后取得 id
自动外呼依赖项(按需)IVR 流程 ID、机器人 ID、队列 ID、主叫号码等管理后台预配,见下表;ID 从 客服工作台 → 触达中心 新建草稿或任务详情取得

自动外呼依赖项对照:

API 字段配置说明界面路径
voice_flow_idIVR 语音流程管理后台 → 呼叫中心 → 流程设计 → 语音流程
caller_number_id外呼 服务号码(系统内部 ID,非界面显示的号码)管理后台 → 呼叫中心 → 号码管理
queue_id / transfer_queue_id员工组(作为呼叫中心队列)管理后台 → 组织架构 → 员工组管理

execution_modebot,还需:

API 字段界面路径
voicespeed_agent_id管理后台 → 全局设置 → OpenAgent(先配 VoiceSpeed)→ 客服工作台 → 触达中心 → 自动外呼任务 → 新建 中选机器人

界面下拉框通常只显示名称;可在 客服工作台 → 触达中心 → 自动外呼任务 → 新建 选好各项后,从浏览器创建请求或 GET 任务详情中读取对应 ID。

接口前缀:

{OpenDesk地址}/api/v1/open/engagement

鉴权 Header(JSON 接口必填):

Authorization: Bearer sk-odk-您的密钥
Content-Type: application/json

说明:

  • 鉴权仅认 Authorization Header 中的 API Key。
  • 数据限定在当前 Key 所属租户;跨租户 ID 返回 404
  • Key 无效 → 401;已禁用 → 403
  • API 创建的任务不关联具体员工。

概念说明

概念说明
外呼任务模板定义任务自定义字段、可选外呼话术树;任务创建时快照模板字段与话术
人工外呼任务坐席在 呼叫中心工作台 → 我的外呼对象 中手工拨号;支持分配对象、批量导入、跟进状态
自动外呼任务系统按策略自动拨号;支持 IVR、机器人转人工、坐席队列(渐进 / 比例 / 预测)
发送对象(Target)单条外呼记录:手机号 + 自定义字段值 + 状态
外呼记录(Record)每次实际外呼的通话摘要(时长、是否接通、结果等)

整体流程

人工外呼(推荐顺序)

① GET  外呼任务模板列表 → 确认 template_id
        ↓
② POST 创建人工外呼任务(draft 或 publish=true 直接激活)
        ↓
③ POST 批量添加发送对象(JSON bulk 或 Excel import)
        ↓
④ POST 发布任务(若创建时为 draft)
        ↓
⑤ GET  查询对象 / 外呼记录,对账进度
        ↓
⑥ POST 暂停 / 恢复 / 归档(运维控制)

自动外呼(推荐顺序)

① GET  外呼任务模板列表 → 确认 template_id
        ↓
② POST 创建自动外呼任务(status=draft,配置 execution_mode 与接待目标)
        ↓
③ POST 批量添加发送对象
        ↓
④ POST 启动任务 start
        ↓
⑤ GET  stats / monitor / records 监控与复盘
        ↓
⑥ POST 暂停 / 恢复 / 归档;draft 状态可 DELETE 删除

如何使用

第一步:创建 API Key

  1. 超级管理员登录 管理后台 → 全局设置 → API Key
  2. 新建 Key(如「CRM 外呼同步」「营销自动外呼」),保存完整 sk-odk-...
  3. 在脚本或密钥管理系统中配置,勿提交至 Git。

管理后台 API Key 列表

第二步:准备外呼任务模板

查询已有模板:

curl "{OpenDesk地址}/api/v1/open/engagement/outbound-task-templates?page=1&per_page=20" \
  -H "Authorization: Bearer sk-odk-您的密钥"

外呼任务模板列表

若无合适模板,可新建(含自定义字段):

curl -X POST "{OpenDesk地址}/api/v1/open/engagement/outbound-task-templates" \
  -H "Authorization: Bearer sk-odk-您的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "会员到期提醒",
    "description": "CRM 同步用",
    "fields": [
      {
        "key": "member_name",
        "name": "会员姓名",
        "field_type": "text",
        "required": true,
        "show_in_list": true
      },
      {
        "key": "expire_date",
        "name": "到期日",
        "field_type": "date",
        "required": false,
        "show_in_list": true
      }
    ]
  }'

响应中的 id 即为后续创建任务时的 template_id

外呼任务模板自定义字段

话术(可选): 模板可配置外呼话术树。单独维护话术时使用:

  • GET/PUT .../outbound-task-templates/{template_id}/script

话术为树形结构:含 开始 / 话术 / 分支 / 结束 节点,创建任务时会 快照 至任务,后续改模板不影响已创建任务。

外呼任务模板话术树

第三步:创建人工外呼任务并导入对象

创建任务(草稿):

curl -X POST "{OpenDesk地址}/api/v1/open/engagement/outbound-tasks" \
  -H "Authorization: Bearer sk-odk-您的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "3月会员回访",
    "template_id": 1,
    "description": "CRM 自动下发",
    "starts_at": "2026-03-01T09:00:00",
    "due_at": "2026-03-31T18:00:00",
    "allow_self_claim": true,
    "default_redial_interval_minutes": 120,
    "publish": false
  }'
字段必填说明
name任务名称,最多 80 字
template_id外呼任务模板 ID
publishtrue 时创建后直接为 进行中;默认 false草稿
starts_at / due_at计划开始 / 截止时间;due_at 不得早于 starts_at
allow_self_claim是否允许坐席自行认领未分配对象
default_redial_interval_minutes默认重拨间隔(分钟)
assignee_scope_ids可参与任务的员工组 ID 列表

人工外呼任务列表

批量添加发送对象(JSON,单次最多 5000 条):

curl -X POST "{OpenDesk地址}/api/v1/open/engagement/outbound-tasks/{task_id}/targets/bulk" \
  -H "Authorization: Bearer sk-odk-您的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "targets": [
      {
        "phone_number": "13800138000",
        "assignee_id": null,
        "field_values": {
          "member_name": "张三",
          "expire_date": "2026-03-15"
        }
      }
    ]
  }'

人工外呼任务发送对象列表

Excel / CSV 导入(multipart):

curl -X POST "{OpenDesk地址}/api/v1/open/engagement/outbound-tasks/{task_id}/targets/import" \
  -H "Authorization: Bearer sk-odk-您的密钥" \
  -F "file=@targets.xlsx"
导入限制
文件大小最大 10 MB
行数最大 5000 行(不含表头)
手机号列表头须为下列之一:phone_number / phone / mobile / tel / 手机号 / 手机号码 / 联系电话 / 呼叫号码 / 号码
自定义字段列表头与模板字段 key名称 匹配(不区分大小写、空格、下划线)
必填字段模板标记为必填的字段,行内不能为空

响应含 totalcreatedfailed 及逐行 errors(最多返回 100 条错误明细)。

Excel 导入发送对象

发布任务:

curl -X POST "{OpenDesk地址}/api/v1/open/engagement/outbound-tasks/{task_id}/publish" \
  -H "Authorization: Bearer sk-odk-您的密钥"

发布前须至少添加 1 个 发送对象;仅 草稿已暂停 任务可发布。

第四步:创建并启动自动外呼任务

创建自动外呼任务(IVR 示例):

curl -X POST "{OpenDesk地址}/api/v1/open/engagement/auto-outbound-tasks" \
  -H "Authorization: Bearer sk-odk-您的密钥" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "3月到期 IVR 提醒",
    "template_id": 1,
    "execution_mode": "ivr",
    "voice_flow_id": 12,
    "start_date": "2026-03-01",
    "end_date": "2026-03-31",
    "daily_time_windows": [
      {"start": "09:00", "end": "12:00"},
      {"start": "14:00", "end": "20:00"}
    ],
    "caller_number_id": "pn_1",
    "max_concurrency": 10,
    "daily_per_number_limit": 3
  }'
execution_mode必填关联配置
ivrvoice_flow_id — 语音流程 ID
botvoicespeed_agent_id + transfer_queue_id — 机器人与转人工队列
agentqueue_id + pacing_mode;比例/预测模式还需 dial_ratiodial_intensityabandon_prompt

caller_number_id号码管理 中号码的系统内部 ID(如 pn_1),不是界面显示的 400… 号码。

新建自动外呼任务

自动外呼执行方式与计划

创建后任务为 草稿。导入发送对象后 启动

curl -X POST "{OpenDesk地址}/api/v1/open/engagement/auto-outbound-tasks/{task_id}/start" \
  -H "Authorization: Bearer sk-odk-您的密钥"

启动前须至少 1 个 发送对象;仅 草稿已暂停 可启动。

监控:

# 统计趋势、结果分布
curl "{OpenDesk地址}/api/v1/open/engagement/auto-outbound-tasks/{task_id}/stats" \
  -H "Authorization: Bearer sk-odk-您的密钥"

# 实时并发、坐席就绪、弃呼率等
curl "{OpenDesk地址}/api/v1/open/engagement/auto-outbound-tasks/{task_id}/monitor" \
  -H "Authorization: Bearer sk-odk-您的密钥"

自动外呼任务详情


任务状态与生命周期

人工外呼任务 status

状态含义可执行操作(API)
draft草稿编辑、添加对象、publish
active进行中坐席外呼、pause
paused已暂停编辑、resumepublisharchive
completed已完成只读查询
archived已归档只读查询;不可再改对象

状态流转:draft/pausedpublishactivepausepausedresumeactivepaused/completedarchivearchived

自动外呼任务 status

状态含义可执行操作(API)
draft草稿编辑、添加对象、startdelete
active拨号中pause、查询 stats/monitor
paused已暂停编辑、resumearchive
completed已完成只读
archived已归档只读

发送对象状态(人工)

pending(待呼叫)· calling(呼叫中)· redial(待重拨)· completed(已完成)· do_not_call(勿呼)· invalid_number(无效号码)

发送对象状态(自动)

pending · calling · redial_pending · completed · invalid


接口速查

外呼任务模板

功能MethodPath
模板列表GET/api/v1/open/engagement/outbound-task-templates
新建模板POST/api/v1/open/engagement/outbound-task-templates
模板详情GET/api/v1/open/engagement/outbound-task-templates/{template_id}
更新模板PUT/api/v1/open/engagement/outbound-task-templates/{template_id}
删除模板DELETE/api/v1/open/engagement/outbound-task-templates/{template_id}
获取话术GET/api/v1/open/engagement/outbound-task-templates/{template_id}/script
更新话术PUT/api/v1/open/engagement/outbound-task-templates/{template_id}/script

列表参数:page(默认 1)、per_page(默认 20)、q(名称搜索)。

人工外呼任务

功能MethodPath
任务列表GET/api/v1/open/engagement/outbound-tasks
新建任务POST/api/v1/open/engagement/outbound-tasks
任务详情GET/api/v1/open/engagement/outbound-tasks/{task_id}
更新任务PUT/api/v1/open/engagement/outbound-tasks/{task_id}
发布POST/api/v1/open/engagement/outbound-tasks/{task_id}/publish
暂停POST/api/v1/open/engagement/outbound-tasks/{task_id}/pause
恢复POST/api/v1/open/engagement/outbound-tasks/{task_id}/resume
归档POST/api/v1/open/engagement/outbound-tasks/{task_id}/archive
对象列表GET/api/v1/open/engagement/outbound-tasks/{task_id}/targets
添加单个对象POST/api/v1/open/engagement/outbound-tasks/{task_id}/targets
批量添加对象POST/api/v1/open/engagement/outbound-tasks/{task_id}/targets/bulk
Excel 导入对象POST/api/v1/open/engagement/outbound-tasks/{task_id}/targets/import
批量分配坐席POST/api/v1/open/engagement/outbound-tasks/{task_id}/targets/bulk-assign
批量删除对象POST/api/v1/open/engagement/outbound-tasks/{task_id}/targets/bulk-delete
更新单个对象PUT/api/v1/open/engagement/outbound-targets/{target_id}
外呼记录列表GET/api/v1/open/engagement/outbound-tasks/{task_id}/records

任务列表参数:pageper_page(最大 200)、qstatustemplate_id
对象列表参数:pageper_pageqstatusassignee_id

批量分配请求体:

{
  "target_ids": [101, 102],
  "assignee_id": 5,
  "overwrite": false
}

overwrite=false 时跳过已有负责人的对象;assignee_id=null 表示取消分配。

自动外呼任务

功能MethodPath
任务列表GET/api/v1/open/engagement/auto-outbound-tasks
新建任务POST/api/v1/open/engagement/auto-outbound-tasks
任务详情GET/api/v1/open/engagement/auto-outbound-tasks/{task_id}
更新任务PUT/api/v1/open/engagement/auto-outbound-tasks/{task_id}
启动POST/api/v1/open/engagement/auto-outbound-tasks/{task_id}/start
暂停POST/api/v1/open/engagement/auto-outbound-tasks/{task_id}/pause
恢复POST/api/v1/open/engagement/auto-outbound-tasks/{task_id}/resume
归档POST/api/v1/open/engagement/auto-outbound-tasks/{task_id}/archive
删除(仅草稿)DELETE/api/v1/open/engagement/auto-outbound-tasks/{task_id}
统计GET/api/v1/open/engagement/auto-outbound-tasks/{task_id}/stats
监控GET/api/v1/open/engagement/auto-outbound-tasks/{task_id}/monitor
对象列表GET/api/v1/open/engagement/auto-outbound-tasks/{task_id}/targets
添加单个对象POST/api/v1/open/engagement/auto-outbound-tasks/{task_id}/targets
批量添加对象POST/api/v1/open/engagement/auto-outbound-tasks/{task_id}/targets/bulk
Excel 导入对象POST/api/v1/open/engagement/auto-outbound-tasks/{task_id}/targets/import
更新对象PUT/api/v1/open/engagement/auto-outbound-targets/{target_id}
标记无效POST/api/v1/open/engagement/auto-outbound-targets/{target_id}/mark-invalid
删除对象DELETE/api/v1/open/engagement/auto-outbound-targets/{target_id}
外呼记录列表GET/api/v1/open/engagement/auto-outbound-tasks/{task_id}/records

自动外呼列表分页参数为 pagepage_size(最大 200),另支持 qstatusmodeivr / bot / agent)。

完整请求 / 响应 Schema 见 {OpenDesk地址}/docs(OpenAPI)。


错误与排查

HTTP 状态常见原因处理建议
401Key 缺失、无效或已删除检查 Authorization Header
403Key 已禁用启用或更换 Key
404任务 / 模板 / 对象 ID 不存在或不属当前租户核对 ID
400 / 422业务规则不满足见下表

外呼任务专项规则:

规则说明
发布 / 启动须至少 1 个 发送对象
归档任务不可再添加或修改对象
自动外呼删除draft 可 DELETE
批量导入须含手机号列;单行必填字段不可空
批量 JSON单次 targets 数组 1~5000
跨租户一律返回 404,不泄露是否存在

错误响应体示例:

{
  "code": "VALIDATION_ERROR",
  "message": "Please add outbound targets before publishing",
  "status": 400
}

安全与限制

  1. API Key 仅部署在服务端;日志与监控不得打印完整 Key。
  2. 生产 / 测试环境分离 Key;停用脚本后 禁用并删除 对应 Key。
  3. 所有请求使用 HTTPS
  4. Open API 不走员工权限树;租户隔离完全由 Key 决定。
  5. 本 API 不提供:坐席工作台实时外呼控制、WebRTC 签权、通话录音直链下载、短信群发(见触达中心其他能力)。

与其他功能的关系

  • API Key(管理后台):与本接口及《传递客户上下文》《知识库 API》共用鉴权凭证。
  • 客服工作台 · 触达中心:API 写入的任务与发送对象在主管侧同一界面可见、可管理。
  • 客服工作台 · 呼叫中心工作台:坐席在 我的外呼对象 执行人工外呼、填写业务字段与话术。
  • 管理后台 · 流程设计 / 号码管理:自动外呼 IVR 模式依赖已配置的语音流程与主叫号码。
  • CLI 工具:可使用 deepflow-opendesk-clioutbound-templates 子命令维护模板;任务级 Open API 适合 CRM 批量集成。

对接示例

CRM 下发人工回访名单

每日凌晨将待回访手机号与会员字段写入人工外呼任务:

  1. GET /outbound-task-templates?q=回访 取得 template_id
  2. POST /outbound-tasks 创建草稿(若无进行中任务)
  3. POST /outbound-tasks/{id}/targets/bulk 写入名单(每批 ≤5000)
  4. POST .../publish 发布;后续批次继续 bulk 追加
  5. GET .../targets?status=pending 对账剩余量

坐席在 呼叫中心工作台 → 我的外呼对象 中可见并外呼(须已发布且对象已分配或可认领)。

我的外呼对象列表

呼叫中心工作台外呼话术抽屉

营销活动自动 IVR 外呼

  1. POST /auto-outbound-tasks 配置 IVR、拨打窗口、并发
  2. POST .../targets/import 上传 Excel
  3. POST .../start 启动
  4. 定时 GET .../stats 看接通率;异常则 POST .../pause
  5. 结束 POST .../archive