Monitoraggio tariffe per motori di prenotazione e gruppi alberghieri.
Confrontiamo la tariffa diretta di ogni hotel con Booking.com, Expedia e i siti di prenotazione su Google Hotels. I tuoi sistemi possono ricevere le discrepanze tramite un webhook firmato.
Content-Type: application/json
webhook-id: ns4k8w2q7c1m9x5t3h6v0b2r8d7f4j1g
webhook-timestamp: 1791547324
webhook-signature: v1,Xq0c…e21a=
{
"version": 1,
"id": "ns4k8w2q7c1m9x5t3h6v0b2r8d7f4j1g",
"event": "disparity.opened",
"disparityId": "jn7cq2b1x9d8w4fzr3m6kt5v0h7s2e8a",
"hotel": {
"id": "kd72mbx0vy4p9s1c6tqh8wf3gr5n2j7e",
"name": "Hotel Aurora"
},
"ota": "booking",
"stayDate": "2026-10-16",
"occupancy": 2,
"directPriceEurMinor": 18900,
"otaPriceEurMinor": 17900,
"deltaEurMinor": 1000,
"deltaPct": 5.29,
"confidence": "confirmed",
"detectedAt": "2026-10-09T12:02:00.000Z"
}Dati illustrativi dell’immaginario Hotel Aurora.
Motori di prenotazione
Monitoraggio con diversi motori di prenotazione. BON è la prima connessione diretta. Monitoriamo anche hotel con altri motori.
Connessione diretta
Con un connettore compatibile raccogliamo la tariffa dal motore come la vede il visitatore. La prima connessione disponibile è BON.
Tramite Google Hotels
Per altri motori usiamo il prezzo del sito ufficiale su Google Hotels. Non serve installazione né accesso al motore.
Nuove collaborazioni
Ogni integrazione mantiene gli stessi tipi di controllo e notifiche. Se sviluppi un motore o channel manager, scrivici per valutare la connessione.
Webhook
Una notifica firmata per ogni nuova discrepanza. Inviamo JSON all’endpoint configurato per l’hotel. Il campo version indica la versione del formato.
Campi del messaggio
- version
- La versione attuale è 1. Possono essere aggiunti campi senza cambiarla; ignora quelli sconosciuti.
- id
- Identificatore dell’invio. Rimane uguale nei tentativi successivi, nel corpo e in webhook-id. Usalo per evitare duplicati.
- event
- disparity.opened indica una nuova discrepanza. È l’unico evento disponibile.
- disparityId
- Identificatore della discrepanza.
- hotel
- Identificatore e nome dell’hotel in StayParity.
- ota
- Codice del canale in minuscolo: booking, expedia o il sito di prenotazione trovato su Google Hotels.
- stayDate
- Data del soggiorno in formato YYYY-MM-DD.
- occupancy
- Numero di ospiti per camera.
- directPriceEurMinor
- Tariffa diretta in centesimi di euro.
- otaPriceEurMinor
- Tariffa del canale in centesimi di euro.
- deltaEurMinor
- Differenza tra la tua tariffa e quella inferiore del canale, in centesimi.
- deltaPct
- Differenza come percentuale della tariffa diretta, con due decimali.
- confidence
- confirmed: verifica sulla piattaforma. sweep: rilevazione tramite aggregatore di prezzi.
- detectedAt
- Momento della prima rilevazione in UTC.
Invio e nuovi tentativi
- POST con Content-Type application/json a un indirizzo HTTPS pubblico
- Una risposta 2xx entro 10 secondi conferma la ricezione
- Risposte 5xx e timeout generano nuovi tentativi a intervalli crescenti
- Le risposte 4xx sono rifiuti e non vengono ritentate
- Non seguiamo reindirizzamenti; indica l’indirizzo finale
Criteri di notifica
- Si applicano soglie di importo e percentuale e canali scelti per ogni hotel
- Si inviano le discrepanze confermate, a meno che la regola non includa anche le rilevazioni tramite aggregatore
- L’evento viene creato all’apertura della discrepanza, non ripetutamente mentre resta aperta
- Puoi usare un endpoint per hotel o uno comune per più hotel
Verifica della firma
HMAC-SHA256 su identificatore, timestamp e corpo originale. La firma segue Standard Webhooks. Puoi utilizzare le librerie ufficiali.
webhook-id: <the payload's id>
webhook-timestamp: <unix seconds>
webhook-signature: v1,<base64 HMAC-SHA256>- 1Leggi webhook-id, webhook-timestamp (secondi Unix) e webhook-signature. La firma contiene v1, una virgola e il valore in base64.
- 2Calcola HMAC-SHA256 su id.timestamp.body, con punti come separatori e senza modificare il corpo. Rimuovi whsec_ dal segreto e decodifica il resto da base64.
- 3Confronta a tempo costante e verifica che il timestamp sia recente. Controlla inoltre gli identificatori già elaborati per evitare duplicati.
- 4I nuovi tentativi mantengono webhook-id e vengono firmati con un nuovo timestamp.
Ogni account ha un segreto per tutti i suoi hotel. Un amministratore lo crea nell’applicazione e viene mostrato una sola volta. Un nuovo segreto sostituisce il precedente.
Verifica in Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
// Or let the official library do it: npm install standardwebhooks, then
// new Webhook(secret).verify(rawBody, headers) throws unless it checks out.
// rawBody: the request body exactly as it arrived, before JSON.parse.
// headers: the request headers, with Node's lower-case names.
// secret: your whole signing secret, whsec_ prefix included.
function verify(rawBody, headers, secret, toleranceSeconds = 300) {
const id = headers["webhook-id"];
const timestamp = Number(headers["webhook-timestamp"]);
if (!id || !Number.isInteger(timestamp)) return false;
if (Math.abs(Date.now() / 1000 - timestamp) > toleranceSeconds) return false;
const key = Buffer.from(secret.replace(/^whsec_/, ""), "base64");
const expected = createHmac("sha256", key).update(`${id}.${timestamp}.${rawBody}`).digest();
return String(headers["webhook-signature"] ?? "").split(" ").some((entry) => {
const [version, signature = ""] = entry.split(",", 2);
const given = Buffer.from(signature, "base64");
return version === "v1" && given.length === expected.length && timingSafeEqual(given, expected);
});
}Esempi Python e PHP, nuovi tentativi e test nella documentazione
Gestione dell’account
Tutti gli hotel in un account. Per gruppi e partner con più strutture.
Impostazioni per hotel
Ogni hotel ha il proprio elenco di discrepanze, le proprie soglie e il proprio endpoint. Puoi cambiare hotel dall’applicazione.
Ruoli del team
Gli amministratori gestiscono membri e segreti. I membri gestiscono discrepanze e preferenze di notifica.
Configurazione iniziale
Il team aggiunge hotel e configura notifiche e accessi. Non serve installazione negli hotel.
Collaborazioni
Offri StayParity ai tuoi hotel. Parliamo del modello e dei termini adatti alla tua attività.
Segnalazione clienti
Ci presenti gli hotel con cui lavori. Ci occupiamo della configurazione e del supporto.
Rivendita
Inserisci StayParity nei servizi che offri ai tuoi hotel.
Domande frequenti
Su integrazioni e collaborazioni. Scrivici per altre domande.
- È obbligatorio usare BON?
- No. BON è la prima connessione diretta, ma monitoriamo anche altri motori tramite il prezzo del sito ufficiale su Google Hotels.
- Esiste un’API pubblica?
- Non esiste ancora un’API pubblica per i dati dell’account. Le notifiche in uscita usano webhook. Scrivici delle tue esigenze.
- Devo installare qualcosa?
- Non per monitoraggio e notifiche. Il widget opzionale richiede un tag script sul sito.