1
0

corp.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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, channel_ *model.Channel) error {
  26. // https://developer.work.weixin.qq.com/document/path/91770
  27. messageRequest := corpMessageRequest{
  28. MessageType: "text",
  29. }
  30. if message.Content == "" {
  31. messageRequest.MessageType = "text"
  32. messageRequest.Text.Content = message.Description
  33. } else {
  34. messageRequest.MessageType = "markdown"
  35. messageRequest.Markdown.Content = message.Content
  36. }
  37. if message.To != "" {
  38. messageRequest.MentionedList = strings.Split(message.To, "|")
  39. }
  40. jsonData, err := json.Marshal(messageRequest)
  41. if err != nil {
  42. return err
  43. }
  44. resp, err := http.Post(fmt.Sprintf("%s", channel_.URL), "application/json",
  45. bytes.NewBuffer(jsonData))
  46. if err != nil {
  47. return err
  48. }
  49. var res corpMessageResponse
  50. err = json.NewDecoder(resp.Body).Decode(&res)
  51. if err != nil {
  52. return err
  53. }
  54. if res.Code != 0 {
  55. return errors.New(res.Message)
  56. }
  57. return nil
  58. }