corp.go 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package channel
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "message-pusher/model"
  8. "net/http"
  9. "strings"
  10. )
  11. type corpMessageRequest struct {
  12. MessageType string `json:"msgtype"`
  13. Text struct {
  14. Content string `json:"content"`
  15. } `json:"text"`
  16. Markdown struct {
  17. Content string `json:"content"`
  18. } `json:"markdown"`
  19. MentionedList []string `json:"mentioned_list"`
  20. }
  21. type corpMessageResponse struct {
  22. Code int `json:"errcode"`
  23. Message string `json:"errmsg"`
  24. }
  25. func SendCorpMessage(message *model.Message, user *model.User) error {
  26. // https://developer.work.weixin.qq.com/document/path/91770
  27. if user.CorpWebhookURL == "" {
  28. return errors.New("未配置企业微信群机器人消息推送方式")
  29. }
  30. messageRequest := corpMessageRequest{
  31. MessageType: "text",
  32. }
  33. if message.Content == "" {
  34. messageRequest.MessageType = "text"
  35. messageRequest.Text.Content = message.Description
  36. } else {
  37. messageRequest.MessageType = "markdown"
  38. messageRequest.Markdown.Content = message.Content
  39. }
  40. if message.To != "" {
  41. messageRequest.MentionedList = strings.Split(message.To, "|")
  42. }
  43. jsonData, err := json.Marshal(messageRequest)
  44. if err != nil {
  45. return err
  46. }
  47. resp, err := http.Post(fmt.Sprintf("%s", user.CorpWebhookURL), "application/json",
  48. bytes.NewBuffer(jsonData))
  49. if err != nil {
  50. return err
  51. }
  52. var res corpMessageResponse
  53. err = json.NewDecoder(resp.Body).Decode(&res)
  54. if err != nil {
  55. return err
  56. }
  57. if res.Code != 0 {
  58. return errors.New(res.Message)
  59. }
  60. return nil
  61. }