增加stream插件消息处理逻辑和example

This commit is contained in:
weiming wu 2023-08-10 15:38:27 +08:00
parent b46abaf516
commit 8e2b1452b3
3 changed files with 8 additions and 8 deletions

View File

@ -29,7 +29,7 @@ func OnChatBotMessageReceived(ctx context.Context, data *chatbot.BotCallbackData
} }
// 简单的插件处理实现 // 简单的插件处理实现
func OnPluginMessageReceived(ctx context.Context, message *plugin.DingTalkPluginMessage) (interface{}, error) { func OnPluginMessageReceived(ctx context.Context, message *plugin.PluginMessage) (interface{}, error) {
//可以根据message中的PluginId、PluginVersion、AbilityKey路由到具体一个能力 //可以根据message中的PluginId、PluginVersion、AbilityKey路由到具体一个能力
if message.AbilityKey == "echo" { if message.AbilityKey == "echo" {
echoRequest := &EchoRequest{} echoRequest := &EchoRequest{}

View File

@ -6,7 +6,7 @@ import (
"reflect" "reflect"
) )
type DingTalkPluginMessage struct { type PluginMessage struct {
PluginId string `json:"pluginId"` PluginId string `json:"pluginId"`
PluginVersion string `json:"pluginVersion"` PluginVersion string `json:"pluginVersion"`
AbilityKey string `json:"abilityKey"` AbilityKey string `json:"abilityKey"`
@ -15,7 +15,7 @@ type DingTalkPluginMessage struct {
} }
// 用于将数据转换成插件的请求参数 // 用于将数据转换成插件的请求参数
func (req *DingTalkPluginMessage) ParseData(model interface{}) (err error) { func (req *PluginMessage) ParseData(model interface{}) (err error) {
defer func() { defer func() {
if e := recover(); e != nil { if e := recover(); e != nil {
err = errors.New(fmt.Sprintf("parse data error: %v", e)) err = errors.New(fmt.Sprintf("parse data error: %v", e))
@ -36,7 +36,7 @@ func (req *DingTalkPluginMessage) ParseData(model interface{}) (err error) {
return nil return nil
} }
type DingTalkPluginResponse struct { type PluginResponse struct {
Result interface{} `json:"result"` Result interface{} `json:"result"`
RequestId string `json:"requestId"` RequestId string `json:"requestId"`
} }

View File

@ -10,7 +10,7 @@ type CallbackResponse struct {
Response interface{} `json:"response"` Response interface{} `json:"response"`
} }
type IPluginMessageHandler func(c context.Context, data *DingTalkPluginMessage) (interface{}, error) type IPluginMessageHandler func(c context.Context, data *PluginMessage) (interface{}, error)
type DefaultPluginFrameHandler struct { type DefaultPluginFrameHandler struct {
defaultHandler IPluginMessageHandler defaultHandler IPluginMessageHandler
@ -23,7 +23,7 @@ func NewDefaultPluginFrameHandler(defaultHandler IPluginMessageHandler) *Default
} }
func (h *DefaultPluginFrameHandler) OnEventReceived(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) { func (h *DefaultPluginFrameHandler) OnEventReceived(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) {
msgData := &DingTalkPluginMessage{} msgData := &PluginMessage{}
err := json.Unmarshal([]byte(df.Data), msgData) err := json.Unmarshal([]byte(df.Data), msgData)
if err != nil { if err != nil {
return nil, err return nil, err
@ -37,8 +37,8 @@ func (h *DefaultPluginFrameHandler) OnEventReceived(ctx context.Context, df *pay
if err != nil { if err != nil {
return nil, err return nil, err
} }
dingTalkPluginResponse := &DingTalkPluginResponse{RequestId: msgData.RequestId, Result: result} pluginResponse := &PluginResponse{RequestId: msgData.RequestId, Result: result}
callbackResponse := &CallbackResponse{Response: dingTalkPluginResponse} callbackResponse := &CallbackResponse{Response: pluginResponse}
frameResp := payload.NewSuccessDataFrameResponse() frameResp := payload.NewSuccessDataFrameResponse()
frameResp.SetJson(callbackResponse) frameResp.SetJson(callbackResponse)
return frameResp, nil return frameResp, nil