如何按配对规则排序消息列表以计算客服聊天管理员响应时长
客服聊天管理员响应时长配对实现方案
实现逻辑
你从API获取的聊天数据本身已经按发送时间升序排列,直接按如下规则遍历即可完成配对:
- 初始化两个临时变量:
user_first_ts用于存储当前待回复的用户首条消息时间,初始为None;waiting_reply用于标记当前是否存在用户待回复的提问,初始为False - 逐条遍历聊天消息:
- 若当前消息发送方为User:
- 若
waiting_reply为False,说明这是新一批用户提问的首条消息,记录当前消息时间到user_first_ts,将waiting_reply设为True - 若
waiting_reply为True,属于用户连续发送的多条消息,直接跳过即可
- 若
- 若当前消息发送方为Admin:
- 若
waiting_reply为True,说明这是对应当前用户批次的首条回复,此时即可配对user_first_ts和当前管理员消息时间,计算两者的时间差作为响应时长,随后将waiting_reply设为False - 若
waiting_reply为False,属于管理员后续连续发送的补充消息,直接跳过即可
- 若
- 若当前消息发送方为User:
- 遍历完成后若
waiting_reply仍为True,说明最后一条用户消息未收到管理员回复,单独标注即可
代码实现(Python)
from datetime import datetime # 原始聊天数据 chat_data = [ ['User', '2021-10-13 11:54:38', "message"], ['User', '2021-10-13 11:55:33', "message"], ['Admin', '2021-10-13 11:56:14', "message"], ['Admin', '2021-10-13 12:07:58', "message"], ['User', '2021-10-13 12:25:55', "message"], ['Admin', '2021-10-13 12:26:30', "message"], ['User', '2021-10-13 12:57:38', "message"], ['Admin', '2021-10-13 12:58:11', "message"], ['Admin', '2021-10-13 13:05:45', "message"], ['User', '2021-10-13 13:21:59', "message"] ] # 存储配对结果 result = [] user_first_ts = None waiting_reply = False time_format = "%Y-%m-%d %H:%M:%S" for msg in chat_data: sender, ts_str, content = msg if sender == 'User': if not waiting_reply: user_first_ts = datetime.strptime(ts_str, time_format) waiting_reply = True elif sender == 'Admin': if waiting_reply: admin_reply_ts = datetime.strptime(ts_str, time_format) response_seconds = (admin_reply_ts - user_first_ts).total_seconds() result.append({ "用户首条消息时间": user_first_ts.strftime(time_format), "管理员首条回复时间": admin_reply_ts.strftime(time_format), "响应时长(秒)": int(response_seconds) }) waiting_reply = False # 处理未回复的用户消息 if waiting_reply: result.append({ "用户首条消息时间": user_first_ts.strftime(time_format), "管理员首条回复时间": "无回复", "响应时长(秒)": None }) # 输出结果 for item in result: print(item)
运行结果
{'用户首条消息时间': '2021-10-13 11:54:38', '管理员首条回复时间': '2021-10-13 11:56:14', '响应时长(秒)': 96} {'用户首条消息时间': '2021-10-13 12:25:55', '管理员首条回复时间': '2021-10-13 12:26:30', '响应时长(秒)': 35} {'用户首条消息时间': '2021-10-13 12:57:38', '管理员首条回复时间': '2021-10-13 12:58:11', '响应时长(秒)': 33} {'用户首条消息时间': '2021-10-13 13:21:59', '管理员首条回复时间': '无回复', '响应时长(秒)': None}
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

