From e1df94bb5e98f005a19e33abce69dcbc0153aef6 Mon Sep 17 00:00:00 2001
From: jjxu <428192774@qq.com>
Date: Tue, 17 Jun 2025 14:21:36 +0800
Subject: [PATCH 1/2] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=86=B2=E7=AA=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/service/asChat/robot/readme.md        | 29 ++++++++++++++++++++++-
 pkg/service/asChat/robot/replyAndRuler.go | 14 ++++-------
 pkg/service/asChat/robot/robot.go         |  5 +++-
 3 files changed, 37 insertions(+), 11 deletions(-)

diff --git a/pkg/service/asChat/robot/readme.md b/pkg/service/asChat/robot/readme.md
index 8eacbec..b8a2c56 100644
--- a/pkg/service/asChat/robot/readme.md
+++ b/pkg/service/asChat/robot/readme.md
@@ -1 +1,28 @@
-# robot 聊天机器人
\ No newline at end of file
+# robot 聊天机器人
+
+web端和后端交互式时,增删改查的规则配置是存放在rules对象中的。在数据库中,rules字段是作为json字符串存放的。
+```json
+{
+    "title": "1",
+    "response": "11",
+    "rules": {
+        "keywords": {
+            "enable": true,
+            "content": "什么,为什么,怎么办,不是"
+        },
+        "joinSession": {
+            "enable": true
+        },
+        "noReplyAfter": {
+            "enable": false,
+            "secondDuration": 1
+        }
+    },
+    "status": 1
+}
+```
+如果有新增的规则,直接在rules对象中添加字段即可。然后去 [./rulerList.go](./rulerList.go)  中,增加规则的解析方法。
+目前,在[./rulerList.go](./rulerList.go)定义了三种回复规则的解析方式:
+- keywords :关键字回复
+- joinSession:用户打开聊天窗口后
+- noReplyAfter:客服指定时间没有回复后
diff --git a/pkg/service/asChat/robot/replyAndRuler.go b/pkg/service/asChat/robot/replyAndRuler.go
index dc95126..b881589 100644
--- a/pkg/service/asChat/robot/replyAndRuler.go
+++ b/pkg/service/asChat/robot/replyAndRuler.go
@@ -198,14 +198,11 @@ func NewReplyWhenWaiterNoAction(delaySecond time.Duration) *ReplyWhenWaiterNoAct
 	}
 }
 
-func (k *ReplyWhenWaiterNoAction) Hit(event ws.ListenEventData, robotInfo *accountFiee.ChatUserData) (hit bool, task RobotTask) {
-	if event.Client == nil || event.EventType != ws.EventChatMessage || event.ChatUser == nil {
-		return
-	}
-	//客服的消息不需要处理
-	if event.ChatUser.Role == 2 {
+func (k *ReplyWhenWaiterNoAction) Hit(event ws.ListenEventData, sender *accountFiee.ChatUserData) (hit bool, task RobotTask) {
+	if event.Client == nil || event.EventType != ws.EventChatMessage {
 		return
 	}
+	hit = true
 	task = RobotTask{
 		RunTime: time.Now().Add(k.DelaySecond * time.Second),
 		Run: func(content string, cache *chatCache.ChatCache, Sender *accountFiee.ChatUserData) error {
@@ -239,13 +236,12 @@ func (k *ReplyWhenWaiterNoAction) Hit(event ws.ListenEventData, robotInfo *accou
 			//notice.BuildMessage(newRecord)
 			//_, err = consts.ChatRoom.SendSessionMessage(robotInfo, wsClient.SessionId, ws.NewChatMsgType, notice)
 			//return err
-
-			err = logic.NewMessage(context.Background(), cache, robotInfo, dto.NewMessageRequest{
+			err = logic.NewMessage(context.Background(), cache, sender, dto.NewMessageRequest{
 				Waiter:    true,
 				SessionId: event.Client.SessionId,
 				Message: dto.Message{
 					MsgType:    1,
-					Text:       event.Msg,
+					Text:       content,
 					LocalStamp: time.Now().Unix(),
 				},
 			})
diff --git a/pkg/service/asChat/robot/robot.go b/pkg/service/asChat/robot/robot.go
index 7ac85de..c403407 100644
--- a/pkg/service/asChat/robot/robot.go
+++ b/pkg/service/asChat/robot/robot.go
@@ -147,7 +147,9 @@ func (r *Robot) Run() {
 					go func() {
 						err := task.Run(task.Response, r.cache, task.ChatUser)
 						if err != nil {
-							log.Printf("聊天机器人[%d]回复消息失败:%v", r.Info.ID, err)
+							log.Printf("聊天机器人[%d]延时回复消息失败:%v", r.Info.ID, err)
+						} else {
+							log.Printf("聊天机器人[%d]延时回复消息成功", r.Info.ID)
 						}
 					}()
 				} else {
@@ -170,6 +172,7 @@ func (r *Robot) Run() {
 							log.Printf("robot 执行任务失败:%v\n", err)
 						}
 					} else {
+						ruleResponse := ruleResponse
 						task.Response = ruleResponse.Response
 						r.RegisterDelayTask(task)
 

From 1fc1ea9285f0dddc515c2b1d05266a1e5f4e23a7 Mon Sep 17 00:00:00 2001
From: jjxu <428192774@qq.com>
Date: Tue, 17 Jun 2025 14:26:15 +0800
Subject: [PATCH 2/2] Update replyAndRuler.go

---
 pkg/service/asChat/robot/replyAndRuler.go | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/pkg/service/asChat/robot/replyAndRuler.go b/pkg/service/asChat/robot/replyAndRuler.go
index b881589..3f22ffe 100644
--- a/pkg/service/asChat/robot/replyAndRuler.go
+++ b/pkg/service/asChat/robot/replyAndRuler.go
@@ -202,6 +202,10 @@ func (k *ReplyWhenWaiterNoAction) Hit(event ws.ListenEventData, sender *accountF
 	if event.Client == nil || event.EventType != ws.EventChatMessage {
 		return
 	}
+	//客服的消息不需要处理
+	if event.ChatUser.Role == 2 {
+		return
+	}
 	hit = true
 	task = RobotTask{
 		RunTime: time.Now().Add(k.DelaySecond * time.Second),