103 lines
3.2 KiB
Go
103 lines
3.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"fmt"
|
|
"github.com/open-dingtalk/dingtalk-stream-sdk-go/card"
|
|
|
|
"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()
|
|
if err := chatbotReplier.SimpleReplyText(ctx, data.SessionWebhook, replyMsg); err != nil {
|
|
return nil, err
|
|
}
|
|
if err := chatbotReplier.SimpleReplyMarkdown(ctx, data.SessionWebhook, []byte("Markdown消息"), replyMsg); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return []byte(""), nil
|
|
}
|
|
|
|
// 简单的插件处理实现
|
|
func OnPluginMessageReceived(ctx context.Context, request *plugin.GraphRequest) (*plugin.GraphResponse, error) {
|
|
response := &plugin.GraphResponse{
|
|
Body: `{"text": "hello world", "content": [{"title": "1", "description": "2", "url":"https://www.zhihu.com/question/626551401"},{"title": "2", "description": "2", "url":"https://www.zhihu.com/question/626551401"}]}`,
|
|
}
|
|
return response, 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()
|
|
if err := frameResp.SetJson(event.NewEventProcessResultSuccess()); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func OnCardCallbackReceived(ctx context.Context, request *card.CardRequest) (*card.CardResponse, error) {
|
|
logger.GetLogger().Infof("receive card data: %v", request)
|
|
response := &card.CardResponse{
|
|
CardData: &card.CardDataDto{},
|
|
}
|
|
return response, nil
|
|
}
|
|
|
|
// 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.NewStdTestLoggerWithDebug())
|
|
|
|
cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)))
|
|
|
|
//注册事件类型的处理函数
|
|
cli.RegisterAllEventRouter(OnEventReceived)
|
|
//注册callback类型的处理函数
|
|
cli.RegisterChatBotCallbackRouter(OnChatBotMessageReceived)
|
|
//注册插件的处理函数
|
|
cli.RegisterPluginCallbackRouter(OnPluginMessageReceived)
|
|
//注册互动卡片类型的处理函数
|
|
cli.RegisterCardCallbackRouter(OnCardCallbackReceived)
|
|
|
|
err := cli.Start(context.Background())
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
defer cli.Close()
|
|
|
|
select {}
|
|
}
|