Skip to main content
Attraverso l’endpoint Olostep /v1/monitors puoi creare monitor persistenti che funzionano su un programma fisso, rilevano le modifiche delle pagine e ti notificano tramite email, Slack, SMS o un webhook dedicato.
  • Crea un monitor da una query in linguaggio naturale
  • Limita le fonti con source_policy
  • Esegui controlli su programmi in linguaggio naturale (minimo ogni 10 minuti, UTC)
  • Configura notification.channels e consegna opzionale tramite webhook
  • Trasmetti il progresso del provisioning con Server-Sent Events (?stream=1)
  • Elenca, ispeziona, aggiorna, metti in pausa, riprendi ed elimina i monitor
  • Leggi eventi snapshot, artefatti di pianificazione, log di esecuzione e log degli agenti in tempo reale
Per impostazione predefinita, ogni esecuzione del monitor cattura un snapshot completo della pagina monitorata — un’immagine completa del suo stato attuale in quel momento. Se vuoi che il monitor mostri solo ciò che è nuovo o cambiato tra le esecuzioni (delta) invece dello stato completo, esprimi questa intenzione nella query.

Installazione

Crea un monitor

Crea un monitor con POST /v1/monitors. L’API convalida il tuo input, riserva un record del monitor, fornisce un agente ombra, genera una specifica del flusso di lavoro, mette in coda la pianificazione del DAG e crea un programma ricorrente.
  • query è obbligatoria — descrivi cosa monitorare in linguaggio naturale.
  • frequency è opzionale e predefinita a ogni ora. Usa frasi di pianificazione come ogni giorno alle 9am (i programmi vengono eseguiti in UTC; l’intervallo minimo è 10 minuti).
  • source_policy limita facoltativamente include_urls, exclude_urls, include_domains e exclude_domains.
  • notification configura quando e come avvisare (events + channels). La consegna del canale viene risolta in fase di esecuzione dalla pipeline del monitor — non passi i destinatari nel DAG.
  • webhook è un oggetto separato ({ "url": "https://…" }) per le chiamate HTTP oltre a notification.channels.
  • output_schema impone facoltativamente un’estrazione strutturata (JSON Schema valido).
La risposta alla creazione è HTTP 202 con status: provisioning. Il monitor passa a active dopo che la pianificazione risolve i target tracked. Effettua il polling con GET /v1/monitors/:monitor_id o passa ?stream=1 (o Accept: text/event-stream) per seguire le fasi di provisioning e i token di ragionamento delle specifiche tramite SSE.

Esempio di richiesta

Hai bisogno solo di query e frequency. I canali di notifica e i webhook possono essere aggiunti successivamente con POST /v1/monitors/:monitor_id.

Risposta

La creazione avvenuta con successo (non in streaming) restituisce HTTP 202 con un oggetto monitor. tracked è vuoto fino al termine della pianificazione; effettua il polling con GET /v1/monitors/:monitor_id fino a quando status è active e tracked.urls è popolato.

Output strutturato del monitor

Imposta output_schema quando vuoi che i risultati dell’estrazione seguano una struttura JSON specifica. Lo schema deve essere un JSON Schema valido.

Stream di provisioning

Aggiungi ?stream=1 o invia Accept: text/event-stream per ricevere eventi SSE mentre il monitor viene creato:

Notifiche e webhook

Gli avvisi sono configurati sul record del monitor e risolti in fase di esecuzione — non incorporare i target dei canali nella query di monitoraggio.

notification

Eventi di notifica

Usa events per indicare quando vuoi essere notificato. Valori consentiti: Puoi includere uno o entrambi. Ad esempio, ["changed"] avvisa solo sugli aggiornamenti dopo la base; ["first_snapshot"] conferma l’impostazione senza aspettare una differenza; ["changed", "first_snapshot"] copre entrambi. Gli events per canale su un oggetto canale utilizzano gli stessi valori e sovrascrivono l’elenco a livello superiore solo per quel canale. Tipi di canale supportati:

webhook

Separato da notification.channels, webhook.url riceve payload HTTP POST quando il monitor attiva il tuo URL di callback. Puoi usare sia un webhook che le notifiche di canale sullo stesso monitor.

Esempi

Solo email:
Callback webhook:
SMS:

Politica delle fonti

Usa source_policy per limitare quali URL e domini il pianificatore può utilizzare.

Frequenze

Imposta frequency in linguaggio naturale, ad esempio:
  • ogni ora (predefinito se omesso)
  • ogni giorno alle 9am
  • ogni giorno feriale alle 14:30
Regole:
  • Deve essere leggibile come linguaggio di pianificazione (non una domanda arbitraria del monitor).
  • Intervallo minimo: ogni 10 minuti.
  • I programmi sono memorizzati ed eseguiti in UTC (schedule.timezone è UTC).
  • Lunghezza massima: 50 caratteri.
L’API deriva un’espressione cron dal tuo testo frequency e la espone su schedule.cron. Quando il monitor è active, schedule.next_run_at mostra la prossima esecuzione in ISO 8601.

Elenca i monitor

Recupera tutti i monitor per il tuo team con GET /v1/monitors. Per impostazione predefinita, i monitor eliminati sono filtrati. Usa ?include_deleted=true per includerli.

Forma della risposta

Ottieni un monitor

Recupera un singolo monitor con GET /v1/monitors/:monitor_id. La risposta include last_run (riepilogo dell’ultimo snapshot) e total_count (conteggio degli snapshot) a meno che tu non passi include_total_count=false. Aggiungi include-diagram=true per includere un mermaid_diagram del DAG del monitor.

Forma della risposta

Elenca gli eventi del monitor

Usa GET /v1/monitors/:monitor_id/events per elencare gli eventi snapshot per un monitor. Paginazione:
  • limit (predefinito 25, massimo 100)
  • cursor (token opaco da next_cursor)
  • count_only=true restituisce solo { "total_count": N }
Gli eventi sono restituiti dal più recente. Ogni elemento include un snapshot_url pre-firmato a breve termine.

Forma della risposta

Ottieni la pianificazione del monitor

Usa GET /v1/monitors/:monitor_id/planning per ispezionare la specifica del flusso di lavoro FDA e il DAG del pianificatore dopo il provisioning.

Ottieni un’esecuzione del monitor

Usa GET /v1/monitors/:monitor_id/runs/:run_id per i metadati dello snapshot e gli eventi di log dell’agente analizzati per un’esecuzione (run_id deve iniziare con run_).

Stream dei log dell’agente

Usa GET /v1/monitors/:monitor_id/agent-logs?stream=1 (o Accept: text/event-stream) per seguire i log di CloudWatch per l’agente del monitor, filtrati per questo monitor_id. Il parametro di query opzionale since è un timestamp in millisecondi (predefinito: 30 minuti fa). Tipi di eventi SSE: ready, log, heartbeat, error.

Aggiorna un monitor

Aggiorna un monitor con POST /v1/monitors/:monitor_id. Campi supportati (includi solo ciò che vuoi cambiare):
  • metadata — unito con le chiavi esistenti; i valori di stringa vuoti eliminano le chiavi
  • frequency — ricrea il programma interno e imposta status di nuovo su active
  • notification — sostituisce l’intero oggetto di notifica
  • webhook — passa null per rimuovere
Restituisce 409 mentre status è provisioning. Quando aggiungi notification.channels senza events, l’API predefinisce events a ["changed", "first_snapshot"].

Aggiungi notifica email

Aggiungi webhook

Metti in pausa un monitor

Metti in pausa un monitor con POST /v1/monitors/:monitor_id/pause. Mettere in pausa disabilita il programma sottostante e imposta status su paused. Solo i monitor con status: active possono essere messi in pausa. Il corpo della richiesta è vuoto.
In caso di successo, restituisce 200 con il monitor e status: paused. schedule.next_run_at è null mentre è in pausa.

Riprendi un monitor

Riprendi un monitor in pausa con POST /v1/monitors/:monitor_id/resume. Riprendere riabilita il programma e imposta status di nuovo su active. Solo i monitor paused possono essere ripresi.

Elimina un monitor

Elimina un monitor con DELETE /v1/monitors/:monitor_id. L’eliminazione elimina in modo soft la riga del monitor (status: deleted) e rimuove le sue risorse di programma e agente ombra.

Stato del monitor

Esempi di casi d’uso

Di seguito sono riportati i modelli comuni di monitor. Ogni esempio ha bisogno solo di query e frequency al momento della creazione; aggiungi notification e webhook in seguito se vuoi avvisi alla prima esecuzione o su modifiche.

Nuovi lanci di Y Combinator

Osserva Y Combinator Launches per le startup pubblicate di recente. Dopo la pianificazione, tracked.type è urls e tracked.urls punta alla pagina dei lanci.
Aggiungi la consegna via email e webhook dopo che il monitor è active:
Con channels impostato e events omesso, l’API predefinisce ["changed", "first_snapshot"] così sei notificato sull’esecuzione di base e ogni volta che viene rilevata una modifica.

Post del blog dei concorrenti (AirOps, Profound)

Monitora l’indice del blog di un concorrente per nuovi post. Il pianificatore risolve tracked.urls all’URL del blog (ad esempio https://www.airops.com/blog o https://www.tryprofound.com/blog).
Dopo la creazione, un monitor di questa famiglia appare così:
Usa events: ["changed"] su notification se vuoi avvisi solo quando appaiono nuovi post, non sul primo snapshot di base.

Soglia del prezzo delle azioni (Tesla)

Monitora una fonte di dati strutturata quando la condizione è numerica piuttosto che una differenza di pagina. Il pianificatore imposta tracked.type su data_api e lascia tracked.urls vuoto.

Changelog dell’API OpenAI

Ricevi notifiche quando il changelog dell’API di OpenAI elenca nuove funzionalità, rilasci di modelli o deprecazioni. Menziona l’URL del changelog nella query o fissalo con source_policy.include_urls.
Imposta events su ["changed"] in modo da essere avvisato quando il contenuto del changelog cambia, non solo quando viene memorizzato il primo snapshot.

Gestione di più monitor

Elenca ogni monitor per il tuo team per vedere lo stato, i programmi e i target risolti in un unico posto:
Un team che esegue gli esempi sopra potrebbe vedere diversi monitor affiancati — osservazioni del blog su diverse cadenze, un controllo del prezzo data_api e un monitor di lanci YC con email e webhook configurati — con "count": 4 (o più) nella risposta.

Errori di convalida comuni

Gli endpoint del monitor restituiscono errori di convalida chiari per richieste non valide comuni:
  • query mancante o vuota
  • frequency che non è linguaggio di pianificazione, risolve troppo spesso (sotto i 10 minuti), o supera i 50 caratteri
  • Voci source_policy non valide (gli array di URL devono contenere stringhe http/https valide)
  • Forma notification non valida, events sconosciuti, o type / target del canale non valido
  • webhook.url non valido (deve essere http o https)
  • output_schema non valido (deve essere un JSON Schema valido)
  • Formato monitor_id o run_id non valido
  • Aggiornamento mentre status è provisioning (409)
  • Pausa/ripresa quando lo stato non è active / paused
Esempio di errore: