Webhooki Wydarzenia w czasie rzeczywistym
Otrzymuj powiadomienia w czasie rzeczywistym o wszystkich wydarzeniach. Dokumenty przetworzone, OCR zakończone, klasyfikacja wykonana.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Zaufanie wiodących firm na całym świecie
OEM PARTNERSHIP
Sole official DMS partner for QNAP and ASUSTOR.
Dedicated landing pages, direct integration, data stays on your NAS.
QNAP
Sole official DMS partner for QNAP NAS — documents stay on your device, AI runs through PaperOffice.
MoreASUSTOR
Listed by ASUSTOR as “the DMS for ASUSTOR NAS” — sole official partner.
More22 typy zdarzeń, pogrupowane według encji
Subskrybuj poszczególne zdarzenia lub użyj symbolu wieloznacznego * dla wszystkich.
Dokumenty
14-
dokument.przesłanyNowy dokument przesłany do obszaru roboczego -
dokument.utworzonyAlias dla document.uploaded (kompatybilność) -
dokument.przetworzonyLinia produkcyjna OCR/AI-IDP zakończona pomyślnie -
dokument.edytowanyZaktualizowane metadane, tagi lub zawartość -
dokument.usuniętyDokument przeniesiony do kosza -
dokument.przywróconyDokument przywrócony z kosza -
document.movedDokument przeniesiony między obszarami roboczymi -
dokument.wersja_utworzonaDodano nową wersję do istniejącego dokumentu -
dokument.cykl_życia_zmienionyZmieniono status przechowywania/archiwizacji -
dokument.komentarz_dodanyOpublikowano komentarz na dokumencie -
dokument.notatka_dodanaDołączono notatkę wewnętrzną -
dokument.tag_dodanyPrzypisano tag do dokumentu -
dokument.blokada_prawna_nałożonaAktywowano blokadę prawną (niemodyfikowalna) -
dokument.blokada_prawna_zwolnionaZwolniono blokadę prawną
Zadania
3-
zadanie.zakończoneZadanie asynchroniczne zakończone pomyślnie -
zadanie.nieudaneZadanie asynchroniczne zakończone niepowodzeniem terminalnym -
zadanie.postępAktualizacja postępu podczas długotrwałych zadań
Workspaces
2-
obszar.roboczy.udostępnionyWorkspace udostępniony użytkownikowi lub zespołowi -
obszar.roboczy.udział.cofniętyWorkspace dostęp odebrany
Zadania
3-
zadanie.utworzoneUtworzono nowe zadanie -
zadanie.zakończoneOznaczono zadanie jako ukończone -
zadanie.przeterminowaneZadanie przekroczyło termin wykonania
Webhooki w Działaniu
Zobacz, jak PaperOffice Webhooks działa w praktyce — w filmie.
Każda dostawa Followuje ten sam schemat
Przewidywalna treść JSON, pięć podpisanych nagłówków HTTP, znaczniki czasu UTC w formacie ISO-8601.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6c9f1d4e7b2a5c8f1",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": {
"pofid": "doc_01HZY8K3M7P2Q9R5T1V6W4X2Y8",
"workspace_id": 17,
"filename": "invoice-2026-04-17.pdf",
"mime_type": "application/pdf",
"size_bytes": 284521,
"processing_result": {
"ocr_done": true,
"classification": "invoice",
"confidence": 0.98
}
}
} Content-Type application/json Zawsze JSON, kodowanie UTF-8 User-Agent PaperOffice-Webhook/1.0 Stały identyfikator dla list dozwolonych zapory X-PaperOffice-Event document.processed Typ dostarczanego zdarzenia X-PaperOffice-Event-ID a3b7f9c1… Unikalny ID 128-bitowy. Użyj do idempotentności. X-PaperOffice-Subscription-ID 42 ID subskrypcji otrzymującej zdarzenie X-PaperOffice-Signature sha256=… HMAC-SHA256 surowej treści, zakodowane szesnastkowo Zweryfikuj każdą dostawę za pomocą HMAC-SHA256
Oblicz HMAC-SHA256 na surowej treści żądania, używając swojego współdzielonego sekretu, a następnie porównaj z X-PaperOffice-Signature, używając porównania o stałym czasie (hash_equals, crypto.timingSafeEqual).
import crypto from 'crypto';
const app = express();
const WEBHOOK_SECRET = process.env.PAPEROFFICE_WEBHOOK_SECRET;
app.post('/webhooks/paperoffice', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.header('X-PaperOffice-Signature'); // "sha256=..."
const eventId = req.header('X-PaperOffice-Event-ID');
const eventType = req.header('X-PaperOffice-Event');
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (!signature || !crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send('invalid signature');
}
const event = JSON.parse(req.body.toString());
// eventId als Idempotency-Key speichern -> gleiche ID nicht zweimal verarbeiten
console.log(eventType, event.data);
res.status(200).send('ok');
}); Trzy strategie ponawiania, do 10 prób
Wybierz politykę dla każdej subskrypcji. Każda próba jest rejestrowana z kodem statusu, treścią odpowiedzi i czasem.
exponential Wykładnicza (domyślna)
Back-off podwaja się po każdej próbie: 30s, 60s, 120s, 240s, 480s…
linear Liniowa
Stały wzrost: 30s, 60s, 90s, 120s, 150s…
none Brak
Fire-and-forget. Brak ponowień nawet przy błędach 5xx. Przydatne do testowych webhooków.
9 punktów końcowych pod /latest/webhooks/
Pełne CRUD dla subskrypcji, dzienników dostaw, jednorazowych subskrypcji zadań i punkt końcowy testowy — wszystkie z OAuth2 Bearer, wszystkie gotowe do MCP.
/webhooks/subscribe Utwórz nową subskrypcję (nielimitowana na konto) po_webhooks_subscribe /webhooks/list Wyświetl wszystkie subskrypcje konta po_webhooks_list /webhooks/update Zaktualizuj istniejącą subskrypcję po_webhooks_update /webhooks/delete Miękkie usunięcie subskrypcji (dziennik dostaw zachowany) po_webhooks_delete /webhooks/deliveries Pobierz dziennik dostaw z filtrami (event_type, success_only) po_webhooks_deliveries /webhooks/test Wyślij zdarzenie test.ping, aby zweryfikować dostawę po_webhooks_test /webhooks/subscribe-job Jednorazowy webhook dla konkretnego job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Wyświetl subskrypcje dotyczące zadań po_webhooks_job_subscriptions /webhooks/info Dostępne zdarzenia, punkty końcowe, polityki ponawiania, informacje o podpisie po_webhooks_info Utwardzone przez projekt
HMAC-SHA256
Każda ładunek podpisany Twoim sekretem. Porównanie o stałym czasie jest obowiązkowe.
Ochrona przed SSRF
Prywatne/internalne adresy IP, localhost i punkty końcowe metadanych chmury zablokowane podczas subskrypcji i wysyłki.
Bezpieczne przed rebindingiem DNS
IP ponownie walidowane w czasie wysyłki, przypięte przez CURLOPT_RESOLVE.
HTTPS mocno preferowane
http i https akceptowane. HTTPS zalecane dla środowiska produkcyjnego.
Idempotentność Event-ID
Każda dostawa zawiera unikalny X-PaperOffice-Event-ID. Deduplikacja po Twojej stronie.
Pełny ślad audytowy
Wszystkie próby rejestrowane: kod statusu, treść odpowiedzi, czas, komunikat o błędzie.
Nielimitowane subskrypcje, zachowanie dostawy w pełni konfigurowalne
Dostępne we wszystkich planach. Płatność za użycie: 1 kredyt za udaną dostawę (HTTP 2xx). Ponowienia, zdarzenia testowe i nieudane dostawy są darmowe.
Otrzymuj wydarzenia?
Skonfiguruj swoje webhooks.