|
@@ -132,11 +132,11 @@ func KfMsgOrEventHandle(svcCtx *svc.ServiceContext, ct types.EventContent) {
|
|
|
}
|
|
}
|
|
|
//消息额外处理
|
|
//消息额外处理
|
|
|
if cbMsg.Msgtype == types.MsgTypeText {
|
|
if cbMsg.Msgtype == types.MsgTypeText {
|
|
|
- go msgTypeTextHandle(svcCtx, cbMsg)
|
|
|
|
|
|
|
+ msgTypeTextHandle(svcCtx, cbMsg)
|
|
|
}
|
|
}
|
|
|
//事件消息额外处理
|
|
//事件消息额外处理
|
|
|
if cbMsg.Msgtype == types.MsgTypeEvent {
|
|
if cbMsg.Msgtype == types.MsgTypeEvent {
|
|
|
- go msgTypeEventHandle(svcCtx, cbMsg)
|
|
|
|
|
|
|
+ msgTypeEventHandle(svcCtx, cbMsg)
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
go updateCustomerList(svcCtx, userIds)
|
|
go updateCustomerList(svcCtx, userIds)
|
|
@@ -254,6 +254,25 @@ func updateCustomerList(svcCtx *svc.ServiceContext, userIds pie.Strings) {
|
|
|
|
|
|
|
|
// 消息额外处理
|
|
// 消息额外处理
|
|
|
func msgTypeTextHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
func msgTypeTextHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
|
|
+ key := fmt.Sprintf("cb_user_state:%v", msg.ExternalUserid)
|
|
|
|
|
+ v, _ := svcCtx.Redis.Get(key)
|
|
|
|
|
+ if v == "" || v == "4" {
|
|
|
|
|
+ //获取会话状态
|
|
|
|
|
+ err, sessionState := svcCtx.WxApi.GetSessionState(msg.OpenKfid, msg.ExternalUserid)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ logx.Error("GetSessionState fail ", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ _ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
|
|
+ if v == "0" {
|
|
|
|
|
+ //进入会话事件,加入消息流转池
|
|
|
|
|
+ err := svcCtx.WxApi.UpdateSessionState(msg.OpenKfid, msg.ExternalUserid, "", 2)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ logx.Error("UpdateSessionState fail ", err)
|
|
|
|
|
+ }
|
|
|
|
|
+ return
|
|
|
|
|
+ }
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -265,12 +284,15 @@ func msgTypeEventHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
|
|
|
}
|
|
}
|
|
|
eventType := content.GetStringBytes("event_type")
|
|
eventType := content.GetStringBytes("event_type")
|
|
|
switch string(eventType) {
|
|
switch string(eventType) {
|
|
|
- case types.EventTypeEnterSession:
|
|
|
|
|
- //进入会话事件,加入消息流转池
|
|
|
|
|
- err := svcCtx.WxApi.UpdateSessionState(msg.OpenKfid, msg.ExternalUserid, "", 2)
|
|
|
|
|
|
|
+ case types.EventTypeSessionStatusChange:
|
|
|
|
|
+ key := fmt.Sprintf("cb_user_state:%v", msg.ExternalUserid)
|
|
|
|
|
+ //获取会话状态
|
|
|
|
|
+ err, sessionState := svcCtx.WxApi.GetSessionState(msg.OpenKfid, msg.ExternalUserid)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- logx.Error("UpdateSessionState fail ", err)
|
|
|
|
|
|
|
+ logx.Error("GetSessionState fail ", err)
|
|
|
}
|
|
}
|
|
|
|
|
+ _ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
|
|
|
return
|
|
return
|
|
|
|
|
+ case types.EventTypeEnterSession:
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|