在上一部分,我们实现了机器人能够从群聊中识别提问,并将问题转发到指定客服窗口。本篇将继续深入,解决 客服如何通过群聊机器人回复客户,并将消息私聊反馈给客户 的问题。我们还会进一步优化系统功能,让整个客服系统更加智能化。
推荐正在找工作的朋友们:
就业指导 或 面试指导 (不是机构)
公众号:Java直达Offer
微信:

第四篇:实现客服通过机器人回复客户
要实现这一功能,我们需要在机器人中增加以下逻辑:
- 记录客户和问题的映射关系,方便客服回复时定位到客户。
- 识别客服的回复,并将其私聊发送给对应客户。
- 确保消息格式清晰,避免混淆。
1. 记录客户与问题的映射关系
当机器人接收到客户问题并转发给客服时,需要保存一个映射,记录客户的 Chat ID 和问题内容。可以通过一个 Map 数据结构来完成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import java.util.concurrent.ConcurrentHashMap;
private final ConcurrentHashMap<Long, Long> customerQuestionMap = new ConcurrentHashMap<>();
@Override public void onUpdateReceived(Update update) { if (update.hasMessage() && update.getMessage().hasText()) { String messageText = update.getMessage().getText(); Long chatId = update.getMessage().getChatId();
if (update.getMessage().isGroupMessage() || update.getMessage().isSuperGroupMessage()) { if (messageText.contains("@" + BOT_USERNAME)) { String question = messageText.replace("@" + BOT_USERNAME, "").trim();
customerQuestionMap.put(chatId, update.getMessage().getFrom().getId());
forwardToCustomerService(chatId, question); } } } }
|
此处的 customerQuestionMap 保存了客户的 Chat ID 和与之对应的问题。我们将在客服回复时利用此数据。
2. 识别客服回复
当客服在群聊中回复客户问题时,需要机器人能够识别哪些消息是针对客户的回复,并将其私聊发送给客户。常见的方式是让客服通过 @客户 的形式明确回复。
实现代码
更新 onUpdateReceived 方法,增加对客服回复的识别和处理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| @Override public void onUpdateReceived(Update update) { if (update.hasMessage() && update.getMessage().hasText()) { String messageText = update.getMessage().getText(); Long chatId = update.getMessage().getChatId();
if (update.getMessage().isGroupMessage() || update.getMessage().isSuperGroupMessage()) { if (messageText.startsWith("@")) { Long customerChatId = extractCustomerIdFromMessage(messageText);
String replyContent = extractReplyContent(messageText);
sendReplyToCustomer(customerChatId, replyContent); } } } }
private Long extractCustomerIdFromMessage(String messageText) { String[] parts = messageText.split(" ", 2); if (parts[0].startsWith("@客户")) { return Long.parseLong(parts[0].replace("@客户", "")); } return null; }
private String extractReplyContent(String messageText) { String[] parts = messageText.split(" ", 2); return parts.length > 1 ? parts[1] : "没有回复内容"; }
private void sendReplyToCustomer(Long customerChatId, String replyContent) { SendMessage message = new SendMessage(); message.setChatId(customerChatId); message.setText("客服回复您: " + replyContent);
try { execute(message); } catch (TelegramApiException e) { e.printStackTrace(); } }
|
流程:
- 客服在群聊中回复客户时,通过 @客户12345 内容 的格式,明确指定客户。
- 机器人解析出客户 Chat ID 和回复内容。
- 使用 SendMessage 将回复内容私聊发送给客户。
3.增强消息格式与用户体验
为了提升系统的易用性,可以为客服提供更方便的格式,例如直接引用客户提问或加上标记。
优化消息显示
当客户提问时,机器人转发问题时可以加上问题编号或上下文,方便客服操作。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| private void forwardToCustomerService(Long chatId, String question) { Long customerServiceChatId = 123456789L;
String forwardMessage = "客户问题:\n" + "客户 ID: " + chatId + "\n" + "问题: " + question + "\n\n" + "请使用 @客户" + chatId + " 的格式回复客户";
SendMessage message = new SendMessage(); message.setChatId(customerServiceChatId); message.setText(forwardMessage);
try { execute(message); } catch (TelegramApiException e) { e.printStackTrace(); } }
|
通过这种方式,客服能够快速找到问题的上下文。
第五篇:支持离线消息与多客服功能
在上面实现的基础功能之上,我们可以进一步优化,支持以下功能:
离线消息:当客服或客户不在线时,机器人能够缓存消息并在双方上线后通知。
多客服支持:如果有多个客服在同一个群中工作,系统需要分配任务并避免冲突。
1. 实现离线消息
使用 Redis 或数据库存储客户与客服之间的消息记录,确保离线消息能够在稍后交付。
存储消息逻辑示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| private final ConcurrentHashMap<Long, List<String>> offlineMessages = new ConcurrentHashMap<>();
private void storeOfflineMessage(Long customerChatId, String message) { offlineMessages.computeIfAbsent(customerChatId, k -> new ArrayList<>()).add(message); }
private void sendOfflineMessages(Long customerChatId) { List<String> messages = offlineMessages.getOrDefault(customerChatId, Collections.emptyList()); for (String message : messages) { sendReplyToCustomer(customerChatId, message); } offlineMessages.remove(customerChatId); }
|
离线消息发送触发时机:
- 当客户再次发送消息时,机器人可以检查是否存在未读离线消息并一并发送。
2. 多客服分配
如果多个客服同时在线,可以实现一个简单的任务分配机制。例如:
我们将在后续的博客中详细实现多客服系统,敬请期待!
本篇内容覆盖了 群聊客服系统中最核心的实现:通过机器人完成提问转发和回复私聊。在下一篇中,我们将继续扩展更多高级功能,敬请期待!