https://open.feishu.cn/document/server-docs/im-v1/message/create
(ctx context.Context, userID string, messageCard *WebhookCard)
| 238 | |
| 239 | // https://open.feishu.cn/document/server-docs/im-v1/message/create |
| 240 | func (p *provider) sendMessage(ctx context.Context, userID string, messageCard *WebhookCard) error { |
| 241 | const url = "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id" |
| 242 | content, err := json.Marshal(messageCard) |
| 243 | if err != nil { |
| 244 | return errors.Wrapf(err, "failed to marshal message card") |
| 245 | } |
| 246 | data := sendMessageRequest{ |
| 247 | ReceiveID: userID, |
| 248 | MsgType: "interactive", |
| 249 | Content: string(content), |
| 250 | } |
| 251 | bytes, err := json.Marshal(data) |
| 252 | if err != nil { |
| 253 | return errors.Wrapf(err, "failed to marshal payload") |
| 254 | } |
| 255 | body, err := p.do(ctx, http.MethodPost, url, bytes) |
| 256 | if err != nil { |
| 257 | return errors.Wrapf(err, "failed to do send message request") |
| 258 | } |
| 259 | |
| 260 | var resp generalResponse |
| 261 | if err := json.Unmarshal(body, &resp); err != nil { |
| 262 | return errors.Wrapf(err, "failed to unmarshal response") |
| 263 | } |
| 264 | |
| 265 | if resp.Code != 0 { |
| 266 | return errors.Errorf("failed to send message, code %d, msg %q", resp.Code, resp.Msg) |
| 267 | } |
| 268 | |
| 269 | return nil |
| 270 | } |
| 271 | |
| 272 | const maxRetries = 3 |
| 273 |
no test coverage detected