diff --git a/config/config.yaml b/config/config.yaml index c67b5bc11..e3e00d3c2 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -369,7 +369,6 @@ callback: timeout: 5 failedContinue: true - ##TODO CALLBACK/ beforeInviteUserToGroup: enable: true timeout: 5 diff --git a/deployments/templates/openim.yaml b/deployments/templates/openim.yaml index d050315c7..774701710 100644 --- a/deployments/templates/openim.yaml +++ b/deployments/templates/openim.yaml @@ -312,7 +312,7 @@ iosPush: # Timeout in seconds # Whether to continue execution if callback fails callback: - url: "http://125.124.195.201:8080/sdkName/callbackBeforeInviteJoinGroupCommand" + url: "http://125.124.195.201:18889/sdkName/callbackBeforeInviteJoinGroupCommand" beforeSendSingleMsg: enable: false timeout: 5 @@ -376,11 +376,35 @@ callback: enable: false timeout: 5 failedContinue: true - ##TODO CALLBACK/ + afterGroupMsgRead: + enable: true + timeout: 5 + failedContinue: true + afterGroupMsgRevoke: + enable: false + timeout: 5 + failedContinue: true + afterJoinGroup: + enable: false + timeout: 5 + failedContinue: true beforeInviteUserToGroup: + enable: false + timeout: 5 + failedContinue: true + ##TODO CALLBACK + joinGroupAfter: enable: true timeout: 5 failedContinue: true + setGroupInfoAfter: + enable: false + timeout: 5 + failedContinue: true + setGroupInfoBefore: + enable: false + timeout: 5 + failedContinue: true ###################### Prometheus ###################### # Prometheus configuration for various services # The number of Prometheus ports per service needs to correspond to rpcPort diff --git a/go.mod b/go.mod index e7d9097d2..48217d09a 100644 --- a/go.mod +++ b/go.mod @@ -38,7 +38,7 @@ require github.com/google/uuid v1.3.1 require ( github.com/IBM/sarama v1.41.3 github.com/OpenIMSDK/protocol v0.0.31 - github.com/OpenIMSDK/tools v0.0.16 + github.com/OpenIMSDK/tools v0.0.17 github.com/aliyun/aliyun-oss-go-sdk v2.2.9+incompatible github.com/go-redis/redis v6.15.9+incompatible github.com/go-sql-driver/mysql v1.7.1 diff --git a/go.sum b/go.sum index b1ee37912..0a13abad2 100644 --- a/go.sum +++ b/go.sum @@ -20,8 +20,8 @@ github.com/IBM/sarama v1.41.3 h1:MWBEJ12vHC8coMjdEXFq/6ftO6DUZnQlFYcxtOJFa7c= github.com/IBM/sarama v1.41.3/go.mod h1:Xxho9HkHd4K/MDUo/T/sOqwtX/17D33++E9Wib6hUdQ= github.com/OpenIMSDK/protocol v0.0.31 h1:ax43x9aqA6EKNXNukS5MT5BSTqkUmwO4uTvbJLtzCgE= github.com/OpenIMSDK/protocol v0.0.31/go.mod h1:F25dFrwrIx3lkNoiuf6FkCfxuwf8L4Z8UIsdTHP/r0Y= -github.com/OpenIMSDK/tools v0.0.16 h1:te/GIq2imCMsrRPgU9OObYKbzZ3rT08Lih/o+3QFIz0= -github.com/OpenIMSDK/tools v0.0.16/go.mod h1:eg+q4A34Qmu73xkY0mt37FHGMCMfC6CtmOnm0kFEGFI= +github.com/OpenIMSDK/tools v0.0.17 h1:1E1HUOL2W09YUHBb4wBwrXoTSZm5ONVwLxlEX1GhlKw= +github.com/OpenIMSDK/tools v0.0.17/go.mod h1:eg+q4A34Qmu73xkY0mt37FHGMCMfC6CtmOnm0kFEGFI= github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= diff --git a/internal/rpc/group/callback.go b/internal/rpc/group/callback.go index 00707e3a4..382d1e8dd 100644 --- a/internal/rpc/group/callback.go +++ b/internal/rpc/group/callback.go @@ -171,7 +171,6 @@ func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMe return nil } -// TODO CALLBACK func CallbackBeforeInviteUserToGroup(ctx context.Context, req *group.InviteUserToGroupReq) (err error) { if !config.Config.Callback.CallbackBeforeInviteUserToGroup.Enable { return nil @@ -183,7 +182,7 @@ func CallbackBeforeInviteUserToGroup(ctx context.Context, req *group.InviteUserT GroupID: req.GroupID, Reason: req.Reason, InvitedUserIDs: req.InvitedUserIDs, - EventTime: time.Now().UnixNano() / int64(time.Millisecond), // Event trigger timestamp in milliseconds + EventTime: time.Now().Unix(), } resp := &callbackstruct.CallbackBeforeInviteUserToGroupResp{} @@ -203,6 +202,32 @@ func CallbackBeforeInviteUserToGroup(ctx context.Context, req *group.InviteUserT // Handle the scenario where certain members are refused // You might want to update the req.Members list or handle it as per your business logic } + utils.StructFieldNotNilReplace(req, resp) + + return nil +} +func CallbackAfterJoinGroup(ctx context.Context, req *group.JoinGroupReq) error { + if !config.Config.Callback.CallbackAfterJoinGroup.Enable { + return nil + } + callbackReq := &callbackstruct.CallbackAfterJoinGroupReq{ + CallbackCommand: callbackstruct.CallbackAfterJoinGroupCommand, + OperationID: mcontext.GetOperationID(ctx), + GroupID: req.GroupID, + ReqMessage: req.ReqMessage, + JoinSource: req.JoinSource, + InviterUserID: req.InviterUserID, + EventTime: time.Now().Unix(), + } + resp := &callbackstruct.CallbackAfterJoinGroupResp{} + if err := http.CallBackPostReturn(ctx, config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackAfterJoinGroup); err != nil { + if err == errs.ErrCallbackContinue { + return nil + } + return err + } return nil } + +// TODO CALLBACK diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index ebf908af2..4f79ba3fe 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -387,7 +387,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbgroup.Invite } groupMember = groupMembers[0] } - //TODO CALLBACK + if err := CallbackBeforeInviteUserToGroup(ctx, req); err != nil { return nil, err } @@ -807,6 +807,7 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbgroup case constant.GroupResponseRefuse: s.Notification.GroupApplicationRejectedNotification(ctx, req) } + return &pbgroup.GroupApplicationResponseResp{}, nil } @@ -855,6 +856,10 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbgroup.JoinGroupReq) return nil, err } s.Notification.MemberEnterNotification(ctx, req.GroupID, req.InviterUserID) + //TODO CALLBACK1 + if err = CallbackAfterJoinGroup(ctx, req); err != nil { + return nil, err + } return resp, nil } groupRequest := relationtb.GroupRequestModel{ diff --git a/pkg/callbackstruct/common.go b/pkg/callbackstruct/common.go index ef84d52b9..b32d7a0f7 100644 --- a/pkg/callbackstruct/common.go +++ b/pkg/callbackstruct/common.go @@ -55,6 +55,7 @@ type CommonCallbackResp struct { ErrCode int32 `json:"errCode"` ErrMsg string `json:"errMsg"` ErrDlt string `json:"errDlt"` + NextCode string `json:"nextCode"` } func (c CommonCallbackResp) Parse() error { diff --git a/pkg/callbackstruct/constant.go b/pkg/callbackstruct/constant.go index 69ebbeb1a..80427bde3 100644 --- a/pkg/callbackstruct/constant.go +++ b/pkg/callbackstruct/constant.go @@ -1,3 +1,8 @@ package callbackstruct const CallbackBeforeInviteJoinGroupCommand = "CallbackBeforeInviteJoinGroupCommand" + +// TODO CALLBACK +const CallbackAfterJoinGroupCommand = "CallbackAfterJoinGroupCommand" +const CallbackAfterSetGroupInfoCommand = "CallbackAfterSetGroupInfoCommand" +const CallbackBeforeSetGroupInfoCommand = "CallbackBeforeSetGroupInfoCommand" diff --git a/pkg/callbackstruct/group.go b/pkg/callbackstruct/group.go index a562cda29..2ab2fddaf 100644 --- a/pkg/callbackstruct/group.go +++ b/pkg/callbackstruct/group.go @@ -87,7 +87,6 @@ type CallbackBeforeSetGroupMemberInfoResp struct { RoleLevel *int32 `json:"roleLevel"` } -// TODO CALLBACK 2 type CallbackBeforeInviteUserToGroupReq struct { CallbackCommand `json:"callbackCommand"` OperationID string `json:"operationID"` @@ -100,3 +99,18 @@ type CallbackBeforeInviteUserToGroupResp struct { CommonCallbackResp RefusedMembersAccount []string `json:"refusedMembersAccount,omitempty"` // Optional field to list members whose invitation is refused. } + +// TODO CALLBACK 2 + +type CallbackAfterJoinGroupReq struct { + CallbackCommand `json:"callbackCommand"` + OperationID string `json:"operationID"` + GroupID string `json:"groupID"` + ReqMessage string `json:"reqMessage"` + JoinSource int32 `json:"joinSource"` + InviterUserID string `json:"string"` + EventTime int64 `json:"eventTime"` +} +type CallbackAfterJoinGroupResp struct { + CommonCallbackResp +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 12e6f60ed..0e81c150d 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -265,6 +265,9 @@ type configStruct struct { CallbackBeforeSetGroupMemberInfo CallBackConfig `yaml:"beforeSetGroupMemberInfo"` //TODO CALLBACK/ CallbackBeforeInviteUserToGroup CallBackConfig `yaml:"beforeInviteUserToGroup"` + CallbackAfterJoinGroup CallBackConfig `yaml:"joinGroupAfter"` + CallbackAfterSetGroupInfo CallBackConfig `yaml:"setGroupInfoAfter"` + CallbackBeforeSetGroupInfo CallBackConfig `yaml:"setGroupInfoBefore"` } `yaml:"callback"` Prometheus struct {