实时调用单通电话回调
更新时间:2026-10-21
描述
外呼系统通过用户配置的回调地址将实时调用的通话数据进行回调
注意: 服务端(接收方)需要保证配置回调地址的一定吞吐。 在电话拨打数据量大的时,请求方(百度) 会造成瞬时请求压力较大,(因为我们会尽可能的把数据尽快的推送给乙方).
例如采用如下实现方案时请求可能发生堵塞,甚至超时丢失数据。 接收方:采用流量入口带宽不足,接口实现采用直接插入数据库(数据库配置也比较低时),回调会产生堵塞,如果严重超时,可能会造成请求失败。
我们推荐:
- 采用异步的方式,例如Kakfa,打印日志 保证接口快速响应。
- 增加资源配置,例如插入数据库,保证数据库一定磁盘,cpu等资源配置。
重试机制 首次请求服务端(接收方)失败后 1s 后会再次请求一次
动态鉴权签名生成规则 动态鉴权签名生成规则
URL
回调地址(配置台-API配置-其他配置)
HTTP Method
POST
请求参数
| 参数名称 | 类型 | 是否必须 | 说明 | 示例 |
|---|---|---|---|---|
| appid | string | 否 | 动态鉴权,appid(回调类型为动态鉴权传送) | APP001 |
| timestamp | string | 否 | 动态鉴权,签名生成时间(回调类型为动态鉴权传送) | 20260703102050 |
| nonce | string | 否 | 动态鉴权,参与签名生成的uuid(回调类型为动态鉴权传送) | a63de7dbff914f61b2169d53d9963806 |
| signature | string | 否 | 动态鉴权生成的签名(回调类型为动态鉴权传送 详情查看动态鉴权生成规则) | 088de95fb5fe8fc3c19a452d1c3f0e74744d578a77ca26640cf41197bd36c1cf |
| callbackType | int | 是 | 回调数据类型, 0-任务呼叫单通电话回调 1-号码组终态回调 2-任务状态变更回调 3-实时呼叫单通电话回调 4-呼入单通电话回调 | 3 |
| data | obj | 是 | 回调数据 |
data数据
| 参数名称 | 类型 | 是否必须 | 说明 | 示例 |
|---|---|---|---|---|
| tenantId | long | 是 | 租户唯一标识 | 10363 |
| memberId | long | 是 | 号码唯一标识,实时呼叫调用时,号码返回的对应标识 | 732722324373760 |
| sessionId | string | 是 | 通话唯一标识 | "201bd45e-a375-47e1-bcee-e5bcd3c6b523" |
| collectInfo | obj | 是 | 信息收集内容,流程节点中配置的收集信息 | {"hungupnode": "拒绝_首次施压"} |
| record | array | 是 | 会话还原记录 | |
| intent | string | 是 | 意向,在外呼机器人-流程节点-信息收集,配置key为「意向」,对应的value值 | "愿意购买" |
| callerNum | string | 是 | 主叫号码 | "07567171348" |
| endType | long | 是 | 接通状态 1-已接通 0-未接通 | 1 |
| endTypeReason | string | 是 | 未接通原因,详见 endTypeReason 列表 | "notexist" |
| contactUUID | string | 是 | 生成通话录音唯一标识,根据该标识去获取录音文件 | "c1ff838e-c2a4-11eb-a785-fa27000306ed" |
| durationTimeLen | int | 是 | 拨号总时长,单位为秒 | 64 |
| ringingTimeLen | int | 是 | 振铃时长,单位为秒 | 10 |
| talkingTimeLen | int | 是 | 对话时长,单位为秒 | 5 |
| startTime | long | 是 | 呼叫开始时间-Unix时间戳(单位:毫秒) | "1635909010000" |
| ringStartTime | long | 是 | 振铃开始时间-Unix时间戳(单位:毫秒) | "1635909010000" |
| talkingStartTime | long | 是 | 通话开始时间-Unix时间戳(单位:毫秒),未接通显示'-',已接通会有值 | "1635909010000" |
| endTime | long | 是 | 呼叫结束时间-Unix时间戳(单位:毫秒) | "1635909010000" |
| transResult | int | 否 | 转人工结果 | 字段为空,或为0未发起;1成功,-1失败 |
| extensionResult | int | 否 | 转分机号结果 | 字段为空,或为0未发起;1成功,2失败 |
| isRobotHangup | boolean | 否 | 是否机器人主动挂机 | true |
| dialogVar | Object | 否 | 变量,导入名单的变量 | {"变量1": "已接通"} |
| extJson | String | 否 | 导入名单的扩展信息 | 导入名单的扩展信息 |
| mobile | string | 否 | 手机号码 | xxxxxxxxxxx |
| sipCode | String | 否 | 接通状态 | 如200、480、407等 |
| sipInfo | String | 否 | 接通描述 | 如No user responding等 |
| tagExtractInfo | Map | 否 | 标签抽取,具体标签根据机器人设置 | {"是否有意向":"有"} |
| customTagList | List | 否 | 自定义标签 | ["A级意图","C级意图","自定义标签"] |
| mobileArea | String | 否 | 被叫号码归属地,格式通常为“省-市”;未知地区可能为“未知-未知”。 | "广东-深圳" |
| callerArea | String | 否 | 主叫号码归属地,格式通常为“省-市”;未知地区可能为“未知-未知”。 | "北京-北京" |
| recordFileUrl | String | 否 | 通话录音文件地址,没有录音时可能为空。 | "https://example.com/record.wav" |
| triggerSmsMessage | Integer | 否 | 是否触发短信:0表示未触发,1表示已触发;该字段不表示短信发送是否成功。 | 1 |
| asrModelName | String | 否 | 语音识别模型名称,历史会话未保存时可能为空。 | "语音模型1" |
| ttsVoiceName | String | 否 | 发音人名称,历史会话未保存时可能为空。 | "度小美" |
| robotChargeDuration | Integer | 否 | 机器人计费时长,单位:分钟。 | 3 |
| lineChargeDuration | Integer | 否 | 通话计费时长,单位:分钟。 | 3 |
| transAgentBillingChargeDuration | Integer | 否 | 转人工后的人工通话计费时长,单位:分钟。 | 3 |
| talkingTurn | Integer | 否 | 机器人回复数,即通话轮次。 | 5 |
| voiceTalkingTurn | Integer | 否 | 用户回复数。 | 4 |
| addFriendStatus | Integer | 否 | 加微结果:-1表示失败,0表示已发起,1表示成功;未发起或无结果时可能为空。 | 1 |
| weChatPushStatus | Integer | 否 | 公众号推送状态:-1表示失败,0表示未发起,1表示成功;未配置或无结果时可能为空。 | 1 |
| skillGroupList | Array | 否 | 本次会话涉及的转接技能组列表,元素结构见skillGroupList参数说明。 | 详见子结构 |
| agentInfoList | Array | 否 | 本次会话涉及的接待坐席列表,元素结构见agentInfoList参数说明。 | 详见子结构 |
| transferFailReason | String | 否 | 转人工失败原因说明,如“主动放弃”“队列超时”“队列溢出”;无对应结果时可能为空。 | "队列超时" |
| manualIntent | String | 否 | 最新一条坐席小结中的规则标签名称,即用户意向。 | "意向1" |
| manualRemark | String | 否 | 最新一条坐席小结中的坐席备注。 | "备注内容" |
| userSummaryList | Array | 否 | 坐席小结列表,元素结构见userSummaryList参数说明;没有小结时可能为空。 | 详见子结构 |
| agentOutboundType | Integer | 否 | 坐席呼叫类型:0表示AI转人工,1表示回拨,2表示主动拨号;无法判断时可能为空。 | 1 |
| auditUserName | String | 否 | 质检员姓名,未分配时可能为空。 | "张三" |
| auditStatus | Integer | 否 | 人工质检状态:0表示未质检,1表示已质检;历史记录可能为空。 | 1 |
| 参数名称 | 类型 | 是否必须 | 说明 | 示例 |
| skillGroupId | Long | 是 | 技能组ID。 | 1234567 |
| skillGroupName | String | 是 | 技能组名称。 | "技能组1" |
| enterSkillGroupTime | String | 是 | 进入技能组时间。 | "2026-10-15 10:00:00" |
| queueDuration | Integer | 是 | 在技能组中的等待时长,沿用联络中心回传值。 | 10 |
agentInfoList数据
| 参数名称 | 类型 | 是否必须 | 说明 | 示例 |
| agentCode | String | 否 | 坐席工号;历史记录无法补齐时可能为空。 | "A001" |
| agentName | String | 是 | 坐席名称。 | "张三" |
| ringTime | String | 是 | 坐席振铃时间。 | "2026-10-15 10:00:00" |
| assignTime | String | 是 | 坐席分配时间。 | "2026-10-15 10:00:00" |
| answerTime | String | 是 | 坐席接通时间。 | "2026-10-15 10:00:05" |
| hangupTime | String | 是 | 坐席挂断时间。 | "2026-10-15 10:01:05" |
| hangupParty | String | 否 | 挂断方,未返回时可能为空。 | null |
| skillGroupId | String | 是 | 坐席所属技能组ID。 | "1234567" |
| queueLen | Integer | 是 | 排队时长,沿用联络中心回传值。 | 10 |
| talkLen | Integer | 是 | 通话时长,沿用联络中心回传值。 | 60 |
| wrapUpLen | Integer | 否 | 话后整理时长,未返回时可能为空。 | null |
| resultCode | Integer | 是 | 转接结果码:0表示成功,其他值沿用上游返回的原因码;上游未返回时当前实现默认填0。 | 0 |
userSummaryList数据
| 参数名称 | 类型 | 是否必须 | 说明 | 示例 |
|---|---|---|---|---|
| userIntent | String | 是 | 坐席选择的规则标签名称,即用户意向。 | "意向1" |
| userRemark | String | 是 | 坐席填写的小结备注。 | "备注内容" |
| formId | Long | 否 | 小结关联的表单ID。 | 1234567 |
| formName | String | 否 | 小结关联的表单名称。 | "客户信息表" |
| formValueList | Array | 否 | 表单字段值列表,元素结构见formValueList参数说明。 | 详见子结构 |
userSummaryList[].formValueList数据
| 参数名称 | 类型 | 是否必须 | 说明 | 示例 |
|---|---|---|---|---|
| fieldId | String | 是 | 表单字段ID。 | "field001" |
| fieldName | String | 是 | 表单字段名称。 | "客户姓名" |
| componentType | String | 是 | 表单组件类型。 | "input" |
| fieldValue | Any | 是 | 表单字段值,实际JSON类型由表单组件决定,可能为字符串、数字、布尔值、数组或对象。 | "客户A" |
record数据
| 参数名称 | 类型 | 是否必须 | 说明 | 示例 |
|---|---|---|---|---|
| role | string | 是 | 会话角色,分为机器人侧(speech)和客户侧(voice) | "voice" |
| timestamp | long | 是 | 会话时间戳,微秒 | 1603542315800942 |
| contextText | string | 是 | 会话文本 | "您好,这边是千言银行智能客服中心,巴拉巴拉,请问是女士吗?" |
| intent | string | 是 | 意图 | |
| start | string | 是 | 片段开始时间,基于对话开始的相对时间 | "00:00.310" |
| stop | string | 是 | 片段结束时间,基于对话开始的相对时间 | "00:00.310" |
| timeLen | long | 是 | 片段时长,毫秒 | 5500 |
| interrupted | boolean | 是 | 打断标识 | false |
| interruptedTime | string | 是 | 打断时间 (基于对话开始的相对时间) | "00:00.310" |
| silent | boolean | 是 | 静默标识 | false |
| nodeInfo | String | 否 | 节点信息,base64格式 | eyJwcm9jZXNzTmFtZSI6Iua4hea0l+e6v+e0oiIsIm5vZGVOYW1lIjoi6IKv5a6a6IqC54K5X3Vsc3JvMTU5IiwiaW50ZW50Ijoi6IKv5a6a5oSP5Zu+IiwiZW50aXR5IjpbXSwic3lzdGVtRXZlbnQiOiIiLCJmYXEiOiIifQ== |
endTypeReason 列表 具体结束原因映射关系请参考 失败原因映射表
响应参数
| 名称 | 类型 | 备注 |
|---|---|---|
| code | int | http响应码,比如200、400 |
| msg | string | 响应信息,成功为success,失败时为具体原因 |
请求(回调)示例
Javascript
1 {
2 "signature": "088de95fb5fe8fc3c19a452d1c3f0e74744d578a77ca26640cf41197bd36c1cf", // 动态鉴权模式传送:签名
3 "appid": "APP001", // 动态鉴权模式传送:签名 appid
4 "nonce": "a63de7dbff914f61b2169d53d9963806", // 动态鉴权模式传送:参与签名生成的uuid
5 "timestamp": "20260703102050", // 动态鉴权模式传送:签名生成时间
6 "callbackType": 3, // 0-任务呼叫单通电话回调 1-号码组终态回调 2-任务状态变更回调 3-实时呼叫单通电话回调 4-呼入单通电话回调
7 "data": {
8 "sessionId": "201bd45e-a375-47e1-bcee-e5bcd3c6b523", // 电话唯一标识
9 "tenantId": 10363, // 租户id
10 "memberId": 732722324373760, // 号码组id
11 "collectInfo": {// 信息收集, map
12 "hungupnode": "拒绝_首次施压(11)"
13 },
14 "record": [// 会话还原记录
15 {
16 "role": "speech",//角色,现有机器人侧(speech)和客户侧(voice)
17 "timestamp": 1603542315800942,//时间戳,微秒
18 "contextText": "您好,这边是千言银行智能客服中心,巴拉巴拉,请问是女士吗?",//回复文本 **(speech角色下取此字段作为回复文本)**
19 "intent": "",//意图
20 "start": "00:00.310",//片段开始时间(基于对话开始的相对时间)
21 "stop": "00:05.810",//片段结束时间(基于对话开始的相对时间)
22 "timeLen": 5500,//片段时长,毫秒
23 "interrupted": false,//打断标识,未打断
24 "interruptedTime": "",//打断时间 (基于对话开始的相对时间)
25 "silent": false//静默标识
26 "nodeInfo": "eyJwcm9jZXNzTmFtZSI6Iua4hea0l+e6v+e0oiIsIm5vZGVOYW1lIjoi6IKv5a6a6IqC54K5X3Vsc3JvMTU5IiwiaW50ZW50Ijoi6IKv5a6a5oSP5Zu+IiwiZW50aXR5IjpbXSwic3lzdGVtRXZlbnQiOiIiLCJmYXEiOiIifQ=="
27 },
28 {
29 "role": "voice",
30 "timestamp": 1603542324669326,
31 "content": "是的,",// 回复文本 **(voice角色下取此字段作为回复文本)**
32 "context": "",
33 "contextText": "",
34 "audioId": "2020/10/24//20/94cd0dc6-d36f-44fe-a643-8a8154a83371.wav",
35 "sn": "3F480D8F-B09D-4553-80BE-114B7D8B80BA",
36 "intent": "",
37 "start": "00:07.839",
38 "stop": "00:08.960",
39 "timeLen": 1121,
40 "interrupted": false,
41 "interruptedTime": "",
42 "silent": false
43 }
44 ],
45 "intent": "未分类",//意向
46 "callerNum": "07567171348", // 主叫号码
47 "endType": 1, // 接通状态 1-已接通 0-未接通
48 "endTypeReason" : null,
49 "contactUUID": "c1ff838e-c2a4-11eb-a785-fa27000306ed", // 生成通话录音唯一标识
50 "durationTimeLen": 64,// 拨号总时长
51 "ringingTimeLen": 10, // 振铃时长
52 "talkingTimeLen": 5, // 对话时长
53 "startTime": 1635909010000, //呼叫开始时间-Unix时间戳(单位:毫秒)
54 "ringStartTime": 1635909010000,//振铃开始时间
55 "talkingStartTime": 1635909010000,//通话开始时间
56 "endTime": 1635909010000 ,//呼叫结束时间
57 "transResult":1,//转人工结果成功
58 "extensionResult":1,//转分机号成功
59 "extjson":"extJson",
60 "tagExtractInfo":{"是否有意向":"有"}
61 }
返回(回调)示例
Javascript
1{
2 "code": 200,
3 "msg": "success",
4}
评价此篇文章
