1. 接入流程
- 开通API权限
联系销生客为企业开通API权限,获取企业编号
comcode和接口密钥appkey。 - 配置外呼资源
确认企业已配置可用线路、主叫号码授权、坐席/企业有效期和账户余额。
- 生成签名
按接口要求拼接参与签名的参数,用
md5(appkey + queryString)生成sign。 - 调用外呼接口
调用
/apicall/wancall发起呼叫,接口返回本次业务话单号callid。 - 接收或查询话单
通过
notifyurl接收结果,或使用话单查询接口按callid/ 被叫号码查询。
2. 基础信息
| 项目 | 说明 |
|---|---|
| 服务地址 | 开通接口后由销生客顾问提供,并与企业接口权限对应。 |
| 推荐外呼接口 | POST /apicall/wancall |
| 请求格式 | 支持表单参数,也支持 JSON body;建议服务端 POST。 |
| 返回格式 | JSON,通用字段包含 code、text、callid。 |
| 时间戳 | timestamp 为 13 位毫秒时间戳并参与签名,请在每次请求时实时生成。 |
3. 签名规则
销生客外呼接口 wancall 的签名参数固定为:comcode、caller、callee、notifyurl、timestamp。参数按键名字典序升序拼接为 URL query 字符串,再在前面拼接 appkey 后做 MD5。
参与签名参数:
callee=被叫号码
caller=主叫号码
comcode=企业编号
notifyurl=回调地址
timestamp=13位毫秒时间戳
queryString = callee=...&caller=...&comcode=...¬ifyurl=...×tamp=...
sign = md5(appkey + queryString)
display、param、excount 不参与 wancall 签名;appkey 不作为请求参数传入,仅用于企业服务端生成签名。// PHP示例
$params = [
'comcode' => '209xxxxxx',
'caller' => '13800000000',
'callee' => '13900000000',
'notifyurl' => 'https://your-domain.com/callback/xiaocall',
'timestamp' => (string) round(microtime(true) * 1000),
];
ksort($params);
$query = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
$sign = md5($appkey . urldecode($query));
4. 发起外呼:POST /apicall/wancall
| 参数 | 必填 | 说明 |
|---|---|---|
comcode | 是 | 企业编号。 |
caller | 是 | 主叫号码或坐席账号。若企业按坐席过期方式配置,该号码需已创建为企业用户。 |
callee | 是 | 被叫号码,支持手机号或座机号。 |
notifyurl | 是 | 通话结果回调地址,参与签名。 |
timestamp | 是 | 13位毫秒时间戳。 |
sign | 是 | 签名,规则见上文。 |
display | 否 | 指定外显号/线路号码;为空时系统按主叫绑定或线路池自动选择。 |
param | 否 | 第三方自定义透传参数,会写入话单,用于业务侧关联订单/客户。 |
excount | 否 | SIP AXB 场景的绑定有效时长,未填写时按企业开通配置处理。 |
curl -X POST '{接口服务地址}/apicall/wancall' \
-d 'comcode=209xxxxxx' \
-d 'caller=13800000000' \
-d 'callee=13900000000' \
-d 'notifyurl=https://your-domain.com/callback/xiaocall' \
-d 'timestamp=1720000000000' \
-d 'sign=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
-d 'display=' \
-d 'param=order_10001'
// 成功示例
{
"code": 0,
"text": "呼叫发起成功",
"callid": "202607201234567890ABCDEF"
}
// 失败示例
{
"code": 4001,
"text": "签名不正确,请检查参数"
}
5. 话单查询
5.1 按 callid 查询话单:POST /apicall/getcalllog
用于查询指定月份内某个 callid 的结算话单。该接口签名参数为:callid、comcode、date、tophone。
| 参数 | 必填 | 说明 |
|---|---|---|
comcode | 是 | 企业编号。 |
callid | 是 | 外呼接口返回的 callid;传 0 时按被叫号码查询。 |
date | 是 | 话单月份,传 YYYYMM 或可被解析到月份的数字。 |
tophone | 是 | 被叫号码。 |
starttimeint | 否 | 开始时间戳,秒级时间戳。 |
endtimeint | 否 | 结束时间戳,秒级时间戳。 |
sign | 是 | md5(appkey + callid=...&comcode=...&date=...&tophone=...) |
{
"code": 0,
"text": "ok",
"log": {
"callid": "...",
"fromstarttime": "主叫开始时间",
"fromendtime": "主叫结束时间",
"tophonestarttime": "被叫开始时间",
"tophoneendtime": "被叫结束时间",
"mduration": "主叫通话时长",
"bduration": "被叫通话时长",
"timeint": "创建时间戳",
"sound": "录音地址"
}
}
6. 线路状态:POST /apicall/getlinestatus
获取企业线路列表及状态。签名参数为:comcode、timestamp。
| 返回字段 | 说明 |
|---|---|
macode | 企业已开通的线路号码或外显号码。 |
mastatus | 当前线路状态。 |
activestatus | 当前线路激活状态。 |
lastupdatetime | 最后更新时间。 |
{
"code": 0,
"linelist": {
"count": 2,
"list": [
{"macode":"023xxxxxxx","mastatus":"1","activestatus":"1","lastupdatetime":"..."}
]
}
}
7. 回调说明
wancall 请求中的 notifyurl 会随话单写入系统,用于后续通话状态或话单结果通知。不同线路返回字段可能存在差异,建议回调接收方按“宽松解析”处理。
| 建议字段 | 说明 |
|---|---|
callid | 销生客返回的业务话单号。 |
caller | 主叫号码。 |
callee | 被叫号码。 |
resultcode | 呼叫结果码,成功通常为 200 或 0。 |
resultmsg | 结果描述。 |
bduration | 被叫通话时长。 |
sound | 录音地址。 |
param | 外呼时传入的第三方自定义参数。 |
callid 做幂等,避免重复回调造成重复更新。8. 常见错误码
| code | 含义 / 处理建议 |
|---|---|
0 | 请求成功。 |
200 | 呼叫请求已成功受理。 |
3001 | 话单已创建,呼叫正在处理中。 |
4001 | 通用业务错误:缺少参数、未开通、余额不足、签名错误、线路未配置等。 |
4008 | 时间戳格式不正确。 |
4009 | 接口调用超时。 |
8001 | 线路未能完成本次呼叫,请结合返回说明检查线路或号码状态。 |
9. 联调清单
确认企业已开通外呼 API 权限,并处于正常服务期。
确认企业或坐席未过期,余额或分钟数充足。
如开启主叫限制,需把 caller 加入授权名单。
确认企业已有可用外呼线路;需要指定线路时再传入 display。
确认签名参数、排序、URL编码和 notifyurl 与实际请求完全一致。
notifyurl 需公网可访问,并支持重复回调幂等处理。