<?phpnamespace App\Services;use Illuminate\Support\Facades\Http;class FirecrawlService{ private string $apiKey; private string $baseUrl; public function __construct() { $this->apiKey = config('services.firecrawl.api_key'); $this->baseUrl = config('services.firecrawl.base_url'); } public function search(string $query, int $limit = 5): array { $response = Http::withToken($this->apiKey) ->post("{$this->baseUrl}/search", [ 'query' => $query, 'limit' => $limit, ]); return $response->json(); } public function scrape(string $url, array $options = []): array { $response = Http::withToken($this->apiKey) ->post("{$this->baseUrl}/scrape", array_merge(['url' => $url], $options)); return $response->json(); } public function interact(string $url, string $prompt, ?string $followUp = null): array { // 1. Fazer scraping para abrir uma sessão de navegador $scrapeResult = $this->scrape($url, ['formats' => ['markdown']]); $scrapeId = $scrapeResult['data']['metadata']['scrapeId']; // 2. Enviar o primeiro prompt Http::withToken($this->apiKey) ->post("{$this->baseUrl}/scrape/{$scrapeId}/interact", [ 'prompt' => $prompt, ]); // 3. Enviar o prompt de acompanhamento $result = null; if ($followUp) { $result = Http::withToken($this->apiKey) ->post("{$this->baseUrl}/scrape/{$scrapeId}/interact", [ 'prompt' => $followUp, ])->json(); } // 4. Encerrar a sessão Http::withToken($this->apiKey) ->delete("{$this->baseUrl}/scrape/{$scrapeId}/interact"); return $result ?? $scrapeResult; }}