> For the complete documentation index, see [llms.txt](https://docs.opencityitalia.it/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.opencityitalia.it/stanza-del-cittadino/installazione-e-manutenzione/open-city-crawler.md).

# Open City Crawler

Open City Crawler è il componente che legge e mantiene aggiornati i contenuti dei siti della Pubblica Amministrazione, così da renderli disponibili al chatbot di OpenCity AI.

Visita periodicamente le pagine dei siti comunali, come farebbe un utente reale. Legge le pagine, estrae il testo utile e lo salva.

Quando una pagina cambia, la aggiorna. Quando non è più raggiungibile, la segnala. Questo processo è continuo e automatico. Non richiede interventi manuali.

Da qui si configurano siti e tenant. Si avviano scansioni manuali. Si consulta il dettaglio completo di ogni sito, lo stato della fase di probe (adattamento personalizzato al delay del sito) e gli eventuali blocchi attivi.

Ogni giorno alle 02:00, viene eseguito su Windmill un job schedulato che fa partire il crawl di tutti i siti disponibili per mantenerli aggiornati.

## Gestione configurazioni di Crawl

Nella pagina delle variabili di windmill, è possibile modificare alcune delle variabili di configurazione su come viene eseguito il crawl (ad esmepio dopo quanti giorni eliminare una pagina dalla base di dati che non viene più trovata, dopo quanti giorni diminuire la frequenza di scan in caso di contenuto invariato etc.).\
\
Nella dashboard Crawler Control, è disponibile il pannello configurazioni che mostra tutte i valori di configurazione attualmente attivi, inclusi quelli non modificabili.

**Parametri disponibili**

| Parametro                       | Default   | Cosa controlla                                                           |
| ------------------------------- | --------- | ------------------------------------------------------------------------ |
| `cfg_max_adaptive_delay`        | 60s       | Massimo ritardo applicato ai siti che bloccano le richieste              |
| `cfg_clean_runs_before_decay`   | 3         | Quanti crawl "puliti" prima di ridurre il ritardo su un sito             |
| `cfg_delay_backoff_multiplier`  | 2.0       | Di quanto aumenta il ritardo ad ogni blocco (×2 = raddoppio)             |
| `cfg_delay_decay_multiplier`    | 0.7       | Di quanto si riduce il ritardo dopo crawl puliti (×0.7 = −30%)           |
| `cfg_default_scan_freq_hours`   | 24h       | Ogni quante ore si ri-visita una pagina nuova                            |
| `cfg_scan_freq_stable_runs`     | 3         | Crawl stabili prima di allungare la frequenza di ri-visita               |
| `cfg_scan_freq_increase_factor` | 2.0       | Moltiplicatore di allungamento (24h → 48h → 96h…)                        |
| `cfg_max_scan_freq_hours`       | 168h      | Cap massimo di ri-visita (1 settimana)                                   |
| `cfg_ttl_days`                  | 16 giorni | Dopo quanti giorni senza visita una pagina viene rimossa dall'inventario |

## Qualità e affidabilità

Ogni modifica del crawler viene verificata automaticamente prima del rilascio.

La suite di test controlla le principali funzionalità del servizio. Questo aiuta a mantenere affidabili le scansioni e gli aggiornamenti dei contenuti.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.opencityitalia.it/stanza-del-cittadino/installazione-e-manutenzione/open-city-crawler.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
