@@ -21,6 +21,7 @@ import (
2121 "github.com/beego/beego/logs"
2222 "github.com/casibase/casibase/model"
2323 "github.com/casibase/casibase/object"
24+ "github.com/casibase/casibase/util"
2425 "github.com/workweixin/weworkapi_golang/json_callback/wxbizjsonmsgcrypt"
2526)
2627
@@ -35,7 +36,6 @@ func (c *ApiController) WecomBotVerifyUrl() {
3536 timestamp := c .GetString ("timestamp" )
3637 nonce := c .GetString ("nonce" )
3738 echoStr := c .GetString ("echostr" )
38- logs .Debug ("botID: %s, msgSignature: %s, timestamp: %s, nonce: %s, echoStr: %s" , botId , msgSignature , timestamp , nonce , echoStr )
3939
4040 token , encodingAESKey , err := object .GetWecomBotTokenAndKey (botId )
4141 if err != nil {
@@ -51,7 +51,6 @@ func (c *ApiController) WecomBotVerifyUrl() {
5151 return
5252 }
5353
54- logs .Debug ("[WechatWork Bot] URL verified for botID: %s\n " , botId )
5554 c .Ctx .ResponseWriter .Write (result )
5655}
5756
@@ -90,14 +89,12 @@ func (c *ApiController) WecomBotHandleMessage() {
9089 return
9190 }
9291
93- logs .Debug ("[WechatWork Bot] Received message, botID: %s, msgtype: %s, msgid: %s\n " , botId , message .MsgType , message .MsgId )
94-
9592 var responseMsg string
9693 switch message .MsgType {
97- case "text" :
94+ case "text" , "stream" :
9895 responseMsg , cryptErr = c .handleTextMessage (& message , wxcpt , nonce , timestamp )
9996 default :
100- logs .Debug ("[WechatWork Bot] Unsupported message type: %s\n " , message .MsgType )
97+ logs .Error ("[WechatWork Bot] Unsupported message type: %s\n " , message .MsgType )
10198 c .Ctx .ResponseWriter .Write ([]byte ("success" ))
10299 return
103100 }
@@ -112,24 +109,40 @@ func (c *ApiController) WecomBotHandleMessage() {
112109}
113110
114111func (c * ApiController ) handleTextMessage (message * object.WecomBotMessage , wxcpt * wxbizjsonmsgcrypt.WXBizMsgCrypt , nonce , timestamp string ) (string , * wxbizjsonmsgcrypt.CryptError ) {
115- if message .Text == nil {
116- return "" , wxbizjsonmsgcrypt .NewCryptError (wxbizjsonmsgcrypt .ParseJsonError , "text content is empty" )
117- }
118-
119- content := message .Text .Content
120- logs .Debug ("[WechatWork Bot] Text message from %s: %s\n " , message .From .UserId , content )
121-
122- store , err := object .GetDefaultStore ("admin" )
123- if err != nil {
124- return "" , wxbizjsonmsgcrypt .NewCryptError (wxbizjsonmsgcrypt .IllegalBuffer , fmt .Sprintf ("get default store error: %v" , err ))
125- }
126- answer , err := sendMessage (store , content )
127- if err != nil {
128- return "" , wxbizjsonmsgcrypt .NewCryptError (wxbizjsonmsgcrypt .IllegalBuffer , fmt .Sprintf ("send message error: %v" , err ))
129- }
130- logs .Debug ("[WechatWork Bot] AI response: %s\n " , answer )
131-
132- resp , err := object .MakeTextResponse (answer )
112+ content := ""
113+ if message .Text != nil {
114+ content = message .Text .Content
115+ }
116+
117+ var streamId string
118+ if message .Stream != nil && message .Stream .Id != "" {
119+ streamId = message .Stream .Id
120+ } else {
121+ streamId = util .GenerateId ()
122+ }
123+
124+ answer := ""
125+ ans , ok := object .WecomBotMessageCache [streamId ]
126+ if ! ok {
127+ object .WecomBotMessageCache [streamId ] = ""
128+ go func () {
129+ store , err := object .GetDefaultStore ("admin" )
130+ if err != nil {
131+ return
132+ }
133+ response , _ := sendMessage (store , content )
134+ if err != nil {
135+ delete (object .WecomBotMessageCache , streamId )
136+ return
137+ }
138+ object .WecomBotMessageCache [streamId ] = response
139+ }()
140+ } else if ans != "" {
141+ answer = ans
142+ delete (object .WecomBotMessageCache , streamId )
143+ }
144+
145+ resp , err := object .MakeMsgResponse (answer , streamId )
133146 if err != nil {
134147 return "" , wxbizjsonmsgcrypt .NewCryptError (wxbizjsonmsgcrypt .GenJsonError , err .Error ())
135148 }
0 commit comments