Webhook Delivery

웹훅 전달

A provider sends an event to a receiver URL and retries when delivery fails.

···
html
<div class="viz"><h3>EVENT EVT-42</h3><div class="row"><div class="box">provider</div><span class="arrow" id="arrow">→</span><div class="box" id="receiver">receiver</div></div><div class="muted" id="step">send event</div></div>
css
.viz{width:94%;height:88%;max-width:960px;padding:clamp(10px,2vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);font:600 clamp(12px,1.35vw,16px)/1.35 var(--font-sans,system-ui,sans-serif);display:flex;flex-direction:column;gap:clamp(7px,1.8vmin,13px);overflow:hidden}.viz h3{margin:0;color:var(--accent);font:700 clamp(12px,1.35vw,16px)/1.2 var(--font-sans,system-ui,sans-serif);letter-spacing:.04em}.viz .row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.viz .box{padding:clamp(5px,1.5vmin,12px);border:1px solid var(--line);border-radius:9px;background:var(--bg);text-align:center}.viz .muted{color:var(--muted)}.viz .accent{color:var(--accent)}.viz .code{font-family:ui-monospace,monospace}.viz .pill{padding:3px 7px;border:1px solid var(--line);border-radius:99px;white-space:nowrap}.viz .active{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--surface))}.viz .arrow{color:var(--accent);font:700 18px ui-monospace,monospace}#receiver{min-width:35%;transition:border-color .3s,background .3s}#receiver.ok{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 13%,var(--surface))}
js
const steps=[['→','verify signature','signature valid',true],['→','ACK timed out','retry scheduled',false],['→','retry same EVT-42','deduplicated · 200 ACK',true]];let i=0;function draw(){const s=steps[i];document.getElementById('arrow').textContent=s[0];document.getElementById('receiver').textContent=s[1];document.getElementById('receiver').classList.toggle('ok',s[3]);document.getElementById('step').textContent=s[2];i=(i+1)%steps.length}draw();setInterval(draw,1450)

A webhook is an outbound HTTP call that delivers an event without the consumer polling. The provider sends an event ID and payload, then judges delivery from the receiver response. A network failure or timeout can cause the same event to arrive again.

The demo moves through send, signature check, failed acknowledgment, and retry. A receiver should verify the signature, deduplicate by event ID, acknowledge promptly, and move slow work to a separate job.

When to use

Use it when another service must promptly notify you of events such as payment completion.

Open as page ↗