Hjelpesenter
Chat API

Webhooks

Sist oppdatert:

Oversikt over webhooks

Webhooks lar ChatLab varsle systemene dine i samme øyeblikk som noe skjer i chatbotene dine. I stedet for å spørre Management API regelmessig eller eksportere data manuelt, registrerer du et HTTPS-endepunkt, og ChatLab sender en signert HTTP POST til det i sanntid - når en besøkende legger igjen et lead, sender inn et kontaktskjema, vurderer en samtale, ber om et menneske eller når en AI-handling kjører.

Vanlige bruksområder:

  • sende nye leads rett inn i CRM-systemet ditt sekundet de registreres
  • varsle teamet ditt i Slack når en besøkende ber om live chat (nettprat i sanntid)
  • mate samtalevurderinger og sammendrag inn i dine egne analyseverktøy
  • overvåke kjøringer av AI action (AI-handling) og varsle ved feil

Tilgjengelighet: webhooks er tilgjengelige fra Standard plan og oppover (funksjon: Webhooks).

Hvor det konfigureres: i administratorappen åpner du Account settings -> Webhooks (Kontoinnstillinger -> Webhooks, rett ved siden av Management API-delen). Webhooks er på kontonivå - ett endepunkt kan motta hendelser fra alle botene dine eller fra et filtrert utvalg.

Sette opp et endepunkt

  1. Åpne Account settings -> Webhooks og klikk på Create endpoint (Opprett endepunkt).
  2. Fyll ut endepunktskjemaet:
    • Name (Navn) - en etikett til eget bruk, f.eks. "CRM sync" eller "Slack alerts".
    • URL - HTTPS-adressen ChatLab skal sende HTTP POST-hendelser til.
    • Events (Hendelser) - velg hvilke hendelsestyper dette endepunktet skal motta (se oversikten nedenfor). Velg bare det du trenger; hendelser med høyt volum som ai_action.executed kan generere mye trafikk.
    • Bot filter (Bot-filter) (valgfritt) - begrens endepunktet til spesifikke boter. La stå tomt for å motta hendelser fra alle boter på kontoen din.
    • Custom form filter (Filter for tilpasset skjema) (valgfritt) - ruter innsendinger fra ett bestemt tilpasset skjema til dette endepunktet. Det begrenser kun hendelsen custom_form.submitted; alle andre hendelser du abonnerer på (leads, kontaktforespørsler, samtaler, live chat, AI-handlinger), leveres uavhengig av denne innstillingen.
  3. Send inn. Endepunktets secret (hemmelighet) vises nøyaktig én gang i bekreftelsesdialogen - kopier den nå og oppbevar den på et trygt sted. Du trenger den for å verifisere signaturer (se Sikkerhet nedenfor). Klarteksten kan ikke hentes frem senere.

Hvert endepunkt har også:

  • Enable/disable toggle (Aktiver/deaktiver-bryter) - sett leveringer på pause uten å slette endepunktet. Deaktiverte endepunkter forkaster hendelser stille (de settes ikke i kø for senere).
  • Send sample event (Send eksempelhendelse) - leverer en signert testforespørsel til din URL slik at du kan verifisere mottakeren ende-til-ende. Du kan velge hendelsestype og redigere eksempelverdiene før sending, slik at behandleren din ser realistiske data. Testen ankommer som en vanlig levering med eventType tilsvarende valget ditt (eller som webhook.test for en enkel tilkoblingssjekk).
  • Roll secret (Roter hemmelighet) - genererer en ny hemmelighet og gjør den gamle ugyldig. Bruk dette hvis hemmeligheten kan ha blitt lekket. Den nye hemmeligheten vises igjen bare én gang. Oppdater mottakeren din før du roterer, ellers vil leveringer feile ved signaturverifisering på din side.
  • Delivery log (Leveringslogg) - en liste per endepunkt over nylige leveringer med tidsstempel, hendelsestype, HTTP-status returnert fra serveren din og responstid. Mislykkede leveringer og pauser fra sikringsmekanismen (circuit breaker) er synlige her. Loggen beholdes i 14 dager.

Hendelseskonvolutt (Event envelope)

Hver levering er en HTTP POST med Content-Type: application/json. Meldingsteksten har alltid samme konvolutt; data-objektet er spesifikt for hendelsestypen:

{
  "eventId": "9f1c1c8e-6a2b-4b9e-9d2f-3f8a1e2b4c5d",
  "eventType": "lead.created",
  "timestamp": "2026-08-13T14:22:31Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": { }
}
  • eventId - unik per hendelse. Bruk den til deduplisering hvis behandlingen din må være idempotent.
  • eventType - en av typene dokumentert nedenfor; sendes også i X-ChatLab-Event-headeren.
  • timestamp - ISO 8601 UTC-tidspunkt da hendelsen inntraff.
  • botId / botName - boten hendelsen tilhører.
  • conversationId / sessionId - samtalesammenhengen, når relevant.

Hendelseskatalog

lead.created

Utløses når en besøkende sender inn kontaktinformasjonen sin - via skjemaet for registrering av leads, forhåndsskjemaet for live chat eller et tilpasset skjema som brukes til registrering av leads.

{
  "eventId": "9f1c1c8e-6a2b-4b9e-9d2f-3f8a1e2b4c5d",
  "eventType": "lead.created",
  "timestamp": "2026-08-13T14:22:31Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "email": "jane.doe@example.com",
    "name": "Jane Doe",
    "phone": "+1 555 0123",
    "source": "LEAD_COLLECTION_FORM",
    "formCodeName": "lead_form",
    "formName": "Lead form",
    "fields": [
      {"name": "email", "value": "jane.doe@example.com", "type": "email"},
      {"name": "company", "value": "Acme Inc.", "type": "text"},
      {"name": "topics", "value": ["Billing", "Delivery"], "type": "multichoice"},
      {"name": "attachment", "value": "https://api.chatlab.com/aichat/customform/download?key=...&token=...", "type": "file"}
    ],
    "pageUrl": "https://acme.com/pricing"
  }
}
  • source - hvordan kontaktinformasjonen ble registrert: LEAD_COLLECTION_FORM (skjema for registrering av leads), LIVE_CHAT_FORM (forhåndsskjema for live chat), CONVERSATION (AI-en fanget opp opplysningene under samtalen), ADMIN_DATA_UPDATE eller UPDATE_CLIENT_CONTEXT (redigert på ChatLab-siden). Innsendinger av kontaktskjemaet for menneskelig kundestøtte utløser aldri denne hendelsen - de utløser contact_form.submitted i stedet.
  • email, name, phone - kontaktinformasjonen tilknyttet leadoppføringen.
  • Når et tilpasset skjema brukes til registrering av leads, inkluderes alle felt definert i det skjemaet i fields, i rekkefølgen fra skjemaet, og formCodeName / formName identifiserer skjemaet. Med det klassiske leadskjemaet er begge null, og fields er en tom matrise.
  • Hver oppføring i fields er {name, value, type}. name er feltets tekniske navn, uendret ved redigering av etiketter - bruk det til kobling (mapping) mot ditt CRM.
  • For multichoice-felt er value en matrise med de valgte alternativene. Avmerkingsbokser er individuelle oppføringer med "true"- / "false"-verdier.
  • For file-felt er value en nedlastingslenke til den opplastede filen; webhooken inneholder aldri selve filinnholdet.
  • pageUrl - nettsiden den besøkende var på da skjemaet ble sendt inn.

contact_form.submitted

Utløses når en besøkende sender inn kontaktskjemaet for menneskelig kundestøtte eller et tilpasset skjema som brukes til menneskelig kontakt.

{
  "eventId": "3a7b9c2d-1e4f-4a6b-8c0d-5e2f7a9b1c3d",
  "eventType": "contact_form.submitted",
  "timestamp": "2026-08-13T14:25:02Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "email": "jane.doe@example.com",
    "message": "I need help with my last invoice.",
    "source": "CUSTOM_FORM",
    "formCodeName": "contact_form",
    "formName": "Contact form",
    "fields": [
      {"name": "email", "value": "jane.doe@example.com", "type": "email"},
      {"name": "order_number", "value": "A-10293", "type": "text"},
      {"name": "message", "value": "I need help with my last invoice.", "type": "textarea"}
    ]
  }
}
  • email - adressen den besøkende la igjen, og den kundestøtteteamet ditt bør svare til.
  • source - CUSTOM_FORM når et tilpasset skjema ligger bak kontaktskjemaet, CONTACT_FORM for det innebygde skjemaet.
  • formCodeName / formName - identifiserer det tilpassede skjemaet bak forespørselen; begge er null for det innebygde skjemaet.
  • Når et tilpasset skjema brukes, inkluderes alle felt definert på skjemaet i fields (samme {name, value, type}-format som i lead.created). Med det innebygde kontaktskjemaet fylles bare email og message ut, fields er en tom matrise og skjemaindikatorene er null.
  • message - det tilknyttede meldingsfeltet, eller alle utfylte verdier slått sammen når skjemaet ikke definerer noe meldingsfelt.

custom_form.submitted

Utløses for hver innsending av tilpassede skjemaer, uavhengig av skjemaets formål. Vær oppmerksom på at skjemaer med formål om registrering av leads eller menneskelig kontakt også utløser sine dedikerte hendelser lead.created / contact_form.submitted - abonner på det ene eller det andre avhengig av om du ønsker den generelle eller den spesialiserte visningen, og dedupliser etter conversationId + timestamp hvis du abonnerer på begge.

{
  "eventId": "6c1d8e3f-2a5b-4c7d-9e0f-1a4b6c8d0e2f",
  "eventType": "custom_form.submitted",
  "timestamp": "2026-08-13T14:27:45Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "formCodeName": "warranty_claim",
    "formName": "Warranty claim",
    "fields": [
      {"name": "order_number", "value": "A-10293", "type": "text"},
      {"name": "issue", "value": "Damaged on arrival", "type": "textarea"},
      {"name": "photo", "value": "https://api.chatlab.com/aichat/customform/download?key=...&token=...", "type": "file"}
    ],
    "purpose": "STANDALONE"
  }
}
  • formCodeName - det stabile maskinnavnet på skjemaet, uendret når du endrer visningsnavnet på skjemaet; bruk det til å rute innsendinger i ditt eget system. formName er visningsnavnet som vises til besøkende.
  • fields bruker de samme {name, value, type}-oppføringene som lead.created: flervalgsverdier er matriser, filverdier er nedlastingslenker.
  • purpose - STANDALONE, LEAD_COLLECTION eller HUMAN_CONTACT, avhengig av hvordan skjemaet er koblet til chatbotten.

conversation.started

Utløses når en besøkende sender den første meldingen i en ny samtale.

{
  "eventId": "8e2f0a4b-3c6d-4e8f-a1b2-2c5d7e9f1a3b",
  "eventType": "conversation.started",
  "timestamp": "2026-08-13T14:20:11Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "firstMessage": "Do you ship to Canada?",
    "chatSource": "WIDGET",
    "byAdmin": false,
    "countryCode": "PL",
    "ipAddress": "83.12.44.7"
  }
}
  • firstMessage - den nøyaktige teksten i den besøkendes åpningsmelding. null hvis samtalen ble åpnet uten meldingsinnhold.
  • chatSource - kanalen samtalen kom inn via: WIDGET, WHATSAPP, MESSENGER, VOICE, VOICE_PHONE, API, BOOKING, AIRBNB eller IDOBOOKING.
  • byAdmin - true når samtalen kommer fra forhåndsvisningen av chatbotten inne i ChatLab-administrasjonspanelet i stedet for fra en reell besøkende. Bruk dette til å holde dine egne testsamtaler unna CRM-et ditt.
  • countryCode - ISO-landskode funnet ut fra den besøkendes IP-adresse, null når den ikke kunne fastslås.
  • ipAddress - den besøkendes IP-adresse slik den registreres av ChatLab, null når den er utilgjengelig. Behandle den som personopplysning under GDPR og lagre den bare dersom du har et lovlig behandlingsgrunnlag.

conversation.rated

Utløses når en besøkende vurderer et botsvar med tommel opp eller ned (se Samtalevurdering).

{
  "eventId": "1b4c6d8e-5f0a-4b2c-8d3e-4f7a9b1c3d5e",
  "eventType": "conversation.rated",
  "timestamp": "2026-08-13T14:31:09Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "rating": "POSITIVE"
  }
}
  • rating - POSITIVE eller NEGATIVE. Fjerning av en vurdering utløser ikke hendelsen, så du vil aldri motta en nøytral verdi.

conversation.summarized

Utløses når ChatLab genererer et sammendrag av en avsluttet samtale.

{
  "eventId": "4d7e9f1a-6b2c-4d4e-9f0a-5b8c0d2e4f6a",
  "eventType": "conversation.summarized",
  "timestamp": "2026-08-13T14:45:00Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "summary": "Visitor asked about shipping to Canada and delivery times. The bot confirmed availability and quoted 5-7 business days. Visitor left satisfied.",
    "language": "en"
  }
}
  • summary - den genererte sammendragsteksten. Sammendrag lages noen minutter etter at samtalen har blitt inaktiv, så denne hendelsen ankommer senere enn resten av samtalehendelsene.
  • language - ISO-kode for språket sammendraget ble skrevet på, som følger språket i samtalen.

client.summarized

Utløses når ChatLab oppdaterer AI-profilen til en klient. Profilen gjenoppbygges fra forrige profil pluss sammendraget av samtalen som nettopp ble avsluttet, så denne hendelsen følger etter conversation.summarized for samme samtale. Klienter identifiseres med e-post, og det er grunnen til at adressen gjentas på øverste nivå i data.

{
  "eventId": "b5d8f1a3-7c2e-4d9b-a6f0-1e3c5a7b9d2f",
  "eventType": "client.summarized",
  "timestamp": "2026-08-18T09:12:04Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "clientEmail": "jane.doe@example.com",
    "client": {
      "email": "jane.doe@example.com",
      "name": "Jane Doe",
      "phone": "+1 555 0123",
      "countryCode": "PL",
      "ipAddress": "83.12.44.7"
    },
    "clientSummary": "Returning customer interested in international shipping. Asked about delivery times to Canada twice and about return costs once."
  }
}
  • clientEmail - identifikatoren for å koble klienten mot ditt eget CRM. Den er null for anonyme besøkende som aldri har oppgitt en e-postadresse, og hendelsen utløses likevel for dem - hopp over disse leveringene hvis integrasjonen din er basert på e-post.
  • client - kontaktoppføringen ChatLab har registrert for denne personen: email, name, phone, countryCode og ipAddress. Alle nøkler er alltid til stede; ukjente verdier er null.
  • clientSummary - hele profilteksten som ren tekst, ikke en diff. Den erstatter det forrige sammendraget i sin helhet, så lagre den ved overskriving i stedet for å legge den til på slutten.
  • Profilen gjenoppbygges bare for boter med chat memory (samtaleminne) aktivert, og bare for samtaler som var inaktive lenge nok til å bli oppsummert - forvent at denne hendelsen kommer noen minutter etter at samtalen avsluttes, ikke umiddelbart.

live_chat.requested

Utløses når AI-en overlater samtalen til live chat (nettprat i sanntid), enten fordi den besøkende ba om et menneske eller fordi boten avgjorde at et menneske var nødvendig.

{
  "eventId": "7a0b2c4d-8e3f-4a5b-b0c1-6d9e1f3a5b7c",
  "eventType": "live_chat.requested",
  "timestamp": "2026-08-13T14:33:20Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "requestedBy": "AI"
  }
}
  • requestedBy - for øyeblikket alltid AI, fordi overleveringen alltid settes i gang av botens handling for live chat, også når den besøkende ber om det i klartekst. Behandle det som en åpen opplisting (open enum): håndter ukjente verdier i stedet for å forutsette utelukkende AI.
  • Hendelsen betyr at det ble bedt om en overlevering, ikke at en operatør har overtatt den. Vent på live_chat.started for dette.

live_chat.started

Utløses når en operatør kobler seg på og live chat-økten faktisk starter.

{
  "eventId": "0c3d5e7f-9a4b-4c6d-a1b2-7e0f2a4b6c8d",
  "eventType": "live_chat.started",
  "timestamp": "2026-08-13T14:33:55Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {}
}
  • data er tom med hensikt. Alt du trenger finnes i konvolutten: botId identifiserer chatbotten og conversationId / sessionId knytter hendelsen til samtalen du allerede har mottatt live_chat.requested for.

live_chat.ended

Utløses når live chat-økten avsluttes.

{
  "eventId": "2e5f7a9b-0c5d-4e7f-b2c3-8f1a3b5c7d9e",
  "eventType": "live_chat.ended",
  "timestamp": "2026-08-13T14:52:41Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "durationSeconds": 1126
  }
}
  • durationSeconds - hvor lenge operatøren var i samtalen, regnet fra det øyeblikket økten startet. Feltet utelates i de sjeldne tilfellene hvor en økt avsluttes uten noen gang å ha blitt startet.

ai_action.executed

Utløses hver gang boten utfører en AI action (AI-handling) - et administrert integrasjonskall eller en tilpasset API-funksjon. Dette er en hendelse med høyt volum: en aktiv nettbutikkbot kan utføre hundrevis av handlinger per dag, og en enkelt meldingstur fra en besøkende kan utløse flere. Abonner på den på et dedikert endepunkt, eller sørg for at mottakeren din tåler trafikkmengden.

{
  "eventId": "5f8a0b2c-1d6e-4f8a-c3d4-9a2b4c6d8e0f",
  "eventType": "ai_action.executed",
  "timestamp": "2026-08-13T14:21:03Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "actionName": "search_products",
    "status": "SUCCESS",
    "durationMs": 842,
    "errorMessage": null
  }
}
  • actionName - navnet på den utførte handlingen slik AI-en ser den, for eksempel search_products for en administrert integrasjon eller navnet du ga en tilpasset API-handling.
  • status - SUCCESS eller ERROR.
  • durationMs - hvor lang tid handlingen tok, i millisekunder. Nyttig for å oppdage en treg integrasjon før besøkende klager på den.
  • errorMessage - årsaken til feilen, fylt ut bare når status er ERROR; ellers null.

webhook.test

Sendes av knappen Send sample event (Send eksempelhendelse) når du kjører en ren tilkoblingssjekk. Signert nøyaktig som en ekte hendelse.

{
  "eventId": "9b2c4d6e-3f8a-4b0c-d5e6-0b3c5d7e9f1a",
  "eventType": "webhook.test",
  "timestamp": "2026-08-13T14:10:00Z",
  "botId": 1234,
  "botName": "Support Bot",
  "conversationId": "conv_a1b2c3",
  "sessionId": "sess_x9y8z7",
  "data": {
    "message": "Test delivery from ChatLab"
  }
}
  • message - fast tekst, alltid den samme. Konvoluttfeltene har eksempelverdier, så du må aldri behandle en webhook.test-levering som reelle data.
  • Dette er den eneste hendelsestypen du ikke kan abonnere på i et endepunkt: den sendes på forespørsel fra administrasjonspanelet og når alltid frem til endepunktet du klikket på, uavhengig av hvilke hendelser det lytter til.

Sikkerhet: verifisering av leveringer

Hver levering inneholder fire headere:

Header Verdi
X-ChatLab-Signature sha256=<hex hmac> - HMAC-SHA256-signatur av nyttelasten
X-ChatLab-Timestamp Unix-tid i sekunder da leveringen ble signert
X-ChatLab-Event Hendelsestypen, f.eks. lead.created
X-ChatLab-Delivery Unik leverings-ID, lik meldingstekstens eventId

Signaturen beregnes som HMAC-SHA256 over strengen {timestamp}.{rawBody} ved hjelp av endepunkthemmeligheten din, der {timestamp} er verdien av X-ChatLab-Timestamp og {rawBody} er den rå, uparsede forespørselskroppen. Verifiser alltid mot de bytene - reserialisering av parset JSON vil endre bytesekvensen og gjøre signaturen ugyldig.

For å beskytte mot replay-angrep bør du avvise leveringer der X-ChatLab-Timestamp er eldre enn 5 minutter.

Node.js

const crypto = require('crypto');

function verifyChatLabSignature(req, secret) {
    const signature = req.headers['x-chatlab-signature'];
    const timestamp = req.headers['x-chatlab-timestamp'];
    if (!signature || !timestamp) return false;

    // Reject stale deliveries (older than 5 minutes)
    const ageSeconds = Math.abs(Date.now() / 1000 - Number(timestamp));
    if (ageSeconds > 300) return false;

    // rawBody must be the raw request body bytes, not re-serialized JSON.
    // With Express: app.use(express.json({ verify: (req, res, buf) => { req.rawBody = buf; } }))
    const expected = 'sha256=' + crypto
        .createHmac('sha256', secret)
        .update(timestamp + '.' + req.rawBody)
        .digest('hex');

    const a = Buffer.from(signature);
    const b = Buffer.from(expected);
    return a.length === b.length && crypto.timingSafeEqual(a, b);
}

PHP

<?php
function verifyChatLabSignature(string $secret): bool
{
    $signature = $_SERVER['HTTP_X_CHATLAB_SIGNATURE'] ?? '';
    $timestamp = $_SERVER['HTTP_X_CHATLAB_TIMESTAMP'] ?? '';
    if ($signature === '' || $timestamp === '') {
        return false;
    }

    // Reject stale deliveries (older than 5 minutes)
    if (abs(time() - (int) $timestamp) > 300) {
        return false;
    }

    $rawBody = file_get_contents('php://input');
    $expected = 'sha256=' . hash_hmac('sha256', $timestamp . '.' . $rawBody, $secret);

    return hash_equals($expected, $signature);
}

Hvis verifiseringen mislykkes, svarer du med 401 og forkaster nyttelasten. Behandle aldri uverifiserte leveringer - hvem som helst som finner URL-en din, kan sende vilkårlig JSON til den via POST.

Leveringsatferd

Gjør deg kjent med disse garantiene før du bygger på webhooks:

  • Svar raskt. Endepunktet ditt må svare innen 3 sekunder, ellers regnes leveringen som mislykket. Svar med 2xx umiddelbart og behandle nyttelasten asynkront (sett den i kø, og bekreft deretter) - ikke gjør CRM-kall eller databaseoppdateringer før du svarer.
  • Fire-and-forget, høyst én gang. Hver hendelse får nøyaktig ett leveringsforsøk - det gjøres ingen nye forsøk. Hvis endepunktet ditt er nede, får tidsavbrudd eller returnerer en status som ikke er 2xx, er hendelsen tapt og vil ikke bli levert på nytt. Webhooks er varsler, ikke en replikert datalagring: når du trenger garantert fullstendighet, må du avstemme mot Management API eller lead-eksporter.
  • Sikring (circuit breaker). Etter 5 påfølgende mislykkede leveringer for en bot, settes leveringer for denne boten på pause i 5 minutter. Hendelser som oppstår under pausen, forkastes, og leveringsloggen viser CIRCUIT_OPEN-oppføringer slik at du ser nøyaktig når og hvorfor trafikken ble stoppet. Leveringer som hoppes over på grunn av en åpen sikring, teller ikke mot automatisk deaktivering.
  • Automatisk deaktivering. Sjekken kjøres i det øyeblikket en levering mislykkes, aldri på en timer. Hvis en levering mislykkes og det ikke har vært noen vellykket levering på 7 dager - regnet fra forrige suksess, eller fra opprettelsesdatoen hvis den aldri har lykkes - blir endepunktet slått av og du mottar et e-postvarsel. En enkelt 2xx når som helst tilbakestiller denne telleren. Et endepunkt som ikke mottar trafikk, blir aldri deaktivert, ettersom ingenting feiler. Reaktiver det fra Account settings (kontoinnstillinger) når mottakeren din er fikset; feiltelleren og tidsstempelet for automatisk deaktivering nullstilles når du slår det på igjen, og hendelser som gikk tapt mens det var av, etterleveres ikke.
  • 410 Gone. Hvis endepunktet ditt svarer med HTTP 410 Gone, deaktiverer ChatLab det umiddelbart. Bruk dette til å ta et endepunkt ut av drift programmatisk fra mottakersiden.
  • Idempotens. Duplikate leveringer forventes ikke under normal drift, men hvis behandlingen din må være strengt idempotent, kan du deduplisere ved hjelp av eventId (også tilgjengelig i X-ChatLab-Delivery-headeren).

Begrensninger

  • Opptil 10 webhook-endepunkter per konto.
  • Oppbevaring av leveringslogg: 14 dager. Eldre oppføringer slettes automatisk.

Relaterte artikler