NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Webhooks for Laravel

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

ModelKľúčTabuľka
InboundEndpointmodels.inbound_endpointwebhook_inbound_endpoints
InboundDeliverymodels.inbound_deliverywebhook_inbound_deliveries
OutboundEndpointmodels.outbound_endpointwebhook_outbound_endpoints
OutboundDeliverymodels.outbound_deliverywebhook_outbound_deliveries
OutboundAttemptmodels.outbound_attemptwebhook_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ódaVracia
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 order

JSON 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:

ResourcePolia
InboundEndpointResourceid, name, url, scheme, handler, enabled, disabled_reason, owner, last_received_at, secret_rotated_at, previous_secret_expires_at, created_at
InboundDeliveryResourceid (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
OutboundEndpointResourceid, 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
OutboundDeliveryResourceid (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
OutboundAttemptResourcenumber, 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ľkaStĺpce
webhook_inbound_endpointsmorf 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_deliveriespublic_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_endpointsmorf 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_deliveriespublic_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_attemptsdelivery_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 kryptomien

Odoslaní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.