mirror of
https://github.com/openimsdk/open-im-server.git
synced 2026-09-04 22:53:17 +08:00
* feat: afterMsgSaveDB webhook fix(config): add default webhook event filters fix(core): handle group mentions and webhook enqueue errors Use group IDs when filtering group-message attention callbacks, and report failures when asynchronous webhook tasks cannot be queued or posted. feat(webhook): add standalone mock webhook server CLI test(webhook): add mock server and test suite for all callback commands feat(msgtransfer): trigger afterMsgSaveDB webhook when message saved to DB feat(config): add afterMsgSaveDB webhook configuration feat(callbackstruct): add CallbackAfterMsgSaveDB command and request structs * refactor(core): simplify asynchronous webhook enqueueing
74 lines
2.2 KiB
Go
74 lines
2.2 KiB
Go
package msgtransfer
|
|
|
|
import (
|
|
"context"
|
|
|
|
"google.golang.org/protobuf/proto"
|
|
|
|
"github.com/openimsdk/open-im-server/v3/pkg/common/config"
|
|
"github.com/openimsdk/open-im-server/v3/pkg/common/webhook"
|
|
"github.com/openimsdk/protocol/constant"
|
|
"github.com/openimsdk/protocol/sdkws"
|
|
"github.com/openimsdk/tools/mcontext"
|
|
|
|
cbapi "github.com/openimsdk/open-im-server/v3/pkg/callbackstruct"
|
|
)
|
|
|
|
func toCommonCallback(ctx context.Context, msg *sdkws.MsgData, command string) cbapi.CommonCallbackReq {
|
|
return cbapi.CommonCallbackReq{
|
|
SendID: msg.SendID,
|
|
ServerMsgID: msg.ServerMsgID,
|
|
CallbackCommand: command,
|
|
ClientMsgID: msg.ClientMsgID,
|
|
OperationID: mcontext.GetOperationID(ctx),
|
|
SenderPlatformID: msg.SenderPlatformID,
|
|
SenderNickname: msg.SenderNickname,
|
|
SessionType: msg.SessionType,
|
|
MsgFrom: msg.MsgFrom,
|
|
ContentType: msg.ContentType,
|
|
Status: msg.Status,
|
|
SendTime: msg.SendTime,
|
|
CreateTime: msg.CreateTime,
|
|
AtUserIDList: msg.AtUserIDList,
|
|
SenderFaceURL: msg.SenderFaceURL,
|
|
Content: GetContent(msg),
|
|
Seq: uint32(msg.Seq),
|
|
Ex: msg.Ex,
|
|
}
|
|
}
|
|
|
|
func GetContent(msg *sdkws.MsgData) string {
|
|
if msg.ContentType >= constant.NotificationBegin && msg.ContentType <= constant.NotificationEnd {
|
|
var tips sdkws.TipsComm
|
|
_ = proto.Unmarshal(msg.Content, &tips)
|
|
content := tips.JsonDetail
|
|
return content
|
|
} else {
|
|
return string(msg.Content)
|
|
}
|
|
}
|
|
|
|
func (mc *OnlineHistoryMongoConsumerHandler) webhookAfterMsgSaveDB(ctx context.Context, after *config.AfterConfig, msg *sdkws.MsgData) {
|
|
target := msg.RecvID
|
|
if msg.SessionType == constant.ReadGroupChatType {
|
|
target = msg.GroupID
|
|
}
|
|
if !webhook.FilterAfterMsg(msg, after, target) {
|
|
return
|
|
}
|
|
|
|
cbReq := &cbapi.CallbackAfterMsgSaveDBReq{
|
|
CommonCallbackReq: toCommonCallback(ctx, msg, cbapi.CallbackAfterMsgSaveDBCommand),
|
|
}
|
|
|
|
switch msg.SessionType {
|
|
case constant.SingleChatType, constant.NotificationChatType:
|
|
cbReq.RecvID = msg.RecvID
|
|
case constant.ReadGroupChatType:
|
|
cbReq.GroupID = msg.GroupID
|
|
default:
|
|
}
|
|
|
|
mc.webhookClient.AsyncPost(ctx, cbReq.GetCallbackCommand(), cbReq, &cbapi.CallbackAfterMsgSaveDBResp{}, after)
|
|
}
|