package senders import ( "encoding/json" "errors" "fmt" "github.com/gofiber/fiber/v2" ) type WebhookSender struct { client *fiber.Client } func NewWebhookSender() *WebhookSender { return &WebhookSender{ client: fiber.AcquireClient(), } } type WebhookPayload struct { QAPairs map[string]string `json:"qa_pairs"` // вопрос -> ответ } func (w *WebhookSender) SendLead(data LeadData) error { if data.Template == "reject" { // это у нас для неуплоченных, смысл отправлять пост с напомиашкой есть? return nil } qaPairs := make(map[string]string) for _, answer := range data.TemplateData.AllAnswers { questionTitle, exists := data.TemplateData.QuestionsMap[answer.QuestionID] if exists { qaPairs[questionTitle] = answer.Content } } webhookData := WebhookPayload{ QAPairs: qaPairs, } jsonData, err := json.Marshal(webhookData) if err != nil { return fmt.Errorf("error marshaling webhook data: %w", err) } url := data.To.(string) agent := w.client.Post(url) agent.Set("Content-Type", "application/json").Body(jsonData) statusCode, _, errs := agent.Bytes() if len(errs) > 0 { return fmt.Errorf("error send webhook request: %w", errors.Join(errs...)) } if statusCode != fiber.StatusOK { return fmt.Errorf("received an incorrect status code from webhook: %d", statusCode) } return nil } func (w *WebhookSender) Name() string { return "webhook" }