1.1 接口说明
云客服系统提供通话记录推送功能(隐私呼叫时,目前只支持推送VOIP场景的通话记录)。云客服系统会请求第三方配置的url,并将通话记录数据以HTTP(POST)的方式推送给第三方系统,并且在请求配置的url时会自动追加type参数来区分推送的是calls(type=0时,推送的是通话记录片段),还是session(type=1时,推送的是通话记录数据信息)。
- 通话记录片段是来电时记录每个坐席处理本次通话的操作信息。比如来电时转接至技能组,技能组中A坐席挂断后转接至B坐席,此时会产生A、B坐席的通话记录片段信息。通话记录片段可能会存在多个,因此推送数据时会有多条。
- 通话记录数据信息是通话结束后记录本次通话的始末信息。
- 三方系统通话记录接收服务返回 code : 200,标记本次记录推送成功。请求返回样例如:{ “code”:200,”data”:null,”msg”:”success”}
注意:
- 为了方便第三方系统对于通话记录数据的处理,云客服提供uin_callcenter_calls、uin_callcenter_sessions数据表结构以及通话记录数据查询的SQL语句示例。详情见本章节说明。
- 通话记录推送数据包含满意度评价信息。
1.2 对接步骤
管理员坐席登陆云客服,点击左下角进入设置页面
第一步:设置 —> 对接 —> 接口对接 —> 添加
第二步:启用添加的通话记录推送接口
1.3 数据类型说明
非必填参数,调用接口时请传递参数名,参数值可为空
假设配置的url为:http://127.0.0.1:8080/call
- 则实际请求时,当type=0,则请求的url为: http://127.0.0.1:8080/call?type=0 请求参数如下:
序号 | 名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
1 | id | String | 是 | 通话Id |
2 | agent_call | JSONObject | 否 | 坐席呼叫信息 |
3 | agent_id | String | 是 | 坐席编号 |
4 | alterting_time | LocalDateTime | 是 | 振铃时间 |
5 | ani | String | 是 | 主叫号码 |
6 | ani_place | String | 是 | 主叫归属地 |
7 | app_id | String | 是 | 应用编号 |
8 | app_type | String | 是 | 应用类型(app:是IVR节点,queue:技能组,callmemory:来电记忆,agent:座席,loginout:登出) |
9 | assigned | Boolean | 是 | 分配状态 false 未分配 true 已分配 |
10 | bussiness_num | String | 否 | 服务号码 |
11 | call_direction | String | 是 | 呼入方向 0 呼入 1 呼出 |
12 | call_in_channel | String | 是 | 呼入类型 |
13 | customer_id | String | 是 | 客户编号 |
14 | dnis | String | 是 | 被叫号码 |
15 | dnis_place | String | 是 | 被叫归属地 |
16 | is_repeat | Boolean | 是 | 是否重复来电 (false 不重复 true 重复) |
17 | is_transfer | Boolean | 是 | 是否转接 (false 不重复 true 重复) |
18 | multi_match | Boolean | 是 | 是否匹配多个客户 (false 否 true 是) |
19 | origin_id | String | 否 | 原归属坐席 |
20 | queue_time | Integer | 是 | 排队时长(秒) |
21 | resp | JSONObject | 否 | 原始报文(通讯平台推送的原始call片段) |
22 | ringing_time | Integer | 否 | 振铃时长 |
23 | service_start_time | LocalDateTime | 是 | 服务开始时间 |
24 | service_stop_time | LocalDateTime | 是 | 服务结束时间 |
25 | service_time | Integer | 是 | 服务时长(秒) |
26 | service_type | String | 是 | 服务类型(IVR: IVR, queue:技能组,agent:标识通话坐席来电业务,loginout:登出,dialout:标识坐席外呼业务) |
27 | session_id | String | 是 | 会话编号 |
28 | skillgroup | String | 否 | 技能组名称 |
29 | skillgroup_id | String | 否 | 技能组编号 |
30 | skip | Boolean | 否 | 是否跳过质检 (false 否 true 是) |
31 | status | Integer | 是 | 状态 (0 未提交 1 已提交录音 2 撤销录音 3 已评分) |
32 | summary | String | 是 | 备注 |
33 | tenant_id | String | 是 | 租户编号 |
34 | qa_tag_id | String | 否 | 服务质量标签 |
35 | service_id | String | 否 | 服务编号 |
36 | satisfied_result | JSONArray | 否 | 满意度信息(“1”非常满意、“2”满意、“3”一般、“4”不满意、”-1”进入满意度未按键、”-2” 未进入满意度) |
37 | app_node_list | JSONObject | 否 | ivr节点数据 |
38 | tags | JSONObject | 否 | 通话标签 |
39 | qa_id | String | 否 | 质检记录编号 |
40 | created_at | LocalDateTime | 是 | 数据创建的时间 |
41 | updated_at | LocalDateTime | 是 | 数据更新的时间 |
42 | bussiness_num_alias | String | 否 | 业务号码的别名 |
IVR节点样例:
{
“rows”:[
{
“id”:”5ba1f420-7f87-451d-9acb-c8b0d01fb045”,
“keys”:[
“3”
],
“command”:”uinOndtmf”,
“recDesc”:”an键3”,
“dtmftime”:”2023-05-08 11:04:18”,
“starttime”:”2023-05-08 11:04:14”
},
{
“id”:”60d5be46-1cac-43a8-853e-43ad718eb53c”,
“command”:”uinPlay”,
“recDesc”:”语音”,
“starttime”:”2023-05-08 11:04:18”
},
{
“id”:”d73aa485-7ac0-4541-b7b6-8fbf7b25f543”,
“command”:”uinTime”,
“recDesc”:”分时”,
“starttime”:”2023-05-08 11:04:19”
}
]
}
command: IVR支持的节点命令枚举值如下
字段 | 说明 |
---|---|
keys | 按键信息,数组格式。只有按键节点才有此值 |
id | 节点id编号 |
recDesc | 节点id描述 |
command | 节点id对应的命令,见command枚举 |
starttime | 节点id命令开始执行的时间点 |
dtmftime | 匹配按键菜单的时间点(离开按键节点的时间点) |
command: IVR支持的节点命令枚举值如下
枚举值 | 说明 |
---|---|
uinSatisfiednode | 满意度节点命令 |
uinSwitch | 条件路由节点命令 |
uinOndtmf | 按键节点命令 |
uinPlay | 播放语音节点命令 |
uinTime | 分时节点命令 |
uinZone | 分区节点命令 |
uinVoicemail | 语音留言节点命令 |
uinGetdata | 数据获取节点命令 |
uinBridgeagent | 转接坐席节点命令 |
uinTransferPSTN | 转接PSTN节点命令 |
uinHangup | 挂机节点命令 |
uinBridgeQueue | 转接技能组 |
- 则实际请求时,当type=1,则请求的url为: http://127.0.0.1:8080/call?type=1 (type=1代表推送的是session)请求参数如下:
非必填参数,调用接口时请传递参数名,参数值可为空
序号 | 名称 | 类型 | 是否必填 | 说明 |
---|---|---|---|---|
1 | id | String | 是 | 会话id,具有唯一性. 对应uin_calls消息中sessionid字段 |
2 | ani | String | 否 | 主叫号码 |
3 | dnis | String | 否 | 被叫号码 |
4 | bussiness_num | String | 否 | 业务号码 |
5 | agentnum | String | 是 | 座席编号 |
6 | tenant_id | String | 是 | 租户的id |
7 | answer_time | LocalDateTime | 是 | 接听的时间 |
8 | stop_time | LocalDateTime | 是 | 呼叫结束的时间 |
9 | hangup_reason | Integer | 是 | 呼叫结果: 4 ivr; 3 已留言; 2 排队放弃; -1 外呼(来电)振铃未接听 ; 1 接听 ; -2 黑名单; 5 外呼失败 |
10 | alterting_time | LocalDateTime | 是 | 访客来电的时间或者发起外呼的时间 |
11 | call_direction | String | 否 | 呼入或者外呼标识 ‘call in’ 或者 ‘call out’ |
12 | satisfaction | String | 是 | 满意度(默认是-2);值范围:1/2/3/4,对应通话详情页面显示值,-2未进入满意度;-1进入满意度未按键 |
13 | record_file | String | 否 | 录音地址(接听的通话才会有录音) |
14 | conference_time | LocalDateTime | 是 | 进入会议室的时间 |
15 | fail_reason | String | 是 | 失败原因 |
16 | manual_satisfy | Integer | 是 | 满意度标识 0 系统 1 坐席 |
17 | resp | JSONObject | 否 | 原始报文(通讯平台推送的原始session片段) |
18 | created_at | LocalDateTime | 是 | 数据创建的时间 |
19 | updated_at | LocalDateTime | 是 | 数据更新的时间 |
20 | early_media_code | String | 是 | 空号类型码 点击查看空号类型码说明详情
|
21 | call_type | String | 否 | 云客服页面发起的外呼ivr 为2 ;语音播报值为4;外呼任务呼叫值为8; 通过接口调用的方式发起外呼IVR为16;预测式外呼为32; |
22 | remark | String | 否 | 自定义扩展业务参数 |
23 | uincall_data | JSONObject | 否 | 内容为json对象,用于记录客户接起后,诸如按键操作等相关记录,报文如下:”uincall_data”: {“last_dtmf”:”3”},代表:客户接通后最后按键号码为3; |
1.4 uin_callcenter_calls 建表SQL示例
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for uin_callcenter_calls
-- ----------------------------
DROP TABLE IF EXISTS `uin_callcenter_calls`;
CREATE TABLE `uin_callcenter_calls` (
`id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '记录编号',
`tenant_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '租户编号',
`agent_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '坐席编号',
`assigned` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '分配状态 0 未分配 1 已分配',
`origin_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '原归属坐席',
`customer_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '客户编号',
`summary` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '备注',
`session_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '会话编号',
`ani` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主叫号码',
`ani_place` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '主叫归属地',
`dnis` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '被叫号码',
`dnis_place` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '被叫归属地',
`app_id` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '应用编号',
`app_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'agent' COMMENT '应用类型',
`service_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '服务编号',
`service_type` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '服务类型',
`service_time` int NOT NULL DEFAULT 0 COMMENT '服务时长(秒)',
`queue_time` int UNSIGNED NOT NULL DEFAULT 0 COMMENT '排队时长(秒)',
`service_start_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '服务开始时间',
`service_stop_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '服务结束时间',
`skillgroup` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '技能组',
`skillgroup_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '技能组编号',
`bussiness_num` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '服务号码',
`alterting_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '振铃时间',
`call_direction` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '呼入方向 0 呼入 1 呼出',
`call_in_channel` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '呼入类型',
`is_transfer` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否转接',
`is_repeat` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否重复来电',
`agent_call` json NULL COMMENT '坐席呼叫信息',
`app_node_list` json NULL COMMENT '节点数据',
`satisfied_result` json NULL COMMENT '满意度信息',
`skip` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否跳过质检',
`tags` json NULL COMMENT '通话标签',
`qa_tag_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '服务质量标签',
`qa_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '质检记录编号',
`status` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '状态 0 未提交 1 已提交录音 2 撤销录音 3 已评分',
`multi_match` tinyint UNSIGNED NOT NULL DEFAULT 0 COMMENT '是否匹配多个客户',
`resp` json NULL COMMENT '原始报文',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`ringing_time` int UNSIGNED NULL DEFAULT 0 COMMENT '振铃时长',
PRIMARY KEY (`id`) USING BTREE,
INDEX `service_type`(`service_type`) USING BTREE,
INDEX `session_id`(`session_id`) USING BTREE,
INDEX `tenant_id`(`tenant_id`) USING BTREE,
INDEX `service_stop_time`(`service_stop_time`) USING BTREE,
INDEX `created_at`(`created_at`) USING BTREE,
INDEX `dnis`(`dnis`) USING BTREE,
INDEX `assigned`(`assigned`) USING BTREE,
INDEX `ani`(`ani`) USING BTREE,
INDEX `service_start_time`(`service_start_time`) USING BTREE,
INDEX `bussiness_num`(`bussiness_num`) USING BTREE,
INDEX `app_type`(`app_type`) USING BTREE,
INDEX `INX_tenant_created`(`tenant_id`, `created_at`) USING BTREE COMMENT '【强制使用此索引 FORCE INDEX】适用于:今日统计',
INDEX `agent_id`(`agent_id`) USING BTREE,
INDEX `INX_agentId_tenantId_created`(`agent_id`, `tenant_id`, `created_at`) USING BTREE,
INDEX `INX_tenantId_appType_serviceStartTime_agentId`(`tenant_id`, `app_type`, `service_start_time`, `agent_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '通话记录表' ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
1.5 uin_callcenter_sessions 建表SQL示例
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for uin_callcenter_sessions
-- ----------------------------
DROP TABLE IF EXISTS `uin_callcenter_sessions`;
CREATE TABLE `uin_callcenter_sessions` (
`oid` bigint NOT NULL AUTO_INCREMENT,
`id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '会话编码',
`tenant_id` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '租户编码',
`agent_num` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '座席工号',
`ani` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '主叫',
`dnis` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '被叫',
`call_direction` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '呼叫类型',
`bussiness_num` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '业务号码',
`alterting_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '振铃时间',
`answer_time` datetime DEFAULT NULL COMMENT '应答时间',
`conference_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '会议时间',
`stop_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '挂机时间',
`hangup_reason` tinyint NOT NULL COMMENT '挂机原因:1有坐席已接听来电(不代表转接的坐席也接听来电);-1振铃未接听来电;-2黑名单导致来电挂断;2排队放弃;3已留言;4IVR;5外呼失败',
`fail_reason` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '失败原因',
`record_file` varchar(500) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '录音文件地址',
`satisfaction` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '满意度',
`manual_satisfy` tinyint NOT NULL DEFAULT 0 COMMENT '满意度标识 0 系统 1 坐席',
`resp` json NOT NULL COMMENT '原始推送数据',
`created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`oid`) USING BTREE,
UNIQUE INDEX `id`(`id`) USING BTREE,
INDEX `tenant_id`(`tenant_id`) USING BTREE,
INDEX `created_at`(`created_at`) USING BTREE,
INDEX `ani`(`ani`) USING BTREE,
INDEX `agent_num`(`agent_num`) USING BTREE,
INDEX `dnis`(`dnis`) USING BTREE,
INDEX `INX_tenant_created_ani_direction`(`tenant_id`, `created_at`, `ani`, `call_direction`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 25033 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '通话会话记录信息表' ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;
1.6 查询通话记录列表数据SQL示例
SELECT
ccc.*
FROM
(
SELECT
cc.id,
cc.bussiness_num,
c.id AS customer_id,
cc.ani,
cc.ani_place,
cc.dnis,
cc.dnis_place,
cc.call_direction,
cc.is_transfer,
cc.alterting_time,
cc.app_type,
cc.service_type,
cc.call_in_channel,
cc.queue_time,
cc.service_time,
cc.service_start_time,
cc.service_stop_time,
cc.agent_call,
cc.assigned,
cc.multi_match,
(
CASE
WHEN c.id IS NULL THEN
( CASE cc.multi_match WHEN TRUE THEN '多个匹配客户' ELSE '未知客户' END ) ELSE IFNULL( c.truename, '未知客户' )
END
) AS truename,
a.agent_name,
a.agent_num,
s.conference_time,
IFNULL( cc.agent_call -> '$.callresult', s.hangup_reason ) AS hangup_reason,
cc.created_at
FROM
(
SELECT
id,
tenant_id,
session_id,
agent_id,
customer_id,
bussiness_num,
ani,
ani_place,
dnis,
dnis_place,
call_direction,
is_transfer,
alterting_time,
app_type,
service_type,
call_in_channel,
queue_time,
service_time,
service_start_time,
service_stop_time,
agent_call,
assigned,
multi_match,
created_at
FROM
uin_callcenter_calls
WHERE
tenant_id = '租户Id'
AND app_type IN ( 'agent', 'app' )
AND service_start_time BETWEEN '2022-03-16 00:00:00' AND '2022-03-22 23:59:59'
) AS cc
LEFT JOIN uin_callcenter_customers c ON cc.customer_id = c.id
AND c.deleted_at = 0
LEFT JOIN uin_callcenter_agents a ON cc.agent_id = a.id
LEFT JOIN uin_callcenter_sessions s ON s.id = cc.session_id
WHERE
cc.tenant_id = '租户Id'
) ccc
ORDER BY
ccc.created_at DESC;
1.7 查询通话记录详情数据SQL示例
SELECT
cc.id,
cc.is_transfer,
cc.session_id,
cc.customer_id,
cc.service_type,
cc.call_in_channel,
cc.app_node_list,
cc.bussiness_num,
cc.alterting_time,
cc.queue_time,
cc.service_time,
cc.service_start_time,
cc.service_stop_time,
cc.ani,
cc.is_repeat,
cc.ani_place,
cc.dnis,
cc.dnis_place,
cc.call_direction,
cc.app_type,
cc.tags,
cc.summary,
IFNULL( cc.agent_call -> '$.callresult', s.hangup_reason ) AS hangup_reason,
s.record_file,
a.agent_name,
a.agent_num,
t.title,
cc.STATUS,
cc.agent_call,
s.satisfaction,
cc.multi_match,
(
CASE
cu.deleted_at
WHEN 1 THEN
'未知客户' ELSE (
CASE
WHEN cu.truename IS NULL THEN
( CASE cc.multi_match WHEN TRUE THEN '多个匹配客户' ELSE '未知客户' END ) ELSE IFNULL( cu.truename, '未知客户' )
END
)
END
) AS customer_name,
cc.ringing_time,
cc.qa_tag_id,
cu.deleted_at AS customer_deleted,
(
CASE
WHEN cc.call_direction = 'call in' THEN
(
SELECT
count( 1 )
FROM
(
SELECT
session_id
FROM
uin_callcenter_calls ww
WHERE
ww.ani = cc.ani
AND ww.bussiness_num = cc.bussiness_num
AND app_type IN ( 'agent', 'app' )
AND created_at <= cc.created_at
AND ww.tenant_id = '租户Id'
GROUP BY
session_id
) AS c
) ELSE NULL
END
) AS call_in_all_num,
(
CASE
WHEN cc.call_direction = 'call in' THEN
(
SELECT
count( 1 )
FROM
(
SELECT
session_id
FROM
uin_callcenter_calls ww
WHERE
ww.ani = cc.ani
AND ww.bussiness_num = cc.bussiness_num
AND app_type IN ( 'agent', 'app' )
AND created_at BETWEEN DATE_FORMAT( CURDATE(), '%Y-%m-%d %H:%i:%s' ) AND cc.created_at
AND ww.tenant_id = '租户Id'
GROUP BY
session_id
) AS c
) ELSE NULL
END
) AS call_in_today_num
FROM
uin_callcenter_calls cc
LEFT JOIN uin_callcenter_sessions s ON cc.session_id = s.id
LEFT JOIN uin_callcenter_agents a ON cc.agent_id = a.id
LEFT JOIN uin_callcenter_qa_tags t ON cc.qa_tag_id = t.id
LEFT JOIN uin_callcenter_customers cu ON cc.customer_id = cu.id
WHERE
cc.id = 'c719fe5e-4502-46bf-c670-9d4d06d*****'
AND cc.tenant_id = '租户Id';