Explorar el Código

对话界面接口token验证逻辑修改

Zhangbw hace 2 meses
padre
commit
2e6a40ce5c

+ 1 - 1
pom.xml

@@ -89,7 +89,7 @@
             <id>prod</id>
             <properties>
                 <profiles.active>prod</profiles.active>
-                <logging.level>warn</logging.level>
+                <logging.level>info</logging.level>
                 <monitor.username>ruoyi</monitor.username>
                 <monitor.password>123456</monitor.password>
             </properties>

+ 1 - 1
ruoyi-admin/src/main/resources/application.yml

@@ -116,7 +116,7 @@ security:
     - /*/api-docs
     - /*/api-docs/**
     - /warm-flow-ui/config
-    - /talk/config/**
+    - /talk/auth/**
     - /talk/message/stream
 
 # 多租户配置

+ 18 - 20
ruoyi-modules/yp-talk/src/main/java/org/dromara/talk/controller/api/ChatController.java

@@ -8,6 +8,7 @@ import org.dromara.common.core.service.DictService;
 import org.dromara.common.satoken.utils.LoginHelper;
 import org.dromara.talk.domain.bo.TalkAgentBo;
 import org.dromara.talk.domain.bo.TalkSessionBo;
+import org.dromara.talk.domain.dto.MessageStreamRequest;
 import org.dromara.talk.domain.vo.TalkAgentVo;
 import org.dromara.talk.service.IChatService;
 import org.dromara.talk.service.ITalkAgentService;
@@ -205,30 +206,27 @@ public class ChatController {
      * 流式处理用户消息
      * 使用SSE实时推送文本和音频数据
      *
-     * @param request 请求参数,包含:
-     *                - message: 用户消息内容
-     *                - agentId: 客服ID
-     *                - agentGender: 客服性别(不需要用户传递前端做处理)
-     *                - ttsVcnList: TTS发音人列表 (不需要用户传递前端做处理)
-     *                - conversationId: 会话ID
-     *                - isGreeting: 是否为欢迎语
-     *                - requestId: 请求ID
+     * @param request 请求参数
      */
     @PostMapping("/message/stream")
-    public SseEmitter handleMessageStream(@RequestBody Map<String, Object> request) {
-        String userMessage = (String) request.get("message");
-        Long agentId = request.get("agentId") != null ? Long.valueOf(request.get("agentId").toString()) : null;
-        String agentGender = (String) request.get("agentGender");
-        List<Map<String, String>> ttsVcnList = (List<Map<String, String>>) request.get("ttsVcnList");
-        String conversationId = (String) request.get("conversationId");
-        Boolean isGreeting = request.get("isGreeting") != null ? Boolean.valueOf(request.get("isGreeting").toString()) : false;
-        Integer requestId = request.get("requestId") != null ? Integer.valueOf(request.get("requestId").toString()) : null;
-        String customerPhone = (String) request.get("customerPhone");
-
-        log.info("收到流式消息请求: {}, 客服ID: {}, 对话ID: {}, 请求ID: {}, 客户电话: {}", userMessage, agentId, conversationId, requestId, customerPhone);
+    public SseEmitter handleMessageStream(@RequestBody MessageStreamRequest request) {
+        log.info("收到流式消息请求: {}, 客服ID: {}, 对话ID: {}, 请求ID: {}, 客户电话: {}, 类型: {}",
+            request.getMessage(), request.getAgentId(), request.getConversationId(),
+            request.getRequestId(), request.getCustomerPhone(), request.getType());
 
         SseEmitter emitter = new SseEmitter(60000L);
-        chatService.processMessageStream(userMessage, agentId, agentGender, ttsVcnList, conversationId, isGreeting, requestId, customerPhone, emitter);
+        chatService.processMessageStream(
+            request.getMessage(),
+            request.getAgentId(),
+            request.getAgentGender(),
+            request.getTtsVcnList(),
+            request.getConversationId(),
+            request.getIsGreeting(),
+            request.getRequestId(),
+            request.getCustomerPhone(),
+            request.getType(),
+            emitter
+        );
         return emitter;
     }
 

+ 61 - 0
ruoyi-modules/yp-talk/src/main/java/org/dromara/talk/domain/dto/MessageStreamRequest.java

@@ -0,0 +1,61 @@
+package org.dromara.talk.domain.dto;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 流式消息请求
+ *
+ * @author Lion Li
+ * @date 2026-02-07
+ */
+@Data
+public class MessageStreamRequest {
+
+    /**
+     * 用户消息内容
+     */
+    private String message;
+
+    /**
+     * 客服ID
+     */
+    private Long agentId;
+
+    /**
+     * 客服性别
+     */
+    private String agentGender;
+
+    /**
+     * TTS发音人列表
+     */
+    private List<Map<String, String>> ttsVcnList;
+
+    /**
+     * 对话ID
+     */
+    private String conversationId;
+
+    /**
+     * 是否为欢迎语
+     */
+    private Boolean isGreeting;
+
+    /**
+     * 请求ID
+     */
+    private Integer requestId;
+
+    /**
+     * 客户电话号码
+     */
+    private String customerPhone;
+
+    /**
+     * 客户类型:2=ZoomPhone客户
+     */
+    private Integer type;
+}

+ 2 - 1
ruoyi-modules/yp-talk/src/main/java/org/dromara/talk/service/IChatService.java

@@ -21,7 +21,8 @@ public interface IChatService {
      * @param isGreeting 是否为欢迎语
      * @param requestId 请求ID(用于判断是否为最新请求)
      * @param customerPhone 客户电话号码
+     * @param type 客户类型:2=ZoomPhone客户
      * @param emitter SSE发射器
      */
-    void processMessageStream(String userMessage, Long agentId, String agentGender, List<Map<String, String>> ttsVcnList, String conversationId, Boolean isGreeting, Integer requestId, String customerPhone, SseEmitter emitter);
+    void processMessageStream(String userMessage, Long agentId, String agentGender, List<Map<String, String>> ttsVcnList, String conversationId, Boolean isGreeting, Integer requestId, String customerPhone, Integer type, SseEmitter emitter);
 }

+ 1 - 1
ruoyi-modules/yp-talk/src/main/java/org/dromara/talk/service/IDifyService.java

@@ -14,7 +14,7 @@ public interface IDifyService {
     * 流式调用Dify工作流(按句子分段)
     */
    void callWorkflowStream(String userMessage, String agentGender, List<Map<String, String>> ttsVcnList,
-                          TalkAgentVo agentConfig, Long userId, String conversationId, String customerPhone,
+                          TalkAgentVo agentConfig, Long userId, String conversationId, String customerPhone, Integer type,
                           Consumer<String> onTextChunk,
                           SentenceCallback onSentence);
 

+ 2 - 2
ruoyi-modules/yp-talk/src/main/java/org/dromara/talk/service/impl/ChatServiceImpl.java

@@ -80,7 +80,7 @@ public class ChatServiceImpl implements IChatService {
     @Override
     public void processMessageStream(String userMessage, Long agentId, String agentGender,
                                      List<Map<String, String>> ttsVcnList, String conversationId,
-                                     Boolean isGreeting, Integer requestId, String customerPhone, SseEmitter emitter) {
+                                     Boolean isGreeting, Integer requestId, String customerPhone, Integer type, SseEmitter emitter) {
         // 在主线程中获取用户ID,避免在异步线程中访问ThreadLocal
         Long userId = LoginHelper.getUserId();
         if (userId == null) {
@@ -154,7 +154,7 @@ public class ChatServiceImpl implements IChatService {
                     }
                 }
 
-                difyService.callWorkflowStream(userMessage, agentGender, ttsVcnList, agentConfig, finalUserId, difyConversationId, customerPhone,
+                difyService.callWorkflowStream(userMessage, agentGender, ttsVcnList, agentConfig, finalUserId, difyConversationId, customerPhone, type,
                     (textChunk) -> {
                         try {
                             // 累积AI回复文本

+ 4 - 1
ruoyi-modules/yp-talk/src/main/java/org/dromara/talk/service/impl/DifyServiceImpl.java

@@ -148,7 +148,7 @@ public class DifyServiceImpl implements IDifyService {
     public void callWorkflowStream(String userMessage, String agentGender,
                                    java.util.List<java.util.Map<String, String>> ttsVcnList,
                                    org.dromara.talk.domain.vo.TalkAgentVo agentConfig,
-                                   Long userId, String conversationId, String customerPhone,
+                                   Long userId, String conversationId, String customerPhone, Integer type,
                                    java.util.function.Consumer<String> onTextChunk,
                                    IDifyService.SentenceCallback onSentence) {
         try {
@@ -162,6 +162,9 @@ public class DifyServiceImpl implements IDifyService {
             if (customerPhone != null && !customerPhone.isEmpty()) {
                 inputs.put("customerPhone", customerPhone);
             }
+            if (type != null) {
+                inputs.put("type", type);
+            }
 
             JSONObject requestBody = new JSONObject();
             requestBody.set("inputs", inputs);