chatbot_handler.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package chatbot
  2. import (
  3. "context"
  4. "encoding/json"
  5. "github.com/open-dingtalk/dingtalk-stream-sdk-go/payload"
  6. )
  7. /**
  8. * @Author linya.jj
  9. * @Date 2023/3/22 18:30
  10. */
  11. type IChatBotMessageHandler func(c context.Context, data *BotCallbackDataModel) ([]byte, error)
  12. type DefaultChatBotFrameHandler struct {
  13. defaultHandler IChatBotMessageHandler
  14. }
  15. func NewDefaultChatBotFrameHandler(defaultHandler IChatBotMessageHandler) *DefaultChatBotFrameHandler {
  16. return &DefaultChatBotFrameHandler{
  17. defaultHandler: defaultHandler,
  18. }
  19. }
  20. func (h *DefaultChatBotFrameHandler) OnEventReceived(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) {
  21. msgData := &BotCallbackDataModel{}
  22. err := json.Unmarshal([]byte(df.Data), msgData)
  23. if err != nil {
  24. return nil, err
  25. }
  26. if h.defaultHandler == nil {
  27. return payload.NewDataFrameResponse(payload.DataFrameResponseStatusCodeKHandlerNotFound), nil
  28. }
  29. data, err := h.defaultHandler(ctx, msgData)
  30. if err != nil {
  31. return nil, err
  32. }
  33. frameResp := payload.NewSuccessDataFrameResponse()
  34. frameResp.SetData(string(data))
  35. return frameResp, nil
  36. }