事半AI

基础查询

获取项目列表、数字员工列表、线路状态、音色列表,以及创建项目、关联数字员工。

对接前,需先通过 API 获取 programId(项目 ID)和 botId(数字员工 ID),后续所有操作依赖这两个ID。

1.1 获取项目列表

GET /api/v1/external/programs(所需权限:READ

curl "https://api.halfcall.cn/api/v1/external/programs" \
  -H "Authorization: Bearer sk_xxx"
{
  "code": 0,
  "data": {
    "total": 2,
    "list": [
      {
        "programId": "cmkhndatf000jdulm6ez8ojyf",
        "name": "事半AI客服",
        "runState": "PAUSED",
        "executionMode": "Stream"
      }
    ]
  }
}

响应字段说明:

字段说明
total企业下项目总数
programId项目唯一 ID,后续接口均需此值
name项目名称
runState运行状态:RUNNING=运行中,PAUSED=已暂停
executionMode执行模式:Stream=流式自动外呼,Batch=手动批次模式

1.2 获取项目下数字员工列表

GET /api/v1/external/programs/:programId/bots(所需权限:READ

curl "https://api.halfcall.cn/api/v1/external/programs/cmk.../bots" \
  -H "Authorization: Bearer sk_xxx"
{
  "code": 0,
  "data": {
    "bots": [
      {
        "botId": "bot_xxx",
        "name": "小智",
        "stage": 1,
        "isEnabled": true,
        "hotInitStatus": "NONE"
      }
    ]
  }
}

响应字段说明:

字段说明
botId数字员工唯一 ID,AI 呼入时作为 X-BotId 传入,上传线索时指定 botId
name数字员工名称
stage轮次序号,一个项目可配置多个数字员工按轮次依次跟进
isEnabled是否启用,false 表示该数字员工已暂停
hotInitStatus话术配置状态:NONE=正常可用,PENDING=升级排队,UPGRADING=升级中,FAILED=升级失败

1.3 查询线路状态

GET /api/v1/external/programs/:programId/line-status(所需权限:READ

查询项目当前线路使用情况,可用于判断是否有空闲线路可发起外呼。

curl "https://api.halfcall.cn/api/v1/external/programs/cmk.../line-status" \
  -H "Authorization: Bearer sk_xxx"
{
  "code": 0,
  "data": {
    "programId": "cmk...",
    "runState": "RUNNING",
    "maxConcurrency": 50,
    "currentConcurrency": 12,
    "idle": 38
  }
}

响应字段说明:

字段说明
runState项目运行状态:RUNNING / PAUSED
maxConcurrency最大并发线路数
currentConcurrency当前正在通话的线路数
idle空闲线路数(maxConcurrency - currentConcurrency

小程序集成建议:在发起外呼前先调用此接口,当 idle > 0runState = "RUNNING" 时再推送线索。

1.4 获取线路列表

GET /api/v1/external/trunks(所需权限:READ

获取当前企业可读取到的线路——包含本企业名下的线路,以及对本企业开放的共享线路(不区分项目)。

参数类型必填说明
statusstring-按线路状态筛选:Normal=可用,Band=已禁止,不传则不过滤
pagenumber-页码,默认 1
pageSizenumber-每页数量,默认 20,最大 100
curl "https://api.halfcall.cn/api/v1/external/trunks" \
  -H "Authorization: Bearer sk_xxx"
{
  "code": 0,
  "data": {
    "total": 2,
    "page": 1,
    "pageSize": 20,
    "list": [
      {
        "trunkId": "trunk_xxx",
        "name": "北京-移动专线",
        "description": "示例线路",
        "status": "Normal",
        "trunkType": "SIP",
        "operators": "CMCC",
        "showPhoneType": "FixedLine",
        "outerCaller": "010xxxxxxx",
        "whitelistCity": "北京",
        "concurrency": 50,
        "callRate": 3000,
        "startTime": "2024-01-01T00:00:00.000Z",
        "endTime": "2024-12-31T23:59:59.000Z",
        "scope": "own"
      }
    ]
  }
}

响应字段说明:

字段说明
trunkId线路唯一 ID
status线路状态:Normal=可用,Band=已禁止
trunkType线路类型:FreeSwitch / SIP / PhoneNumber / AX
operators运营商:CMCC=移动,CUCC=联通,CTCC=电信
showPhoneType外显号码类型:FixedLine=固话,VirtualTrumpet=虚拟小号,RealnameMobile=实名手机
outerCaller外显主叫号码
whitelistCity限制城市
concurrency线路并发数
callRate每日拨打频次上限
scopeown=本企业名下线路,shared=对本企业开放的共享线路

1.5 获取音色列表

GET /api/v1/external/voices(所需权限:READ

获取当前企业可读取到的音色(TTS 模型)——包含全局共享音色,以及本企业专属克隆音色,用于配置数字员工时参考。

参数类型必填说明
statusstring-按状态筛选:active=使用中,disabled=已停用,不传则不过滤
pagenumber-页码,默认 1
pageSizenumber-每页数量,默认 20,最大 100
curl "https://api.halfcall.cn/api/v1/external/voices" \
  -H "Authorization: Bearer sk_xxx"
{
  "code": 0,
  "data": {
    "total": 3,
    "page": 1,
    "pageSize": 20,
    "list": [
      {
        "voiceModelId": "model_xxx",
        "name": "佳音",
        "model": "speech-2.8-hd",
        "voice": "voice_id_xxx",
        "price": 0.01,
        "status": "active",
        "scope": "shared",
        "previewUrl": "https://cdn.halfcall.cn/tts_preview/external/halfcall/model_xxx.mp3",
        "createdAt": "2024-01-01T00:00:00.000Z",
        "bots": [
          { "botId": "bot_xxx", "name": "小智" }
        ]
      }
    ]
  }
}

响应字段说明:

字段说明
voiceModelId音色对应的模型 ID,配置数字员工 TTS 时使用
name音色名称
model底层模型标识
voice底层音色标识(voice_id)
price计费单价(元)
statusactive=使用中,disabled=已停用
scopeown=本企业专属音色,shared=全局共享音色
previewUrl固定文案的试听音频地址(mp3),可直接在浏览器或播放器中播放;部分音色尚未生成,返回 null
bots当前使用该音色的本企业数字员工列表(botId + name

1.6 创建项目

POST /api/v1/external/programs(所需权限:CONTROL

参数类型必填说明
namestring项目名称
trunkIdsstring[]线路 ID 列表,至少一条,取自 1.4「获取线路列表」返回的 trunkId
botsarray-顺带关联数字员工 [{botId, stage?}]botId 取自 identify,stage 默认 1,不传则创建空项目,之后用 1.7 关联
descriptionstring-项目描述
callTypestring-呼叫类型:Need=按需(默认)、Long=长期
operationTypestring-业务类型:Intention=意向筛选(默认)、StockConversion=存量转化、ServiceCare=服务关怀、SelfService=自助运营
wechatTypestring-微信类型:None=无(默认)、Personal=个微、Business=企微
judgeModestring-意向判断方式:ScoreMode=评分模式(默认)、IntentionMode=意向模式
runStatestring-创建后运行状态:RUNNING/PAUSED(默认 PAUSED,避免创建后立即开始拨打)
maxConcurrencynumber-项目级总并发限制,1-500,默认 50
ringingTimeoutnumber-响铃超时(秒),5-120,默认 30
maxCallDurationnumber-单通最长时长(秒),0=不限制(默认)或至少 15
dailyCapMetricstring-每日上限口径:DIALED=去重外呼数、REACHED=去重接通数(默认)
maxDailyCapnumber-每日上限数值,0=不限制(默认)
dialIntervalSecnumber-两次拨打最小间隔(秒),默认 0
webhookUrl / webhookSecretstring-通话结算回调地址/签名密钥,也可创建后单独配置
workTimeConfigobject-拨打时间窗口,不传则默认工作日/每天 9:00-12:00 + 14:00-18:00
smsFeenumber-短信单价(元/条),默认 0
effectPricenumber-效果单价(元/条),默认 8

注意: hashrateFee(算力费)/callFee(电话费)不支持通过 API 指定,创建时自动按贵企业所属渠道的配置价填入(渠道未配置则用平台默认价)——这两个字段线上是强管控的计费口径,不开放给外部调用方。

curl -X POST "https://api.halfcall.cn/api/v1/external/programs" \
  -H "Authorization: Bearer sk_xxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "国庆促销外呼",
    "trunkIds": ["trunk_xxx"],
    "bots": [{ "botId": "bot_xxx", "stage": 1 }]
  }'
{ "code": 0, "msg": "success", "data": { "programId": "prog_xxx", "name": "国庆促销外呼", "runState": "PAUSED" } }

1.7 关联数字员工

PUT /api/v1/external/programs/:programId/bots(所需权限:CONTROL

整份替换:传入的 bots 数组会完全替换该项目当前的数字员工配置(先清空再按传入列表重建),不是增量添加/删除——如果项目已经关联了 3 个数字员工,这次只传 1 个,另外 2 个会被移除。需要"只加一个"的效果,请先用 1.2「获取项目下数字员工列表」读出现有配置,拼接后整份传入。

参数类型必填说明
botsarray[{botId, stage?}],至少一项;botId 取自 identify,stage 默认 1
curl -X PUT "https://api.halfcall.cn/api/v1/external/programs/prog_xxx/bots" \
  -H "Authorization: Bearer sk_xxx" \
  -H "Content-Type: application/json" \
  -d '{ "bots": [{ "botId": "bot_xxx", "stage": 1 }, { "botId": "bot_yyy", "stage": 2 }] }'
{ "code": 0, "msg": "success", "data": { "programId": "prog_xxx", "botCount": 2 } }

接下来是什么?

以下是建议的下一步操作:

接入概述
外部系统对接事半AI平台的前置条件、认证方式、权限范围与错误码说明。
阅读指南
AI 外呼
线索导入(批量/单条)、启停项目、查询通话结果、拨打配置、批量查询与撤销线索。
阅读指南
AI 呼入
通过 SIP Header 传入自定义参数,实现个性化 AI 呼入接入。
阅读指南