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

This commit is contained in:
weiming wu 2023-08-10 15:28:17 +08:00
parent 1fa7561795
commit 0845d43d46
3 changed files with 12 additions and 6 deletions

View File

@ -1,5 +1,6 @@
package main package main
// 插件例子
type EchoRequest struct { type EchoRequest struct {
Message string Message string
} }

View File

@ -30,12 +30,15 @@ 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.DingTalkPluginMessage) (interface{}, error) {
if message.AbilityKey == "echo" { //可以根据message中的PluginId、PluginVersion、AbilityKey路由到具体一个能力 //可以根据message中的PluginId、PluginVersion、AbilityKey路由到具体一个能力
if message.AbilityKey == "echo" {
echoRequest := &EchoRequest{} echoRequest := &EchoRequest{}
//将数据转换成插件的请求参数
err := message.ParseData(echoRequest) err := message.ParseData(echoRequest)
if err != nil { if err != nil {
return nil, err return nil, err
} }
//执行插件
echoResponse := Echo(echoRequest) echoResponse := Echo(echoRequest)
return echoResponse, nil return echoResponse, nil
} }
@ -70,8 +73,8 @@ func main() {
logger.SetLogger(logger.NewStdTestLogger()) logger.SetLogger(logger.NewStdTestLogger())
//cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret))) cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)))
cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig("dingfplahibzeqzfudlz", "If8TqLjRXpUuq8vPUdQ4042qRYTaCXaXldYZOJUq8xnCiwrhDYAz5YHxS7l2oPoC")))
//注册事件类型的处理函数 //注册事件类型的处理函数
cli.RegisterAllEventRouter(OnEventReceived) cli.RegisterAllEventRouter(OnEventReceived)
//注册callback类型的处理函数 //注册callback类型的处理函数

View File

@ -14,10 +14,12 @@ type DingTalkPluginMessage struct {
RequestId string `json:"requestId"` RequestId string `json:"requestId"`
} }
func (req *DingTalkPluginMessage) ParseData(model interface{}) error { // 用于将数据转换成插件的请求参数
//TO DO 处理异常 func (req *DingTalkPluginMessage) ParseData(model interface{}) (err error) {
defer func() { defer func() {
recover() if e := recover(); e != nil {
err = errors.New(fmt.Sprintf("parse data error: %v", e))
}
}() }()
m, ok := req.Data.(map[string]interface{}) m, ok := req.Data.(map[string]interface{})
if !ok { if !ok {