feat #1 机器人回调更换topic
This commit is contained in:
parent
ae3f631591
commit
53bfbab986
|
|
@ -0,0 +1,51 @@
|
||||||
|
package chatbot
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"github.com/open-dingtalk/dingtalk-stream-sdk-go/payload"
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author linya.jj
|
||||||
|
* @Date 2023/3/22 18:30
|
||||||
|
*/
|
||||||
|
|
||||||
|
type IMessageHandler func(c context.Context, data *BotCallbackDataModel) error
|
||||||
|
|
||||||
|
type DefaultChatBotFrameHandler struct {
|
||||||
|
defaultHandler IMessageHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDefaultChatBotFrameHandler(defaultHandler IMessageHandler) *DefaultChatBotFrameHandler {
|
||||||
|
return &DefaultChatBotFrameHandler{
|
||||||
|
defaultHandler: defaultHandler,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *DefaultChatBotFrameHandler) OnEventReceived(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: "",
|
||||||
|
}
|
||||||
|
|
||||||
|
msgData := &BotCallbackDataModel{}
|
||||||
|
err := json.Unmarshal([]byte(df.Data), msgData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if h.defaultHandler != nil {
|
||||||
|
err = h.defaultHandler(ctx, msgData)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return frameResp, nil
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
package chatbot
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author linya.jj
|
||||||
|
* @Date 2023/3/22 18:30
|
||||||
|
*/
|
||||||
|
|
||||||
|
type BotCallbackDataAtUserModel struct {
|
||||||
|
DingtalkId string `json:"dingtalkId"`
|
||||||
|
StaffId string `json:"staffId"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BotCallbackDataTextModel struct {
|
||||||
|
Content string `json:"content"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type BotCallbackDataModel struct {
|
||||||
|
ConversationId string `json:"conversationId"`
|
||||||
|
AtUsers []BotCallbackDataAtUserModel `json:"atUsers"`
|
||||||
|
ChatbotCorpId string `json:"chatbotCorpId"`
|
||||||
|
ChatbotUserId string `json:"chatbotUserId"`
|
||||||
|
MsgId string `json:"msgId"`
|
||||||
|
SenderNick string `json:"senderNick"`
|
||||||
|
IsAdmin bool `json:"isAdmin"`
|
||||||
|
SenderStaffId string `json:"senderStaffId"`
|
||||||
|
SessionWebhookExpiredTime int64 `json:"sessionWebhookExpiredTime"`
|
||||||
|
CreateAt int64 `json:"createAt"`
|
||||||
|
SenderCorpId string `json:"senderCorpId"`
|
||||||
|
ConversationType string `json:"conversationType"`
|
||||||
|
SenderId string `json:"senderId"`
|
||||||
|
ConversationTitle string `json:"conversationTitle"`
|
||||||
|
IsInAtList bool `json:"isInAtList"`
|
||||||
|
SessionWebhook string `json:"sessionWebhook"`
|
||||||
|
Text BotCallbackDataTextModel `json:"text"`
|
||||||
|
Msgtype string `json:"msgtype"`
|
||||||
|
}
|
||||||
|
|
@ -1,11 +1,17 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"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/client"
|
||||||
"github.com/open-dingtalk/dingtalk-stream-sdk-go/logger"
|
"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/payload"
|
||||||
"github.com/open-dingtalk/dingtalk-stream-sdk-go/utils"
|
"github.com/open-dingtalk/dingtalk-stream-sdk-go/utils"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -27,13 +33,43 @@ func OnBotCallback(ctx context.Context, df *payload.DataFrame) (*payload.DataFra
|
||||||
return frameResp, nil
|
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() {
|
func RunBotListener() {
|
||||||
logger.SetLogger(logger.NewStdTestLogger())
|
logger.SetLogger(logger.NewStdTestLogger())
|
||||||
|
|
||||||
cli := client.NewStreamClient(
|
cli := client.NewStreamClient(
|
||||||
client.WithAppCredential(client.NewAppCredentialConfig("your-client-id", "your-client-secret")),
|
client.WithAppCredential(client.NewAppCredentialConfig("your-client-id", "your-client-secret")),
|
||||||
client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
|
client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
|
||||||
client.WithSubscription(utils.SubscriptionTypeKCallback, payload.BotMessageCallbackTopic, OnBotCallback),
|
client.WithSubscription(utils.SubscriptionTypeKCallback, payload.BotMessageCallbackTopic, chatbot.NewDefaultChatBotFrameHandler(OnChatReceive).OnEventReceived),
|
||||||
)
|
)
|
||||||
|
|
||||||
err := cli.Start(context.Background())
|
err := cli.Start(context.Background())
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ const (
|
||||||
DataFrameResponseStatusCodeKOK = 200
|
DataFrameResponseStatusCodeKOK = 200
|
||||||
DataFrameResponseStatusCodeKInternalError = 500
|
DataFrameResponseStatusCodeKInternalError = 500
|
||||||
|
|
||||||
BotMessageCallbackTopic = "bot_got_msg" //机器人消息统一回调topic
|
BotMessageCallbackTopic = "/v1.0/im/bot/messages/get" //机器人消息统一回调topic
|
||||||
)
|
)
|
||||||
|
|
||||||
func GenerateMessageId(prefix string) string {
|
func GenerateMessageId(prefix string) string {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue