Vai al contenuto
StayParity

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.

POSThttps://pms.example.com/hooks/paritydisparity.opened
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>
  1. 1Leggi webhook-id, webhook-timestamp (secondi Unix) e webhook-signature. La firma contiene v1, una virgola e il valore in base64.
  2. 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.
  3. 3Confronta a tempo costante e verifica che il timestamp sia recente. Controlla inoltre gli identificatori già elaborati per evitare duplicati.
  4. 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

JavaScript
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.

Parliamo di una collaborazione

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.
Inviaci la tua domanda