Documentation
¶
Overview ¶
Package webhook provides webhook delivery and management.
Index ¶
- type ArticleWebhookData
- type DeliveryRepository
- type Manager
- func (m *Manager) CreateWebhook(req WebhookRequest) (*Webhook, error)
- func (m *Manager) DeleteWebhook(id uint) error
- func (m *Manager) GetDeliveries(webhookID uint, limit int) ([]*WebhookDelivery, error)
- func (m *Manager) GetWebhook(id uint) (*Webhook, error)
- func (m *Manager) GetWebhookStatistics(webhookID uint) (*WebhookStatistics, error)
- func (m *Manager) ListWebhooks() ([]*Webhook, error)
- func (m *Manager) Stop()
- func (m *Manager) TestWebhook(webhookID uint) (*WebhookTestResult, error)
- func (m *Manager) TriggerEvent(event WebhookEvent, data interface{}, previousData interface{}) error
- func (m *Manager) UpdateWebhook(id uint, req WebhookRequest) (*Webhook, error)
- type QueueWebhookData
- type TicketWebhookData
- type UserWebhookData
- type Webhook
- type WebhookDelivery
- type WebhookDeliveryStatus
- type WebhookEvent
- type WebhookFilters
- type WebhookPayload
- type WebhookRepository
- type WebhookRequest
- type WebhookStatistics
- type WebhookStatus
- type WebhookTestResult
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ArticleWebhookData ¶
type ArticleWebhookData struct {
ID int `json:"id"`
TicketID int `json:"ticket_id"`
From string `json:"from"`
To string `json:"to"`
Subject string `json:"subject"`
Body string `json:"body"`
Type string `json:"type"`
Visible bool `json:"visible"`
CreatedAt time.Time `json:"created_at"`
}
ArticleWebhookData represents article data in webhook payloads.
type DeliveryRepository ¶
type DeliveryRepository interface {
Create(delivery *WebhookDelivery) error
GetByID(id uint) (*WebhookDelivery, error)
ListByWebhookID(webhookID uint, limit int) ([]*WebhookDelivery, error)
Update(delivery *WebhookDelivery) error
GetPendingRetries() ([]*WebhookDelivery, error)
CleanupOldDeliveries(olderThan time.Time) error
}
DeliveryRepository interface for webhook delivery storage operations.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager handles webhook operations.
func NewManager ¶
func NewManager(webhookRepo WebhookRepository, deliveryRepo DeliveryRepository) *Manager
NewManager creates a new webhook manager.
func (*Manager) CreateWebhook ¶
func (m *Manager) CreateWebhook(req WebhookRequest) (*Webhook, error)
CreateWebhook creates a new webhook.
func (*Manager) DeleteWebhook ¶
DeleteWebhook removes a webhook.
func (*Manager) GetDeliveries ¶
func (m *Manager) GetDeliveries(webhookID uint, limit int) ([]*WebhookDelivery, error)
GetDeliveries returns delivery history for a webhook.
func (*Manager) GetWebhook ¶
GetWebhook retrieves a webhook by ID.
func (*Manager) GetWebhookStatistics ¶
func (m *Manager) GetWebhookStatistics(webhookID uint) (*WebhookStatistics, error)
GetWebhookStatistics returns statistics for a webhook.
func (*Manager) ListWebhooks ¶
ListWebhooks returns all webhooks.
func (*Manager) TestWebhook ¶
func (m *Manager) TestWebhook(webhookID uint) (*WebhookTestResult, error)
TestWebhook tests a webhook by sending a test payload.
func (*Manager) TriggerEvent ¶
func (m *Manager) TriggerEvent(event WebhookEvent, data interface{}, previousData interface{}) error
TriggerEvent triggers webhooks for a specific event.
func (*Manager) UpdateWebhook ¶
func (m *Manager) UpdateWebhook(id uint, req WebhookRequest) (*Webhook, error)
UpdateWebhook updates an existing webhook.
type QueueWebhookData ¶
type QueueWebhookData struct {
ID int `json:"id"`
Name string `json:"name"`
Description string `json:"description,omitempty"`
GroupID int `json:"group_id"`
Active bool `json:"active"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
QueueWebhookData represents queue data in webhook payloads.
type TicketWebhookData ¶
type TicketWebhookData struct {
ID int `json:"id"`
Number string `json:"number"`
Title string `json:"title"`
Description string `json:"description,omitempty"`
Status string `json:"status"`
Priority string `json:"priority"`
QueueID int `json:"queue_id"`
QueueName string `json:"queue_name"`
AssignedTo *int `json:"assigned_to"`
AssignedName *string `json:"assigned_name"`
CustomerID string `json:"customer_id"`
CustomerEmail string `json:"customer_email"`
Tags []string `json:"tags"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
SLADue *time.Time `json:"sla_due,omitempty"`
}
TicketWebhookData represents ticket data in webhook payloads.
type UserWebhookData ¶
type UserWebhookData struct {
ID int `json:"id"`
Email string `json:"email"`
FirstName string `json:"first_name"`
LastName string `json:"last_name"`
Role string `json:"role"`
Active bool `json:"active"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
UserWebhookData represents user data in webhook payloads.
type Webhook ¶
type Webhook struct {
ID uint `json:"id" db:"id"`
Name string `json:"name" db:"name"`
URL string `json:"url" db:"url"`
Secret string `json:"secret,omitempty" db:"secret"` // HMAC secret for signature verification
Events []WebhookEvent `json:"events" db:"events"`
Status WebhookStatus `json:"status" db:"status"`
Description string `json:"description" db:"description"`
// Configuration
RetryCount int `json:"retry_count" db:"retry_count"`
RetryInterval time.Duration `json:"retry_interval" db:"retry_interval"`
Timeout time.Duration `json:"timeout" db:"timeout"`
// Headers to include in webhook requests
Headers map[string]string `json:"headers,omitempty" db:"headers"`
// Filters for conditional webhook execution
Filters WebhookFilters `json:"filters,omitempty" db:"filters"`
// Statistics
TotalDeliveries int `json:"total_deliveries" db:"total_deliveries"`
SuccessfulDeliveries int `json:"successful_deliveries" db:"successful_deliveries"`
FailedDeliveries int `json:"failed_deliveries" db:"failed_deliveries"`
LastDeliveryAt *time.Time `json:"last_delivery_at,omitempty" db:"last_delivery_at"`
LastSuccessAt *time.Time `json:"last_success_at,omitempty" db:"last_success_at"`
LastFailureAt *time.Time `json:"last_failure_at,omitempty" db:"last_failure_at"`
// Metadata
CreatedBy uint `json:"created_by" db:"created_by"`
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
Webhook represents a webhook endpoint configuration.
type WebhookDelivery ¶
type WebhookDelivery struct {
ID uint `json:"id" db:"id"`
WebhookID uint `json:"webhook_id" db:"webhook_id"`
Event WebhookEvent `json:"event" db:"event"`
Payload interface{} `json:"payload" db:"payload"`
Status WebhookDeliveryStatus `json:"status" db:"status"`
// Request details
RequestURL string `json:"request_url" db:"request_url"`
RequestHeaders map[string]string `json:"request_headers" db:"request_headers"`
RequestBody string `json:"request_body" db:"request_body"`
// Response details
ResponseStatusCode int `json:"response_status_code,omitempty" db:"response_status_code"`
ResponseHeaders map[string]string `json:"response_headers,omitempty" db:"response_headers"`
ResponseBody string `json:"response_body,omitempty" db:"response_body"`
// Timing
AttemptCount int `json:"attempt_count" db:"attempt_count"`
Duration time.Duration `json:"duration" db:"duration"`
NextRetryAt *time.Time `json:"next_retry_at,omitempty" db:"next_retry_at"`
// Error information
ErrorMessage string `json:"error_message,omitempty" db:"error_message"`
// Metadata
CreatedAt time.Time `json:"created_at" db:"created_at"`
UpdatedAt time.Time `json:"updated_at" db:"updated_at"`
}
WebhookDelivery represents a webhook delivery attempt.
type WebhookDeliveryStatus ¶
type WebhookDeliveryStatus string
WebhookDeliveryStatus represents the status of a webhook delivery attempt.
const ( DeliveryPending WebhookDeliveryStatus = "pending" DeliverySuccess WebhookDeliveryStatus = "success" DeliveryFailed WebhookDeliveryStatus = "failed" DeliveryRetrying WebhookDeliveryStatus = "retrying" DeliveryExpired WebhookDeliveryStatus = "expired" )
type WebhookEvent ¶
type WebhookEvent string
WebhookEvent represents the type of event that triggers a webhook.
const ( EventTicketCreated WebhookEvent = "ticket.created" EventTicketUpdated WebhookEvent = "ticket.updated" EventTicketClosed WebhookEvent = "ticket.closed" EventTicketReopened WebhookEvent = "ticket.reopened" EventTicketAssigned WebhookEvent = "ticket.assigned" EventTicketEscalated WebhookEvent = "ticket.escalated" EventTicketPriorityChanged WebhookEvent = "ticket.priority_changed" EventTicketStatusChanged WebhookEvent = "ticket.status_changed" EventTicketQueueMoved WebhookEvent = "ticket.queue_moved" EventArticleAdded WebhookEvent = "article.added" EventArticleUpdated WebhookEvent = "article.updated" EventUserCreated WebhookEvent = "user.created" EventUserUpdated WebhookEvent = "user.updated" EventUserActivated WebhookEvent = "user.activated" EventUserDeactivated WebhookEvent = "user.deactivated" EventQueueCreated WebhookEvent = "queue.created" EventQueueUpdated WebhookEvent = "queue.updated" EventQueueDeleted WebhookEvent = "queue.deleted" EventAttachmentUploaded WebhookEvent = "attachment.uploaded" EventAttachmentDeleted WebhookEvent = "attachment.deleted" EventSystemMaintenance WebhookEvent = "system.maintenance" EventSystemBackup WebhookEvent = "system.backup" EventSystemAlert WebhookEvent = "system.alert" )
type WebhookFilters ¶
type WebhookFilters struct {
// Queue filters - only trigger for specific queues
QueueIDs []int `json:"queue_ids,omitempty"`
// Priority filters - only trigger for specific priorities
Priorities []string `json:"priorities,omitempty"`
// Status filters - only trigger for specific statuses
Statuses []string `json:"statuses,omitempty"`
// User filters - only trigger for specific users
UserIDs []int `json:"user_ids,omitempty"`
// Custom field filters
CustomFields map[string]interface{} `json:"custom_fields,omitempty"`
}
WebhookFilters defines conditions for when webhooks should be triggered.
type WebhookPayload ¶
type WebhookPayload struct {
// Event information
Event WebhookEvent `json:"event"`
Timestamp time.Time `json:"timestamp"`
ID string `json:"id"` // Unique delivery ID
// Source information
Source struct {
Name string `json:"name"`
Version string `json:"version"`
URL string `json:"url"`
} `json:"source"`
// Event data - the actual payload varies by event type
Data interface{} `json:"data"`
// Previous data (for update events)
PreviousData interface{} `json:"previous_data,omitempty"`
}
WebhookPayload represents the structure of webhook payloads sent to external systems.
type WebhookRepository ¶
type WebhookRepository interface {
Create(webhook *Webhook) error
GetByID(id uint) (*Webhook, error)
List() ([]*Webhook, error)
ListActive() ([]*Webhook, error)
Update(webhook *Webhook) error
Delete(id uint) error
UpdateStatistics(id uint, stats WebhookStatistics) error
}
WebhookRepository interface for webhook storage operations.
type WebhookRequest ¶
type WebhookRequest struct {
Name string `json:"name" binding:"required"`
URL string `json:"url" binding:"required,url"`
Events []WebhookEvent `json:"events" binding:"required,min=1"`
Secret string `json:"secret"`
Description string `json:"description"`
Headers map[string]string `json:"headers"`
Filters WebhookFilters `json:"filters"`
// Configuration
RetryCount int `json:"retry_count"`
RetryInterval int `json:"retry_interval"` // seconds
Timeout int `json:"timeout"` // seconds
}
WebhookRequest represents a request to create or update a webhook.
type WebhookStatistics ¶
type WebhookStatistics struct {
WebhookID uint `json:"webhook_id"`
TotalDeliveries int `json:"total_deliveries"`
SuccessfulDeliveries int `json:"successful_deliveries"`
FailedDeliveries int `json:"failed_deliveries"`
SuccessRate float64 `json:"success_rate"`
AverageResponseTime int `json:"average_response_time_ms"`
LastDeliveryAt *time.Time `json:"last_delivery_at"`
LastSuccessAt *time.Time `json:"last_success_at"`
LastFailureAt *time.Time `json:"last_failure_at"`
}
WebhookStatistics represents webhook usage statistics.
type WebhookStatus ¶
type WebhookStatus string
WebhookStatus represents the status of a webhook endpoint.
const ( StatusActive WebhookStatus = "active" StatusInactive WebhookStatus = "inactive" StatusFailed WebhookStatus = "failed" StatusDisabled WebhookStatus = "disabled" )
type WebhookTestResult ¶
type WebhookTestResult struct {
Success bool `json:"success"`
StatusCode int `json:"status_code"`
ResponseTime time.Duration `json:"response_time_ms"`
ResponseBody string `json:"response_body"`
ErrorMessage string `json:"error_message,omitempty"`
TestedAt time.Time `json:"tested_at"`
}
WebhookTestResult represents the result of testing a webhook.