DOKUMENTACJA INTEGRACJI

API i webhooki.
Połącz z Webmon.

Połącz Webmon z własną aplikacją, CRM-em lub scenariuszem automatyzacji. Odbieraj powiadomienia o ogłoszeniach jako JSON i działaj od razu.

HTTP POSTJSONWebhooki
Programista łączy serwer monitoringu z aplikacją i powiadomieniami

01 / PODSTAWY

Webmon wysyła. Twoja aplikacja odbiera.

Gdy monitoring wykryje ogłoszenia spełniające warunki powiadomień, Webmon wysyła żądanie HTTP POST na adres ustawiony na Twoim koncie. Dane trafiają w treści żądania jako tablica JSON — jedna paczka może zawierać kilka ogłoszeń.

Monitorowane wyszukiwanieWebmonTwój endpoint
Dostępny zakres API

Podstawą integracji zewnętrznych są webhooki wychodzące. Publiczne REST API do pobierania historii ogłoszeń lub zarządzania kontem nie jest obecnie udostępnione. Endpointy rozszerzenia przeglądarkowego opisujemy osobno poniżej.

02 / KONFIGURACJA

Pierwszy webhook w trzech krokach

  1. 1

    Przygotuj adres odbiorczy

    Utwórz publicznie dostępny endpoint HTTPS przyjmujący POST z JSON-em. Możesz też użyć adresu webhooka wygenerowanego przez narzędzie automatyzacji.

  2. 2

    Włącz webhooki w Webmon

    Otwórz Ustawienia konta, zaznacz „przez webhooki”, wklej adres w polu „Adres URL Webhooka (także Discord)” i zapisz zmiany. Wymagany jest pakiet Plus lub wyższy.

  3. 3

    Wyślij próbne powiadomienie

    Kliknij „Przetestuj webhook” i sprawdź żądanie po stronie odbiornika. Następnie upewnij się, że masz aktywne monitorowane wyszukiwanie z włączonymi powiadomieniami.

03 / FORMAT JSON

Co znajdziesz w powiadomieniu?

Poniższy przykład przedstawia paczkę z jednym ogłoszeniem wysłaną na własny adres odbiorczy. Wielkość liter w nazwach pól ma znaczenie.

Przykładowe ogłoszenie
[
  {
    "Title": "Rower miejski — stan bardzo dobry",
    "Url": "https://www.olx.pl/d/oferta/przykladowe-ogloszenie.html",
    "Price": 125000,
    "PhotoUrl": "https://example.com/rower.jpg",
    "IDPortalUrl": 92,
    "UrlTitle": "Rowery w Warszawie",
    "UrlUrl": "https://www.olx.pl/sport-hobby/rowery/warszawa/",
    "TriggerSend": true
  }
]
PoleTypZnaczenie
TitlestringTytuł ogłoszenia lub powiadomienia.
UrlstringAdres źródłowego ogłoszenia lub aukcji.
PricenumberCena w najmniejszych jednostkach waluty. Dla PLN: 125000 to 1250,00 zł.
PhotoUrlstringAdres zdjęcia lub grafiki zastępczej, zależnie od źródła.
IDPortalUrlnumberIdentyfikator monitorowanego wyszukiwania w Webmon, nie identyfikator ogłoszenia. Opcjonalny.
UrlTitlestringNazwa monitorowanego wyszukiwania. Opcjonalna.
UrlUrlstringAdres monitorowanego wyszukiwania. Opcjonalny; może być pominięty także w teście.
TriggerSendbooleanFlaga kwalifikacji ogłoszenia do powiadomienia. Opcjonalna.
MessagestringDodatkowy opis zdarzenia, np. komunikat Snajpera Allegro. Opcjonalny.
Obsługuj różnice między źródłami

Zestaw pól zależy od portalu i rodzaju powiadomienia. Część danych może być pusta lub pominięta; mogą pojawić się dodatkowe pola. Nie zakładaj, że cena zawsze jest dostępna. Powiadomienia Snajpera zawierają Title, Url, Price, PhotoUrl i Message, bez danych wyszukiwania.

04 / ADRESY I METODY

Gdzie trafiają żądania?

POSThttps://twoja-aplikacja.pl/webmon/TAJNY_IDENTYFIKATOR

Twój endpoint odbiorczy

To adres, który konfigurujesz w Webmon. Żądanie wychodzi z Webmon do Twojej aplikacji. Nagłówek: Content-Type: application/json. Treść: tablica ogłoszeń opisana powyżej.

POST/panel/testwebhook/

Test z panelu konta

Przycisk „Przetestuj webhook” wywołuje ten adres w Webmon. Wymaga zalogowania w panelu i pola webhook z adresem odbiornika. Wysyła przykładowe ogłoszenie. Odpowiedź jest tekstowa, a nie JSON.

Endpointy rozszerzenia przeglądarkowego

Poniższe adresy obsługują przepływ oficjalnego rozszerzenia. Nie stanowią publicznego API do zarządzania kontem. Dla własnej integracji użyj webhooków; niestandardowy dostęp uzgodnij z nami przez kontakt.

GET/api/addurl/:payload

Dodaje monitorowany adres. Parametr payload to obiekt JSON zakodowany przez encodeURIComponent(JSON.stringify(payload)). Poprawny przebieg kończy się przekierowaniem 302 do /panel/urls/, nie odpowiedzią JSON. Takie samo przekierowanie może nastąpić przy błędzie — wynik należy sprawdzić w panelu.

PoleTypZnaczenie
urlstringAdres wyszukiwania. Wymagany.
titlestringNazwa wyszukiwania.
paraml / userEmailstringDane identyfikujące użytkownika przekazywane przez rozszerzenie; wymagane co najmniej jedno z tych pól.
portalIdnumberIdentyfikator portalu używany przez rozszerzenie.
userId / userPortalIdstringIdentyfikator konta na portalu do dopasowania konta.
userPortalLoginstringLogin konta na portalu do dopasowania konta.
POST/api/sendsession

Zapisuje sesję portalu przekazaną przez rozszerzenie. Dane obejmują cookies (tablica), localStorage i sessionStorage (obiekty), userAgent oraz dane identyfikujące konto. Sukces zwraca JSON z ok, cookies (liczba zapisanych cookies), localStorageKeys, sessionStorageKeys i idPortalAccount.

Dane sesji są poufne. Korzystaj z tego mechanizmu przez oficjalne rozszerzenie; nie umieszczaj ich w publicznych przykładach ani logach integracji.

05 / WŁASNA APLIKACJA

Minimalny odbiornik w Node.js

Przykład używa Express. To szkielet: miejsce zapisu do bazy lub kolejki oznaczyliśmy komentarzem. Po zapisaniu danych szybko zwróć odpowiedź 2xx. Adres z przykładu zastąp swoim endpointem HTTPS. Tajny identyfikator ustaw jako zmienną środowiskową WEBHOOK_SECRET i wpisz ten sam adres w ustawieniach Webmon.

Node.js / Express
const express = require('express');
const app = express();
const secret = process.env.WEBHOOK_SECRET;
if (!secret) throw new Error('Ustaw WEBHOOK_SECRET');

app.use(express.json({ limit: '1mb' }));
app.post('/webmon/:secret', async (req, res, next) => {
  if (req.params.secret !== secret) return res.sendStatus(404);
  if (!Array.isArray(req.body)) {
    return res.status(400).json({ error: 'Oczekiwano tablicy JSON' });
  }
  try {
    for (const item of req.body) {
      if (!item || typeof item.Url !== 'string') continue;
      // Tutaj trwale zapisz dane lub dodaj je do kolejki.
      // Jeśli wyświetlasz Title w HTML, escapuj jego treść.
    }
    return res.sendStatus(204);
  } catch (error) {
    return next(error);
  }
});

app.listen(3000);
Dostarczanie i uwierzytelnianie

Standardowy webhook nie dodaje podpisu HMAC ani nagłówka Authorization. Użyj HTTPS i trudnego do odgadnięcia, poufnego adresu. Nie zakładaj gwarantowanych ponowień, kolejności ani dostarczenia dokładnie raz. Jeśli nie chcesz duplikatów ogłoszeń, sprawdzaj ich Url we własnej bazie; dla zdarzeń Snajpera uwzględniaj też treść Message.

06 / WERYFIKACJA

Sprawdź integrację od końca do końca

Najpierw wyślij lokalną próbkę na swój odbiornik przez cURL. Ta komenda testuje Twoją aplikację; nie wywołuje API Webmon.

Test odbiornika / cURL
curl --request POST \
  'https://twoja-aplikacja.pl/webmon/TAJNY_IDENTYFIKATOR' \
  --header 'Content-Type: application/json' \
  --data '[{"Title":"Test Webmon","Url":"https://example.com/oferta/1","Price":125000}]'
Odpowiedź odbiornikaCo sprawdzić
200 / 204Żądanie przyjęte przez Twój serwer. Sprawdź, czy dane zostały zapisane.
400Zweryfikuj tablicę JSON i reguły walidacji odbiornika.
401 / 403 / 404Sprawdź adres, poufny identyfikator i dostęp do endpointu z internetu.
5xx / brak odpowiedziSprawdź logi, certyfikat HTTPS i czas obsługi po stronie odbiornika.

Potem użyj „Przetestuj webhook” w panelu Webmon i sprawdź logi odbiornika. Komunikat „Wysłano pomyślnie” w panelu nie jest potwierdzeniem przetworzenia danych przez Twój serwer. Ostateczną weryfikacją jest odebrane żądanie i poprawny zapis danych.

07 / GOTOWE INTEGRACJE

Wolisz powiadomienia na kanale?

Webmon rozpoznaje adresy webhooków Slacka i Discorda i dopasowuje do nich format wiadomości. W tych integracjach wysyłany jest format platformy: blocks dla Slacka oraz embeds dla Discorda. Do własnej aplikacji użyj zwykłego endpointu, który odbierze tablicę JSON.

Zbuduj swój przepływ powiadomień

Wklej adres odbiornika w ustawieniach i połącz monitoring z narzędziami, których już używasz.

Przejdź do ustawieńPorozmawiajmy o integracji →