Záznam doručení a resources
Každá správa v oboch smeroch sa zaznamená — stav, pokusy, kód odpovede, trvanie, kód chyby a bezpečná správa, zhodný tajný kľúč, obmedzený výňatok odpovede a informácia, či bola odpoveď dlhšia — nikdy tajný kľúč, podpis ani prihlasovacia hlavička.
Modely
| Model | Kľúč | Tabuľka |
|---|---|---|
InboundEndpoint | models.inbound_endpoint | webhook_inbound_endpoints |
InboundDelivery | models.inbound_delivery | webhook_inbound_deliveries |
OutboundEndpoint | models.outbound_endpoint | webhook_outbound_endpoints |
OutboundDelivery | models.outbound_delivery | webhook_outbound_deliveries |
OutboundAttempt | models.outbound_attempt | webhook_outbound_attempts |
Náhrada musí rozširovať model balíka. Každý časový údaj sa ukladá a číta v UTC; každá tabuľka má mäkké mazanie (čistenie maže natrvalo). Vzťahy: InboundEndpoint::owner() a deliveries(); InboundDelivery::endpoint(); OutboundEndpoint::owner() a deliveries(); OutboundDelivery::endpoint() a attemptLog(); OutboundAttempt::delivery(). Casty Casts\UtcDateTime, Casts\StoredPayload a Casts\StoredText sú verejné a môžete ich použiť na vymenenom modeli.
| Metóda | Vracia |
|---|---|
InboundEndpoint::url() | URL, na ktorú odosielateľ posiela (inbound.route.url_base + / + kľúč, inak pomenovaná trasa). |
activeSecrets() | Oba modely endpointov: list<string> — aktuálny tajný kľúč, potom predchádzajúci do konca prechodného obdobia. |
OutboundEndpoint::subscribesTo(string $eventType) | bool — zhoda s odbermi. |
OutboundDelivery::webhookId() | msg_<public_id> — webhook-id, podľa ktorého príjemcovia deduplikujú, rovnaké pri každom pokuse aj opätovnom doručení. |
Dopyty nad záznamom
Webhooks::inbound()->deliveries($endpoint)->where('status', 'failed')->latest('received_at')->paginate();
Webhooks::outbound()->deliveries()->where('status', 'retrying')->get();
Webhooks::outbound()->attempts($delivery); // every attempt of every series, in orderJSON resources
V RoundlyConsulting\Webhooks\Http\Resources. Časové údaje sa zobrazia ako ISO 8601 UTC, enumy ako ich hodnota — nikdy tajný kľúč, šifrovaný text, hodnota hlavičky ani názov triedy:
| Resource | Polia |
|---|---|
InboundEndpointResource | id, name, url, scheme, handler, enabled, disabled_reason, owner, last_received_at, secret_rotated_at, previous_secret_expires_at, created_at |
InboundDeliveryResource | id (verejné id), endpoint_id, event_type, status, signature_slot, received_at, processed_at, failed_at, runs, error_code, error_message, payload_pruned; ->withPayload(bool $include = true) pridá sanitizovaný obsah |
OutboundEndpointResource | id, name, description, url (scheme://host[:port]/…), host, event_types, názvy hlavičiek, scheme, enabled, disabled_reason, consecutive_failures, last_success_at, last_failure_at, owner, created_at |
OutboundDeliveryResource | id (msg_…), endpoint_id, event_type, status, attempts, series, max_attempts, next_attempt_at, last_response_status, last_error_code, succeeded_at, failed_at, created_at |
OutboundAttemptResource | number, series, manual, started_at, duration_ms, response_status, response_truncated, error_code, error_message, retry_after_seconds |
use RoundlyConsulting\Webhooks\Http\Resources\InboundDeliveryResource;
use RoundlyConsulting\Webhooks\Http\Resources\InboundEndpointResource;
use RoundlyConsulting\Webhooks\Http\Resources\OutboundAttemptResource;
$endpoints = InboundEndpointResource::collection(Webhooks::for($team)->inbound()->endpoints()); // owner eager-loaded
$delivery = InboundDeliveryResource::make($inboundDelivery)->withPayload(); // + the sanitized payload
$attempts = OutboundAttemptResource::collection(Webhooks::outbound()->attempts($outboundDelivery));Vracajte ich z vlastných kontrolérov. Balík neobsahuje trasy ani rozhranie na správu — len prichádzajúcu trasu — takže API a obrazovky, ktorými zákazníci spravujú svoje endpointy, sú vaše, postavené na prístupoch a týchto resources. OutboundEndpointResource::redact(string $url) je samostatné skrytie URL pre vaše vlastné zobrazenia.
Zobrazenie vlastníka
Vlastník endpointu sa zobrazí len cez WebhookOwnerResource — {id, type} so základným názvom triedy, takže App\Models\Team nikdy neodíde von. Ak chcete pridať meno alebo avatar, nasmerujte resources.owner na vlastný JsonResource; dostane model vlastníka. Pri kolekciách endpointov vlastníka prednačítajte (endpoints() to robí) — inak sa owner zobrazí ako null.
// config/webhooks.php
'resources' => ['owner' => App\Http\Resources\WebhookOwnerResource::class],Databázová schéma
Päť tabuliek pomenovaných podľa webhooks.tables.*, pre MySQL a PostgreSQL. Id sa riadia primary_key_type, morf vlastníka key_type; cudzie kľúče pri mazaní obmedzujú, takže doručenie si drží riadok endpointu a pokus svoje doručenie, kým ich retencia v správnom poradí neodstráni:
| Tabuľka | Stĺpce |
|---|---|
webhook_inbound_endpoints | morf owner (nullable), name, url_key (32, unikátny), signature_scheme, scheme_options, secret a previous_secret (šifrované, skryté), previous_secret_expires_at, secret_rotated_at, handler, prepísania (rate_limit_per_minute, max_payload_bytes, allowed_content_types, tolerance_seconds), enabled, disabled_at, disabled_reason, last_received_at. |
webhook_inbound_deliveries | public_id (ULID, unikátny), endpoint_id, idempotency_key (unikátny spolu s endpoint_id — poistka deduplikácie), external_id, event_type, status, headers, payload (uložený, skrytý), payload_bytes, payload_digest, payload_pruned_at, signature_slot, received_at, queued_at, processing_started_at, processed_at, failed_at, runs, attempts, duration_ms, last_error_code, last_error_message. |
webhook_outbound_endpoints | morf owner (nullable), name, description, url (šifrovaná, skrytá), url_host, signature_scheme, scheme_options, secret a previous_secret (šifrované, skryté), event_types, headers (šifrované, skryté), rate_limit_per_minute, enabled, disabled_at, disabled_reason, consecutive_failures, last_success_at, last_failure_at. |
webhook_outbound_deliveries | public_id (ULID za msg_…), endpoint_id, event_type, body (uložené, skryté), body_bytes, body_digest, payload_pruned_at, status, attempts, series, max_attempts, next_attempt_at, claimed_until, dispatch_token, dispatched_at, redispatch_at, last_attempt_at, succeeded_at, failed_at, last_response_status, last_duration_ms, last_error_code, last_error_message. |
webhook_outbound_attempts | delivery_id, series a number (unikátne s delivery_id), manual, started_at, duration_ms, response_status, response_body (obmedzený výňatok), response_truncated, retry_after_seconds, remote_address, error_code, error_message, next_attempt_at. |
Prejavte lásku k open source
Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.
Ďalšie spôsoby podpory vrátane kryptomienOdoslaním daru súhlasíte s našimi podmienkami prijímania darov.
Chcete to zabudovať do svojho produktu?
Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.