worker/internal/senders/webhook_sender.go

66 lines
1.4 KiB
Go
Raw Normal View History

2025-07-07 08:39:44 +00:00
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 {
2025-07-07 08:49:23 +00:00
QAPairs map[string]string `json:"qa_pairs"` // вопрос -> ответ
2025-07-07 08:39:44 +00:00
}
func (w *WebhookSender) SendLead(data LeadData) error {
if data.Template == "reject" { // это у нас для неуплоченных, смысл отправлять пост с напомиашкой есть?
return nil
}
2025-07-07 08:49:23 +00:00
qaPairs := make(map[string]string)
for _, answer := range data.TemplateData.AllAnswers {
questionTitle, exists := data.TemplateData.QuestionsMap[answer.QuestionID]
if exists {
qaPairs[questionTitle] = answer.Content
}
}
2025-07-07 08:39:44 +00:00
webhookData := WebhookPayload{
2025-07-07 08:49:23 +00:00
QAPairs: qaPairs,
2025-07-07 08:39:44 +00:00
}
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"
}