package esl import ( "encoding/json" "fmt" "time" ) // RouteCacheEntry — запись для кэширования маршрута в FS global variable и файле. type RouteCacheEntry struct { NodeID string `json:"node_id,omitempty"` SIPGateway string `json:"sip_gateway,omitempty"` Score float64 `json:"score,omitempty"` Fallback bool `json:"fallback,omitempty"` Reason string `json:"reason,omitempty"` Error string `json:"error,omitempty"` TS int64 `json:"ts"` } // PushRoute пушит текущий маршрут в FreeSWITCH через global variable. // Если клиент не подключён — возвращает ошибку молча (вызывающий игнорирует). func PushRoute(c *Client, entry RouteCacheEntry) error { if c == nil || !c.IsConnected() { return fmt.Errorf("esl не подключён") } entry.TS = time.Now().Unix() jsonBytes, err := json.Marshal(entry) if err != nil { return fmt.Errorf("маршалинг route cache: %w", err) } cmd := fmt.Sprintf("api set_global pulse_route_json=%s", string(jsonBytes)) return c.SendAsync(cmd) }