Powiadomienia do programu do zarządzania

Jeśli korzystasz z programu do zarządzania lub narzędzi automatyzacji, takich jak Zapier czy Make, możesz otrzymywać powiadomienia w momencie, gdy rezerwacja zostanie utworzona, zmieniona, anulowana, a także gdy gość przyjedzie lub wyjedzie. Koniec z ręcznym przepisywaniem dat.

Dom, z którego wysyłane są wiadomości do ekranu programu do zarządzania z listą rezerwacji
Wszystko, co dzieje się w Roraima, trafia automatycznie do programu, którego już używasz.

Do czego służą powiadomienia

Za każdym razem, gdy status rezerwacji ulega zmianie, Roraima wysyła krótką wiadomość na wskazany przez Ciebie adres. Twój program do zarządzania odbiera ją i aktualizuje dane: oznacza pokój jako zajęty, przygotowuje sprzątanie, pisze do gościa, aktualizuje rozliczenia. Wszystko to, co wcześniej robiłeś ręcznie, przeglądając panel, teraz wykonuje program, z którego już korzystasz.

Rezerwacja potwierdzona

Nowa rezerwacja, pochodząca z Twojego sklepu, innego połączonego kanału lub dodana ręcznie.

Rezerwacja zmieniona

Zmiana dat, godziny lub liczby osób: wiadomość zawiera informacje o tym, co było wcześniej i co jest teraz.

Rezerwacja anulowana

Odwołanie rezerwacji, niezależnie od źródła: daty można od razu ponownie wystawić na sprzedaż w programie do zarządzania.

Przyjazd, wyjazd, brak

Gość przyjechał, wyjechał lub się nie pojawił: przydatne do organizowania sprzątania i zamykania spraw.

Gdzie je włączyć

W panelu otwórz menu Połączenia i wybierz Powiadomienia do programu do zarządzania. Wklej tam adres otrzymany z programu do zarządzania (zazwyczaj znajduje się w ustawieniach, w sekcji dotyczącej połączeń przychodzących), nadaj mu nazwę, która ułatwi Ci jego identyfikację, i wybierz, jakie powiadomienia mają być wysyłane: Rezerwacja potwierdzona, Rezerwacja zmieniona, Rezerwacja anulowana, Przyjazd zarejestrowany, Wyjazd zarejestrowany, Gość się nie pojawił. Po zapisaniu Roraima od razu sprawdzi, czy adres jest poprawny i dostępny w Internecie. Możesz podłączyć do pięciu adresów, na przykład program do zarządzania i arkusz kalkulacyjny obsługiwany przez Zapier.

Każdy adres posiada swój klucz podpisu, który zobaczysz w dowolnym momencie: otwórz «Klucz podpisu» pod adresem i kliknij «Pokaż», a klucz pojawi się na osobnej stronie. Należy go przekazać do programu do zarządzania lub osobie, która go konfiguruje: służy on do rozpoznania, że wiadomość rzeczywiście pochodzi z Roraima. Traktuj go jak hasło. Jeśli podejrzewasz, że trafił w niepowołane ręce, kliknij «Utwórz nowy klucz»: stary przestanie działać, a nowy, który znowu zobaczysz przyciskiem «Pokaż», należy wprowadzić do programu.

Jeśli powierzyłeś dom zarządcy z aktywnym upoważnieniem, on również może podłączyć swój program do zarządzania i otrzymywać powiadomienia o rezerwacjach, którymi się dla Ciebie opiekuje.

Dane gościa, tylko jeśli są potrzebne

Domyślnie wiadomość zawiera wszystko, co niezbędne do organizacji pobytu: obiekt lub przestrzeń, daty, godzinę, liczbę osób, kwotę i status rezerwacji. Imię, nazwisko, e-mail i telefon gościa pozostają ukryte.

Jeśli Twój program do zarządzania ich potrzebuje, na przykład do wysłania wiadomości powitalnej lub wypełnienia karty gościa, zaznacz pole Dołącz imię i nazwisko, e-mail i telefon gościa dla danego adresu. Opcja ta jest domyślnie wyłączona: włączasz ją samodzielnie, adres po adresie, tylko tam, gdzie jest to naprawdę potrzebne.

Test przed rozpoczęciem

Obok każdego aktywnego adresu znajduje się przycisk Wyślij test. Roraima natychmiast wyśle przykładową wiadomość, o tej samej strukturze co prawdziwe, ale z wymyślonymi danymi. Wynik pojawi się od razu na górze strony oraz na liście ostatnich wysyłek. Żadna rezerwacja nie zostanie naruszona, a test możesz powtarzać dowolną liczbę razy podczas konfigurowania połączenia.

Jeśli program do zarządzania nie odpowiada

To się zdarza: serwer programu jest w trakcie konserwacji, połączenie zostało przerwane, ktoś zmienił ustawienia. Roraima nie traci powiadomienia i ponawia próbę samodzielnie, w coraz dłuższych odstępach czasu, od minuty do całego dnia, przez prawie dwie doby.

Jeśli jednak przez dwadzieścia cztery godziny z rzędu dany adres odpowiada tylko błędami, Roraima zawiesi go i wyśle Ci e-mail z powiadomieniem. Gdy program znów będzie osiągalny, kliknij Wznów obok adresu, a powiadomienia zaczną ponownie docierać. Ten sam przycisk służy po użyciu opcji Wstrzymaj, z której korzystasz, gdy chcesz na chwilę zatrzymać wysyłkę, na przykład podczas zmiany programu do zarządzania: powiadomienia o rezerwacjach, które zmienią się w trakcie przerwy, nie zostaną wysłane, a wszystko ruszy od momentu, w którym wznowisz działanie.

Na liście Ostatnie wysyłki znajdziesz dwadzieścia ostatnich powiadomień ze wszystkich Twoich adresów, wraz z datą, typem powiadomienia, rezerwacją, adresem i wynikiem: Dostarczone, Oczekuje na kolejną próbę lub Niedostarczone (w tym ostatnim przypadku również z podaniem przyczyny).

Od tego miejsca strona jest skierowana do osób zajmujących się techniczną stroną połączenia. Jeśli to nie Ty, prześlij im ten adres: znajdą tu wszystko, czego potrzebują.

Dla programistów

Każde powiadomienie to żądanie POST z treścią JSON, jedno zdarzenie na żądanie, wysyłane na adres zarejestrowany przez właściciela. Oto nagłówki, które przychodzą za każdym razem:

Content-Type: application/json
User-Agent: Roraima-Webhooks/1.0
Roraima-Event-Id: evt_5f2c9a1e7b3d4c6f8a0b1c2d3e4f5a6b
Roraima-Event-Type: booking.confirmed
Roraima-Signature: t=1791986607,v1=5d41402abc4b2a76b9719d911017c592ae51ec1e4d1a8c67b2f0d7d8a3e9c410

Roraima-Event-Id to ta sama wartość co pole id w treści, a Roraima-Event-Type to to samo co pole type: możesz zdecydować, co zrobić z powiadomieniem, jeszcze przed przeczytaniem jego treści.

Zdarzenia

  • booking.confirmed: rezerwacja została potwierdzona. Dotyczy również tych, które wpłynęły z innych połączonych kanałów oraz dodanych ręcznie. Może też dotrzeć dla rezerwacji, którą Twój system już zna: gdy kanał, z którego pochodzi, ponownie uznaje ją za ważną po wcześniejszym anulowaniu, albo gdy znów staje się ważna po tym, jak właściciel rozwiązał nakładanie się z inną rezerwacją. W takich przypadkach previous_status wskazuje, z jakiego statusu wraca: zaktualizuj rezerwację o tym samym booking.id, zamiast tworzyć nową.
  • booking.modified: zmieniły się daty, godzina lub liczba osób. Pole changes wskazuje, co dokładnie.
  • booking.cancelled: rezerwacja została anulowana. cancelled_by informuje, czy anulowanie nastąpiło z poziomu Roraima, czy z kanału źródłowego.
  • booking.checked_in: gość przyjechał.
  • booking.checked_out: gość wyjechał. Jeśli wyjazd został zamknięty automatycznie po upływie terminu, closed_automatically ma wartość true.
  • booking.no_show: gość się nie pojawił.

Właściciel wybiera w panelu, jakie zdarzenia mają być wysyłane na dany adres: jeśli jakiś typ nie jest Ci potrzebny, możesz poprosić o jego wyłączenie.

Pełny przykład

Treść przychodzi w formie zwartej, w jednej linii; tutaj została sformatowana dla lepszej czytelności. Pola mogą z czasem przybywać, ale te obecne nie zmieniają nazwy ani znaczenia, dopóki zachowana jest ta sama api_version: ignoruj te, których nie znasz.

{
  "id": "evt_5f2c9a1e7b3d4c6f8a0b1c2d3e4f5a6b",
  "type": "booking.confirmed",
  "created_at": "2026-10-02T14:03:27Z",
  "api_version": "2026-09-30",
  "test": false,
  "data": {
    "booking": {
      "id": 4812,
      "company_id": 37,
      "status": "confirmed",
      "previous_status": "pending",
      "source": "native",
      "external_id": null,
      "product": { "id": 16702211, "name": "Camera Mirto" },
      "structure_id": 12,
      "check_in": "2026-10-16",
      "check_out": "2026-10-19",
      "booking_mode": "daily",
      "time_slot": null,
      "guests": 2,
      "amount": "390.00",
      "currency": "EUR",
      "cancelled_by": null,
      "closed_automatically": false,
      "sequence": 90417
    },
    "changes": null,
    "actor": "buyer",
    "guest": {
      "name": "Anna Keller",
      "email": "[email protected]",
      "phone": "+491701234567"
    }
  }
}

Dla booking.modified, pole changes zawiera tylko zmienione pola, każde z wartością poprzednią i obecną:

"changes": {
  "check_out": { "from": "2026-10-19", "to": "2026-10-20" },
  "guests": { "from": 2, "to": 3 }
}

Znaczenie pól w booking:

  • status i previous_status: status po zdarzeniu i przed nim. W przypadku booking.modified, gdzie status się nie zmienia, oba są identyczne. previous_status ma wartość null tylko dla rezerwacji utworzonej jako już potwierdzona, dodanej ręcznie lub pochodzącej z połączonego kalendarza.
  • source: źródło rezerwacji. native ze sklepu Roraima, manual dodana ręcznie, ical_airbnb, ical_booking_com, ical_vrbo lub ical_generic z połączonego kalendarza.
  • external_id: dla rezerwacji z połączonego kalendarza, identyfikator nadany przez ten kalendarz; w przeciwnym razie null.
  • check_in i check_out: daty w formacie RRRR-MM-DD. Dla rezerwacji godzinowych, booking_mode ma wartość hourly, a time_slot zawiera czas, np. {"from": "10:00", "to": "12:00"}.
  • guests: liczba osób zadeklarowana na pobyt.
  • amount i currency: kwota jako tekst z dwoma miejscami po przecinku oraz waluta; oba pola null, gdy rezerwacja nie ma określonej kwoty, co często zdarza się w przypadku rezerwacji z kalendarzy.
  • actor: kto wywołał zdarzenie. guest, buyer, vendor (właściciel), manager (zarządca z upoważnieniem), admin, channel (połączony kalendarz) lub system.
  • guest: imię, nazwisko, e-mail i telefon gościa, tylko jeśli właściciel włączył odpowiednią opcję dla danego adresu; w przeciwnym razie null.

Weryfikacja podpisu

Każde żądanie jest podpisane kluczem podpisu adresu, który zaczyna się od whsec_. Nagłówek Roraima-Signature ma postać t=<timestamp>,v1=<hex>, gdzie v1 to HMAC-SHA256 z t, kropki i treści żądania, obliczony przy użyciu pełnego klucza, wraz z przedrostkiem.

Trzy kwestie mają kluczowe znaczenie: obliczaj podpis na surowej treści, dokładnie w takiej formie, w jakiej dotarła, a nie na ponownie przetworzonym JSON-ie; porównuj oba podpisy w czasie stałym; odrzuć żądanie, jeśli t różni się o więcej niż 300 sekund od Twojego zegara. W PHP:

<?php
$secret = getenv('RORAIMA_WEBHOOK_SECRET'); // whsec_...
$body   = file_get_contents('php://input');
$header = $_SERVER['HTTP_RORAIMA_SIGNATURE'] ?? '';

if (!preg_match('/^t=(\d+),v1=([0-9a-f]{64})$/', $header, $m)
    || abs(time() - (int) $m[1]) > 300
    || !hash_equals(hash_hmac('sha256', $m[1] . '.' . $body, $secret), $m[2])) {
    http_response_code(400);
    exit;
}

$event = json_decode($body, true);
// Save $event['id'] and skip it if you have already seen it,
// then reply at once and do the slow work afterwards.
http_response_code(200);

W Node, bez zewnętrznych bibliotek:

const http = require('node:http');
const crypto = require('node:crypto');

const SECRET = process.env.RORAIMA_WEBHOOK_SECRET; // whsec_...

function isValid(rawBody, header) {
  const m = /^t=(\d+),v1=([0-9a-f]{64})$/.exec(header || '');
  if (!m) return false;
  if (Math.abs(Math.floor(Date.now() / 1000) - Number(m[1])) > 300) return false;
  const expected = crypto.createHmac('sha256', SECRET)
    .update(m[1] + '.')
    .update(rawBody)
    .digest();
  return crypto.timingSafeEqual(expected, Buffer.from(m[2], 'hex'));
}

http.createServer((req, res) => {
  const chunks = [];
  req.on('data', (c) => chunks.push(c));
  req.on('end', () => {
    const rawBody = Buffer.concat(chunks);
    if (!isValid(rawBody, req.headers['roraima-signature'])) {
      res.writeHead(400).end();
      return;
    }
    const event = JSON.parse(rawBody.toString('utf8'));
    // Save event.id and skip it if you have already seen it,
    // then reply at once and do the slow work afterwards.
    res.writeHead(200).end();
  });
}).listen(3000);

Duplikaty i kolejność otrzymywania

To samo powiadomienie może dotrzeć więcej niż raz, na przykład gdy Twoja odpowiedź zaginie w sieci i Roraima ponowi próbę. Rejestruj id każdego zdarzenia, które już obsłużyłeś, i ignoruj te, które się powtarzają.

Ponadto, przy ponownych próbach, dwa powiadomienia dotyczące tej samej rezerwacji mogą dotrzeć w innej kolejności, niż miały miejsce: booking.modified przed booking.confirmed. Aby uporządkować zdarzenia, służy booking.sequence, numer, który rośnie przy każdym powiadomieniu o tej samej rezerwacji na ten sam adres. Zachowaj ostatni zarejestrowany numer dla każdej rezerwacji i odrzucaj powiadomienia z niższym numerem. Numery nie są ciągłe: między jednym powiadomieniem a drugim może ich brakować wiele.

Odpowiedzi i ponowne próby

Powiadomienie uważa się za dostarczone, gdy Twój adres odpowie kodem 2xx w ciągu 5 sekund. Treść odpowiedzi nie jest analizowana. Każdy inny wynik liczony jest jako nieudana próba, w tym przekierowanie na inny adres (3xx): zarejestruj ostateczny adres w panelu.

Po nieudanej próbie Roraima ponawia ją po 1 minucie, następnie po 5 minutach, 15 minutach, 1 godzinie, 3 godzinach, 6 godzinach, 12 godzinach i 24 godzinach. Jeśli ostatnia próba również zakończy się niepowodzeniem, powiadomienie zostanie oznaczone jako niedostarczone. Jeśli adres odpowiada tylko błędami przez 24 godziny z rzędu, zostanie zawieszony, oczekujące powiadomienia zostaną wstrzymane, a właściciel otrzyma e-mail; działanie zostanie wznowione, gdy właściciel kliknie «Wznów». Powiadomienia powstałe w czasie, gdy adres jest zawieszony lub wstrzymany przez właściciela, nie są wysyłane.

Aby zmieścić się w 5 sekundach, najbezpieczniej jest odpowiedzieć natychmiast po sprawdzeniu podpisu i zarejestrowaniu zdarzenia, a czasochłonne operacje wykonać w późniejszym czasie.

Powiadomienie testowe

Przycisk «Wyślij test», dostępny przy aktywnych adresach, wysyła booking.confirmed o tej samej strukturze co prawdziwe, podpisane w ten sam sposób, z "test": true, booking.id równym 0 i wymyślonymi danymi. Jeśli dla adresu włączono dane gościa, one również będą wymyślone. Test jest wykonywany tylko raz, a wynik pojawia się od razu w panelu. Sprawdź pole test przed utworzeniem czegokolwiek w swoim systemie.

Rozpoznawanie danych z własnego programu

Jeśli Twój program do zarządzania wysyła już swoje rezerwacje do Roraima poprzez połączony kalendarz, powiadomienia o tych rezerwacjach wrócą również do niego. Aby je rozpoznać, użyj source oraz external_id: external_id to identyfikator, który Twój kalendarz nadał rezerwacji, ten sam, który już znasz.

Wymagania dla adresu

Panel sprawdza je już w momencie zapisu, a Roraima weryfikuje je przy każdej wysyłce:

  • Musi zaczynać się od https://, posiadać ważny certyfikat i działać na porcie 443.
  • Zawiera tylko nazwę strony i ścieżkę, bez nazwy użytkownika i hasła wewnątrz.
  • Nazwa strony musi być publiczna i dostępna z Internetu.

Połącz swój program do zarządzania

Wystarczy adres otrzymany z programu i test z poziomu panelu. Jeśli coś jest niejasne, napisz do nas.

Zobacz plany Porozmawiaj z nami