example_bot.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package public
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/json"
  6. "fmt"
  7. "net/http"
  8. "time"
  9. "github.com/open-dingtalk/dingtalk-stream-sdk-go/chatbot"
  10. "github.com/open-dingtalk/dingtalk-stream-sdk-go/client"
  11. "github.com/open-dingtalk/dingtalk-stream-sdk-go/logger"
  12. "github.com/open-dingtalk/dingtalk-stream-sdk-go/payload"
  13. "github.com/open-dingtalk/dingtalk-stream-sdk-go/utils"
  14. )
  15. /**
  16. * @Author linya.jj
  17. * @Date 2023/3/22 18:30
  18. */
  19. func OnBotCallback(ctx context.Context, df *payload.DataFrame) (*payload.DataFrameResponse, error) {
  20. frameResp := &payload.DataFrameResponse{
  21. Code: 200,
  22. Headers: payload.DataFrameHeader{
  23. payload.DataFrameHeaderKContentType: payload.DataFrameContentTypeKJson,
  24. payload.DataFrameHeaderKMessageId: df.GetMessageId(),
  25. },
  26. Message: "ok",
  27. Data: "",
  28. }
  29. return frameResp, nil
  30. }
  31. func OnChatReceive(ctx context.Context, data *chatbot.BotCallbackDataModel) error {
  32. requestBody := map[string]interface{}{
  33. "msgtype": "text",
  34. "text": map[string]interface{}{
  35. "content": fmt.Sprintf("msg received: [%s]", data.Text.Content),
  36. },
  37. }
  38. requestJsonBody, _ := json.Marshal(requestBody)
  39. req, err := http.NewRequestWithContext(ctx, http.MethodPost, data.SessionWebhook, bytes.NewReader(requestJsonBody))
  40. if err != nil {
  41. return err
  42. }
  43. req.Header.Set("Content-Type", "application/json")
  44. req.Header.Set("Accept", "*/*")
  45. httpClient := &http.Client{
  46. Transport: http.DefaultTransport,
  47. Timeout: 5 * time.Second, //设置超时,包含connection时间、任意重定向时间、读取response body时间
  48. }
  49. _, err = httpClient.Do(req)
  50. if err != nil {
  51. return err
  52. }
  53. return nil
  54. }
  55. func RunBotListener(clientId, clientSecret string) {
  56. logger.SetLogger(logger.NewStdTestLogger())
  57. cli := client.NewStreamClient(
  58. client.WithAppCredential(client.NewAppCredentialConfig(clientId, clientSecret)),
  59. client.WithUserAgent(client.NewDingtalkGoSDKUserAgent()),
  60. client.WithSubscription(utils.SubscriptionTypeKCallback, payload.BotMessageCallbackTopic, chatbot.NewDefaultChatBotFrameHandler(OnChatReceive).OnEventReceived),
  61. )
  62. err := cli.Start(context.Background())
  63. if err != nil {
  64. panic(err)
  65. }
  66. defer cli.Close()
  67. select {}
  68. }