(context webhook.Context)
| 102 | } |
| 103 | |
| 104 | func (*Receiver) sendMessage(context webhook.Context) error { |
| 105 | post := Webhook{ |
| 106 | MessageType: "markdown", |
| 107 | Markdown: getMessageCard(context), |
| 108 | } |
| 109 | body, err := json.Marshal(post) |
| 110 | if err != nil { |
| 111 | return errors.Wrapf(err, "failed to marshal webhook POST request to %s", context.URL) |
| 112 | } |
| 113 | req, err := http.NewRequest("POST", |
| 114 | context.URL, bytes.NewBuffer(body)) |
| 115 | if err != nil { |
| 116 | return errors.Wrapf(err, "failed to construct webhook POST request to %s", context.URL) |
| 117 | } |
| 118 | |
| 119 | req.Header.Set("Content-Type", "application/json") |
| 120 | client := &http.Client{ |
| 121 | Timeout: webhook.Timeout, |
| 122 | } |
| 123 | resp, err := client.Do(req) |
| 124 | if err != nil { |
| 125 | return errors.Wrapf(err, "failed to POST webhook to %s", context.URL) |
| 126 | } |
| 127 | |
| 128 | b, err := io.ReadAll(resp.Body) |
| 129 | if err != nil { |
| 130 | return errors.Wrapf(err, "failed to read POST webhook response from %s", context.URL) |
| 131 | } |
| 132 | defer resp.Body.Close() |
| 133 | |
| 134 | if resp.StatusCode != http.StatusOK { |
| 135 | return errors.Errorf("failed to POST webhook to %s, status code: %d, response body: %s", context.URL, resp.StatusCode, b) |
| 136 | } |
| 137 | |
| 138 | webhookResponse := &WebhookResponse{} |
| 139 | if err := json.Unmarshal(b, webhookResponse); err != nil { |
| 140 | return errors.Wrapf(err, "malformed webhook response from %s", context.URL) |
| 141 | } |
| 142 | |
| 143 | if webhookResponse.ErrorCode != 0 { |
| 144 | return errors.Errorf("%s", webhookResponse.ErrorMessage) |
| 145 | } |
| 146 | |
| 147 | return nil |
| 148 | } |
| 149 | |
| 150 | // sendDirectMessage sends direct message to users. |
| 151 | // returns `true` if successfully sends messages to all users. |
no test coverage detected