package main import ( "context" "flag" "fmt" "github.com/open-dingtalk/dingtalk-stream-sdk-go/chatbot" "github.com/open-dingtalk/dingtalk-stream-sdk-go/client" "github.com/open-dingtalk/dingtalk-stream-sdk-go/event" "github.com/open-dingtalk/dingtalk-stream-sdk-go/logger" "github.com/open-dingtalk/dingtalk-stream-sdk-go/payload" "github.com/open-dingtalk/dingtalk-stream-sdk-go/plugin" ) /** * @Author linya.jj * @Date 2023/3/22 18:30 */ // 简单的应答机器人实现 func OnChatBotMessageReceived(ctx context.Context, data *chatbot.BotCallbackDataModel) ([]byte, error) { replyMsg := []byte(fmt.Sprintf("msg received: [%s]", data.Text.Content)) chatbotReplier := chatbot.NewChatbotReplier() chatbotReplier.SimpleReplyText(ctx, data.SessionWebhook, replyMsg) chatbotReplier.SimpleReplyMarkdown(ctx, data.SessionWebhook, []byte("Markdown消息"), replyMsg) return []byte(""), nil } // 简单的插件处理实现 func OnPluginMessageReceived(ctx context.Context, message *plugin.DingTalkPluginMessage) (interface{}, error) { if message.AbilityKey == "echo" { //可以根据message中的PluginId、PluginVersion、AbilityKey路由到具体一个能力 echoRequest := &EchoRequest{} err := message.ParseData(echoRequest) if err != nil { return nil, err } echoResponse := Echo(echoRequest) return echoResponse, nil } return nil, nil } // 事件处理 func OnEventReceived(ctx context.Context, df *payload.DataFrame) (frameResp *payload.DataFrameResponse, err error) { eventHeader := event.NewEventHeaderFromDataFrame(df) logger.GetLogger().Infof("received event, eventId=[%s] eventBornTime=[%d] eventCorpId=[%s] eventType=[%s] eventUnifiedAppId=[%s] data=[%s]", eventHeader.EventId, eventHeader.EventBornTime, eventHeader.EventCorpId, eventHeader.EventType, eventHeader.EventUnifiedAppId, df.Data) frameResp = payload.NewSuccessDataFrameResponse() frameResp.SetJson(event.NewEventProcessResultSuccess()) return } // go run example/*.go --client_id your-client-id --client_secret your-client-secret func main() { var clientId, clientSecret string flag.StringVar(&clientId, "client_id", "", "your-client-id") flag.StringVar(&clientSecret, "client_secret", "", "your-client-secret") flag.Parse() logger.SetLogger(logger.NewStdTestLogger()) //cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret))) cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig("dingfplahibzeqzfudlz", "If8TqLjRXpUuq8vPUdQ4042qRYTaCXaXldYZOJUq8xnCiwrhDYAz5YHxS7l2oPoC"))) //注册事件类型的处理函数 cli.RegisterAllEventRouter(OnEventReceived) //注册callback类型的处理函数 cli.RegisterChatBotCallbackRouter(OnChatBotMessageReceived) //注册插件的处理函数 cli.RegisterPluginCallbackRouter(OnPluginMessageReceived) err := cli.Start(context.Background()) if err != nil { panic(err) } defer cli.Close() select {} }