l-dingtalk-stream-sdk-go/card/handler.go

45 lines
1.2 KiB
Go

package card
import (
"context"
"encoding/json"
"gitea.cdlsxd.cn/self-tools/l-dingtalk-stream-sdk-go/payload"
)
type ICardCallbackHandler func(c context.Context, request *CardRequest) (*CardResponse, error)
type DefaultCardCallbackFrameHandler struct {
defaultHandler ICardCallbackHandler
}
func NewDefaultPluginFrameHandler(defaultHandler ICardCallbackHandler) *DefaultCardCallbackFrameHandler {
return &DefaultCardCallbackFrameHandler{
defaultHandler: defaultHandler,
}
}
func (h *DefaultCardCallbackFrameHandler) OnEventReceived(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) {
msgData := &CardRequest{}
err := json.Unmarshal([]byte(df.Data), msgData)
if err != nil {
return nil, err
}
json.Unmarshal([]byte(msgData.Content), &msgData.CardActionData)
if h.defaultHandler == nil {
return payload.NewDataFrameResponse(payload.DataFrameResponseStatusCodeKHandlerNotFound), nil
}
result, err := h.defaultHandler(ctx, msgData)
if err != nil {
return nil, err
}
frameResp := payload.NewSuccessDataFrameResponse()
callbackData := make(map[string]any)
callbackData["response"] = result
if err = frameResp.SetJson(callbackData); err != nil {
return nil, err
}
return frameResp, nil
}