mirror of
https://github.com/eryajf/chatgpt-dingtalk.git
synced 2026-04-22 15:37:19 +08:00
chore: ⬆️ dingtalk-stream-sdk-go 依赖版本升级
This commit is contained in:
@@ -7,7 +7,7 @@ require (
|
||||
github.com/gin-gonic/gin v1.9.0
|
||||
github.com/glebarez/sqlite v1.7.0
|
||||
github.com/go-resty/resty/v2 v2.7.0
|
||||
github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.1
|
||||
github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.4
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||
github.com/sashabaranov/go-openai v1.6.1
|
||||
github.com/solywsh/chatgpt v0.0.14
|
||||
|
||||
@@ -101,8 +101,8 @@ github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
|
||||
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
|
||||
github.com/muesli/termenv v0.15.1 h1:UzuTb/+hhlBugQz28rpzey4ZuKcZ03MeKsoG7IJZIxs=
|
||||
github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4ANqrZs2sQ=
|
||||
github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.1 h1:F7c4ZWg5FuL0giOVg0slzPmYLwbuQqTjsu5BkUL6VEU=
|
||||
github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.1/go.mod h1:ln3IqPYYocZbYvl9TAOrG/cxGR9xcn4pnZRLdCTEGEU=
|
||||
github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.4 h1:34Ox70UZ+7TIg3Qho1QqQOUtRTo8eO3f8XYE+P27PiQ=
|
||||
github.com/open-dingtalk/dingtalk-stream-sdk-go v0.0.4/go.mod h1:ln3IqPYYocZbYvl9TAOrG/cxGR9xcn4pnZRLdCTEGEU=
|
||||
github.com/pandodao/tokenizer-go v0.2.0 h1:NhfI8fGvQkDld2cZCag6NEU3pJ/ugU9zoY1R/zi9YCs=
|
||||
github.com/pandodao/tokenizer-go v0.2.0/go.mod h1:t6qFbaleKxbv0KNio2XUN/mfGM5WKv4haPXDQWVDG00=
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
|
||||
|
||||
@@ -16,15 +16,15 @@ import (
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/open-dingtalk/dingtalk-stream-sdk-go/chatbot"
|
||||
"github.com/open-dingtalk/dingtalk-stream-sdk-go/client"
|
||||
loger "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/utils"
|
||||
)
|
||||
|
||||
func init() {
|
||||
// 初始化加载配置,数据库,模板等
|
||||
public.InitSvc()
|
||||
// 指定日志等级
|
||||
logger.InitLogger(public.Config.LogLevel)
|
||||
}
|
||||
|
||||
func main() {
|
||||
if public.Config.RunMode == "http" {
|
||||
StartHttp()
|
||||
@@ -32,28 +32,11 @@ func main() {
|
||||
for _, credential := range public.Config.Credentials {
|
||||
StartStream(credential.ClientID, credential.ClientSecret)
|
||||
}
|
||||
logger.Info("🚀 The Server Is Running On Stream Mode")
|
||||
select {}
|
||||
}
|
||||
}
|
||||
|
||||
// 启动为 stream 模式
|
||||
func StartStream(clientId, clientSecret string) {
|
||||
receiver := NewChatReceiver(clientId, clientSecret)
|
||||
loger.SetLogger(loger.NewStdTestLogger())
|
||||
cli := client.NewStreamClient(
|
||||
client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)),
|
||||
client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
|
||||
client.WithSubscription(utils.SubscriptionTypeKCallback, payload.BotMessageCallbackTopic, chatbot.NewDefaultChatBotFrameHandler(receiver.OnChatReceive).OnEventReceived),
|
||||
)
|
||||
err := cli.Start(context.Background())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
defer cli.Close()
|
||||
|
||||
}
|
||||
|
||||
type ChatReceiver struct {
|
||||
clientId string
|
||||
clientSecret string
|
||||
@@ -66,7 +49,23 @@ func NewChatReceiver(clientId, clientSecret string) *ChatReceiver {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *ChatReceiver) OnChatReceive(ctx context.Context, data *chatbot.BotCallbackDataModel) (err error) {
|
||||
// 启动为 stream 模式
|
||||
func StartStream(clientId, clientSecret string) {
|
||||
receiver := NewChatReceiver(clientId, clientSecret)
|
||||
cli := client.NewStreamClient(client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)))
|
||||
|
||||
//注册callback类型的处理函数
|
||||
cli.RegisterChatBotCallbackRouter(receiver.OnChatBotMessageReceived)
|
||||
|
||||
err := cli.Start(context.Background())
|
||||
if err != nil {
|
||||
logger.Fatal("strar stream failed: %v\n", err)
|
||||
}
|
||||
defer cli.Close()
|
||||
}
|
||||
|
||||
// OnChatBotMessageReceived 简单的应答机器人实现
|
||||
func (r *ChatReceiver) OnChatBotMessageReceived(ctx context.Context, data *chatbot.BotCallbackDataModel) ([]byte, error) {
|
||||
msgObj := dingbot.ReceiveMsg{
|
||||
ConversationID: data.ConversationId,
|
||||
AtUsers: []struct {
|
||||
@@ -93,7 +92,7 @@ func (r *ChatReceiver) OnChatReceive(ctx context.Context, data *chatbot.BotCallb
|
||||
c.Set(public.DingTalkClientIdKeyName, clientId)
|
||||
DoRequest(msgObj, &c)
|
||||
|
||||
return nil
|
||||
return []byte(""), nil
|
||||
}
|
||||
|
||||
func StartHttp() {
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
package public
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"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/logger"
|
||||
"github.com/open-dingtalk/dingtalk-stream-sdk-go/payload"
|
||||
"github.com/open-dingtalk/dingtalk-stream-sdk-go/utils"
|
||||
)
|
||||
|
||||
/**
|
||||
* @Author linya.jj
|
||||
* @Date 2023/3/22 18:30
|
||||
*/
|
||||
|
||||
func OnBotCallback(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) {
|
||||
frameResp := &payload.DataFrameResponse{
|
||||
Code: 200,
|
||||
Headers: payload.DataFrameHeader{
|
||||
payload.DataFrameHeaderKContentType: payload.DataFrameContentTypeKJson,
|
||||
payload.DataFrameHeaderKMessageId: df.GetMessageId(),
|
||||
},
|
||||
Message: "ok",
|
||||
Data: "",
|
||||
}
|
||||
|
||||
return frameResp, nil
|
||||
}
|
||||
|
||||
func OnChatReceive(ctx context.Context, data *chatbot.BotCallbackDataModel) error {
|
||||
requestBody := map[string]interface{}{
|
||||
"msgtype": "text",
|
||||
"text": map[string]interface{}{
|
||||
"content": fmt.Sprintf("msg received: [%s]", data.Text.Content),
|
||||
},
|
||||
}
|
||||
|
||||
requestJsonBody, _ := json.Marshal(requestBody)
|
||||
req, err := http.NewRequestWithContext(ctx, http.MethodPost, data.SessionWebhook, bytes.NewReader(requestJsonBody))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
req.Header.Set("Accept", "*/*")
|
||||
|
||||
httpClient := &http.Client{
|
||||
Transport: http.DefaultTransport,
|
||||
Timeout: 5 * time.Second, //设置超时,包含connection时间、任意重定向时间、读取response body时间
|
||||
}
|
||||
|
||||
_, err = httpClient.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func RunBotListener(clientId, clientSecret string) {
|
||||
logger.SetLogger(logger.NewStdTestLogger())
|
||||
|
||||
cli := client.NewStreamClient(
|
||||
client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)),
|
||||
client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
|
||||
client.WithSubscription(utils.SubscriptionTypeKCallback, payload.BotMessageCallbackTopic, chatbot.NewDefaultChatBotFrameHandler(OnChatReceive).OnEventReceived),
|
||||
)
|
||||
|
||||
err := cli.Start(context.Background())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
defer cli.Close()
|
||||
|
||||
select {}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package public
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"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/utils"
|
||||
)
|
||||
|
||||
/**
|
||||
* @Author linya.jj
|
||||
* @Date 2023/3/22 18:30
|
||||
*/
|
||||
|
||||
func RunEventListener(clientId, clientSecret string) {
|
||||
logger.SetLogger(logger.NewStdTestLogger())
|
||||
|
||||
eventHandler := event.NewDefaultEventFrameHandler(event.EventHandlerDoNothing)
|
||||
|
||||
cli := client.NewStreamClient(
|
||||
client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)),
|
||||
client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
|
||||
client.WithSubscription(utils.SubscriptionTypeKEvent, "*", eventHandler.OnEventReceived),
|
||||
)
|
||||
|
||||
err := cli.Start(context.Background())
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
defer cli.Close()
|
||||
|
||||
select {}
|
||||
}
|
||||
Reference in New Issue
Block a user