Hjælpecenter
Chat API

Webhooks

Sidst opdateret:

Oversigt over webhooks

Webhooks giver ChatLab mulighed for at give dine systemer besked i samme øjeblik, der sker noget i dine chatbots. I stedet for at foretage polling mod Management API eller eksportere data manuelt, registrerer du et HTTPS-endpoint, hvortil ChatLab sender et signeret HTTP POST i realtid - når en besøgende efterlader et lead, indsender en kontaktformular, bedømmer en samtale, anmoder om et menneske, eller når en AI-handling kører.

Typiske anvendelsesmuligheder:

  • send nye leads direkte ind i dit CRM i samme sekund, de opsamles
  • giv dit team besked i Slack, når en besøgende anmoder om Live Chat (livechat)
  • før samtalebedømmelser og opsummeringer ind i dine egne analyseværktøjer
  • overvåg afvikling af AI actions (AI-handlinger), og opsæt advarsler ved fejl

Tilgængelighed: Webhooks er tilgængelige fra STANDARD-planen og opefter (funktion: Webhooks).

Her konfigureres det: I administratorappen åbner du Account settings -> Webhooks (Kontoindstillinger -> Webhooks) lige ved siden af sektionen Management API. Webhooks er på kontoniveau - ét endpoint kan modtage hændelser fra alle dine robotter eller fra et filtreret undersæt.

Opsætning af et endpoint

  1. Åbn Account settings -> Webhooks (Kontoindstillinger -> Webhooks), og klik på Create endpoint (Opret endpoint).
  2. Udfyld endpoint-formularen:
    • Name (Navn) - en etiket til din egen reference, f.eks. "CRM-synkronisering" eller "Slack-notifikationer".
    • URL - den HTTPS-adresse, som ChatLab sender hændelser til via POST.
    • Events (Hændelser) - vælg, hvilke hændelsestyper dette endpoint skal modtage (se oversigten nedenfor). Vælg kun det, du har brug for; hændelser med høj volumen som f.eks. ai_action.executed kan generere en stor mængde trafik.
    • Bot filter (valgfrit) - begræns endpointet til specifikke robotter. Lad feltet stå tomt for at modtage hændelser fra alle robotter på din konto.
    • Custom form filter (valgfrit) - sender indsendelser fra én specifik tilpasset formular til dette endpoint. Det indsnævrer kun hændelsen custom_form.submitted; alle andre hændelser, du abonnerer på (leads, kontaktanmodninger, samtaler, Live Chat, AI-handlinger), leveres uanset denne indstilling.
  3. Indsend. Endpointets secret (hemmelighed) vises præcis én gang i bekræftelsesdialogen - kopiér den med det samme, og opbevar den sikkert. Du skal bruge den til at verificere signaturer (se Sikkerhed nedenfor). Værdien i klartekst kan ikke hentes igen senere.

Hvert endpoint har også:

  • Aktiver/deaktiver-knap - sæt leveringer på pause uden at slette endpointet. Deaktiverede endpoints kasserer hændelser uden besked (de lægges ikke i kø til senere).
  • Send sample event (Send testhændelse) - leverer en signeret testanmodning til din URL, så du kan verificere din modtager fra start til slut. Du kan vælge hændelsestype og redigere testværdierne før afsendelse, så dit script modtager realistiske data. Testen ankommer som en almindelig levering med eventType svarende til dit valg (eller som webhook.test for et simpelt forbindelsestjek).
  • Roll secret (Rul hemmelighed) - genererer en ny hemmelighed og ugyldiggør den gamle. Brug dette, hvis hemmeligheden kan være blevet kompromitteret. Den nye hemmelighed vises igen kun én gang. Opdater din modtager, før du ruller nøglen, da leveringer ellers vil fejle ved signaturverificeringen på din side.
  • Delivery log (Leveringslog) - en liste over nylige leveringer for det enkelte endpoint med tidsstempel, hændelsestype, HTTP-status returneret af din server og svartid. Mislykkedes leveringer og automatiske pauser (circuit breaker) er synlige her. Loggen gemmes i 14 dage.

Hændelseskuvert (envelope)

Enhver levering er en HTTP POST med Content-Type: application/json. Brødteksten har altid den samme kuvertstruktur; data-objektet er specifikt for den enkelte hændelsestype:

{
  "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 for hver hændelse. Bruges til deduplikering, hvis din behandling skal være idempotent.
  • eventType - en af de typer, der er dokumenteret nedenfor; sendes også i headeren X-ChatLab-Event.
  • timestamp - ISO 8601 UTC-tidspunkt for, hvornår hændelsen fandt sted.
  • botId / botName - den bot, hændelsen tilhører.
  • conversationId / sessionId - samtalekonteksten, når det er relevant.

Hændelseskatalog

lead.created

Udløses, når en besøgende indsender sine kontaktoplysninger - via lead collection form (leadopsamlingsformularen), før-formularen til Live Chat eller en tilpasset formular, der bruges til leadopsamling.

{
  "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 kontaktoplysningerne blev opsamlet: LEAD_COLLECTION_FORM (leadopsamlingsformular), LIVE_CHAT_FORM (før-formular til Live Chat), CONVERSATION (AI'en opsnappede oplysningerne under chatten), ADMIN_DATA_UPDATE eller UPDATE_CLIENT_CONTEXT (redigeret på ChatLabs side). Indsendelser via formularen til menneskelig support udløser aldrig denne hændelse - de udløser i stedet contact_form.submitted.
  • email, name, phone - kontaktoplysningerne tilknyttet lead-posten.
  • Når en tilpasset formular bruges til leadopsamling, inkluderes alle felter defineret i formularen under fields i formularens rækkefølge, og formCodeName / formName identificerer formularen. Ved den klassiske leadformular er begge null, og fields er et tomt array.
  • Hver post i fields er {name, value, type}. name er feltets tekniske navn, som forbliver uændret, selvom etiketten redigeres - brug det til tilknytning (mapping) i dit CRM.
  • For multichoice-felter er value et array af de valgte indstillinger. Afkrydsningsfelter er individuelle poster med værdierne "true" / "false".
  • For file-felter er value et downloadlink til den uploadede fil; webhooken indeholder aldrig selve filindholdet.
  • pageUrl - den side, den besøgende befandt sig på ved indsendelsen.

contact_form.submitted

Udløses, når en besøgende indsender formularen til menneskelig supportkontakt eller en tilpasset formular, der bruges 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 - den adresse, den besøgende efterlod, og den adresse, dit supportteam skal svare til.
  • source - CUSTOM_FORM, når kontaktformularen understøttes af en tilpasset formular, CONTACT_FORM for den indbyggede.
  • formCodeName / formName - identificerer den bagvedliggende tilpassede formular; begge er null for den indbyggede formular.
  • Når en tilpasset formular anvendes, inkluderes alle felter defineret på formularen i fields (samme {name, value, type}-format som i lead.created). Ved den indbyggede kontaktformular udfyldes kun email og message, fields er et tomt array, og formularidentifikatorerne er null.
  • message - det tilknyttede beskedfelt eller alle udfyldte værdier sat sammen, hvis formularen ikke har et specifikt beskedfelt.

custom_form.submitted

Udløses ved enhver indsendelse af en tilpasset formular, uanset formularens formål. Bemærk, at formularer med leadopsamling eller menneskelig kontakt som formål også udløser deres dedikerede hændelser lead.created / contact_form.submitted - abonner på den ene eller den anden afhængigt af, om du ønsker den generelle eller den specialiserede visning, og dedupliker på 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 - formularens faste systemnavn, som ikke ændrer sig, hvis du omdøber formularen; brug det til at dirigere indsendelser i dit eget system. formName er den viste etiket, som de besøgende ser.
  • fields anvender de samme {name, value, type}-poster som lead.created: værdier for flervalg er arrays, og filværdier er downloadlinks.
  • purpose - STANDALONE, LEAD_COLLECTION eller HUMAN_CONTACT, afhængigt af hvordan formularen er forbundet med chatbotted.

conversation.started

Udløses, når en besøgende sender den første besked 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 præcise ordlyd af den besøgendes åbningsbesked. null hvis samtalen blev åbnet uden beskedindhold.
  • chatSource - den kanal, samtalen kom ind fra: WIDGET, WHATSAPP, MESSENGER, VOICE, VOICE_PHONE, API, BOOKING, AIRBNB eller IDOBOOKING.
  • byAdmin - true når samtalen kommer fra forhåndsvisningen af chatbotted inde i ChatLab-administratorpanelet frem for fra en rigtig besøgende. Brug det til at holde dine egne testsamtaler ude af dit CRM.
  • countryCode - ISO-landekode udledt af den besøgendes IP-adresse, null hvis den ikke kunne fastslås.
  • ipAddress - den besøgendes IP-adresse set fra ChatLab, null når den ikke er tilgængelig. Behandl den som personoplysninger under GDPR, og gem den kun, hvis du har et lovligt grundlag.

conversation.rated

Udløses, når en besøgende bedømmer et botsvar med tommel op eller tommel ned (se Samtalebedømmelse).

{
  "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. Fjernelse af en bedømmelse udløser ikke hændelsen, så du modtager aldrig en neutral værdi.

conversation.summarized

Udløses, når ChatLab genererer en opsummering af en afsluttet 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 genererede opsummeringstekst. Opsummeringer genereres et par minutter efter, at samtalen bliver inaktiv, så denne hændelse ankommer senere end resten af samtalehændelserne.
  • language - ISO-kode for det sprog, opsummeringen blev skrevet på, svarende til sproget i samtalen.

client.summarized

Udløses, når ChatLab opdaterer en klients AI-profil. Profilen genopbygges på baggrund af den tidligere profil plus opsummeringen af den netop afsluttede samtale, hvorfor denne hændelse følger efter conversation.summarized for den samme samtale. Klienter identificeres via e-mail, hvilket er grunden til, at adressen gentages på øverste niveau 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 - identifikator til at matche klienten mod dit eget CRM. Den er null for anonyme besøgende, som aldrig efterlod en adresse, og hændelsen udløses stadig for dem - spring disse leveringer over, hvis din integration er baseret på e-mail.
  • client - den kontaktpost, ChatLab har om denne person: email, name, phone, countryCode og ipAddress. Alle nøgler er altid til stede; ukendte værdier er null.
  • clientSummary - den fulde profiltekst som almindelig tekst, ikke en ændringsoversigt (diff). Den erstatter den tidligere opsummering fuldstændigt, så gem den som en overskrivning i stedet for at tilføje den.
  • Profilen genopbygges kun for robotter, der har chat memory (sam选取talehukommelse) aktiveret, og kun for samtaler, der var inaktive længe nok til at blive opsummeret - forvent denne hændelse nogle minutter efter, at samtalen slutter, ikke med det samme.

live_chat.requested

Udløses, når AI'en overdrager samtalen til Live Chat (livechat), enten fordi den besøgende bad om et menneske, eller fordi botten vurderede, at et menneske var nødvendigt.

{
  "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 - i øjeblikket altid AI, fordi overdragelsen altid initieres af bottens Live Chat-handling, også når den besøgende anmoder om det i almindelig tekst. Behandl det som en åben enum: håndter ukendte værdier i stedet for udelukkende at forvente AI.
  • Hændelsen angiver, at der blev anmodet om en overdragelse, ikke at en operatør har overtaget den. Vent på live_chat.started for at bekræfte dette.

live_chat.started

Udløses, når en operatør deltager, og Live Chat-sessionen rent faktisk begynder.

{
  "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 bevidst tomt. Alt, hvad du behøver, findes i kuverten: botId identificerer chatbotted, og conversationId / sessionId knytter hændelsen til den samtale, du allerede har modtaget live_chat.requested for.

live_chat.ended

Udløses, når Live Chat-sessionen slutter.

{
  "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 længe operatøren var i samtalen, målt fra det øjeblik sessionen startede. Feltet udelades i de sjældne tilfælde, hvor en session afsluttes uden nogensinde at have været startet.

ai_action.executed

Udløses hver gang botten udfører en AI action (AI-handling) - et administreret integrationskald eller en tilpasset API-funktion. Dette er en hændelse med høj volumen: En aktiv e-handelsbot kan udføre hundredvis af handlinger om dagen, og et enkelt svar fra en besøgende kan udløse flere. Tilmeld dig den på et dedikeret endpoint, eller vær sikker på, at din modtager kan håndtere datamængden.

{
  "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 udførte handling, som AI'en ser det, for eksempel search_products for en integreret løsning eller det navn, du gav en tilpasset API-handling.
  • status - SUCCESS eller ERROR.
  • durationMs - hvor lang tid handlingen tog i millisekunder. Nyttigt til at opdage en langsom integration, før de besøgende klager over det.
  • errorMessage - årsagen til fejlen, udfyldes kun når status er ERROR; ellers null.

webhook.test

Sendes via knappen Send sample event (Send testhændelse), når du udfører et simpelt forbindelsestjek. Signeret på nøjagtig samme måde som en rigtig hændelse.

{
  "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, altid den samme. Kuvertfelterne indeholder eksempelværdier, så behandl aldrig en webhook.test-levering som rigtige data.
  • Dette er den eneste hændelsestype, du ikke kan abonnere på på et endpoint: Den sendes efter anmodning fra administratorpanelet og når altid det endpoint, du klikkede på, uanset hvilke hændelser det lytter efter.

Sikkerhed: verifikation af leveringer

Hver levering indeholder fire headers:

Header Værdi
X-ChatLab-Signature sha256=<hex hmac> - HMAC-SHA256-signatur af payloaden
X-ChatLab-Timestamp Unix-tid i sekunder, da leveringen blev signeret
X-ChatLab-Event Hændelsestypen, f.eks. lead.created
X-ChatLab-Delivery Unikt leverings-id, svarende til request bodyens eventId

Signaturen beregnes som HMAC-SHA256 over strengen {timestamp}.{rawBody} ved hjælp af din slutpunktshemmelighed (endpoint secret), hvor {timestamp} er værdien af X-ChatLab-Timestamp, og {rawBody} er den rå, ubehandlede request body. Bekræft altid mod de bytes - re-serialisering af parset JSON ændrer bytesekvensen og ødelægger signaturen.

For at beskytte mod replay-angreb skal du afvise leveringer, hvis X-ChatLab-Timestamp er ældre end 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 verifikationen mislykkes, skal du svare med 401 og kassere payloaden. Behandl aldrig ubekræftede leveringer - enhver, der opdager din URL, kan sende arbitrær JSON til den via POST.

Leveringsadfærd

Forstå disse garantier, før du bygger videre på webhooks:

  • Svar hurtigt. Dit slutpunkt skal svare inden for 3 sekunder, ellers tæller leveringen som mislykket. Svar 2xx med det samme, og behandl payloaden asynkront (sæt den i kø, og kvitter derefter) - foretag ikke CRM-kald eller databaseopdateringer, før du svarer.
  • Fire-and-forget, højst én gang (at-most-once). Hver hændelse får præcis ét leveringsforsøg - der er ingen genforsøg. Hvis dit slutpunkt er nede, timer ud eller returnerer en status, der ikke er 2xx, er hændelsen tabt og bliver ikke leveret igen. Webhooks er notifikationer, ikke et replikeret datalager: Når du har brug for garanteret fuldstændighed, skal du afstemme mod Management API eller dine lead-eksporter.
  • Afbryder (circuit breaker). Efter 5 mislykkede leveringer i træk for en bot sættes leveringer for den pågældende bot på pause i 5 minutter. Hændelser, der opstår under pausen, droppes, og leveringsloggen viser CIRCUIT_OPEN-poster, så du kan se præcist, hvornår og hvorfor trafikken blev stoppet. Leveringer, der springes over på grund af en åben afbryder, tæller ikke med i automatisk deaktivering.
  • Automatisk deaktivering. Kontrollen kører i det øjeblik, en levering mislykkes, aldrig på en timer. Hvis en levering mislykkes, og der ikke har været en vellykket levering i 7 dage - talt fra den seneste succes eller fra slutpunktets oprettelsesdato, hvis det aldrig er lykkedes - deaktiveres slutpunktet, og du modtager en e-mailnotifikation. En enkelt 2xx på et hvilket som helst tidspunkt nulstiller uret. Et slutpunkt, der ikke modtager trafik, deaktiveres aldrig, fordi intet mislykkes. Genaktiver det fra Account settings (Kontoindstillinger), når din modtager er rettet; fejltælleren og tidsstemplet for automatisk deaktivering nulstilles, når du slår det til igen, og hændelser, der blev overset, mens det var slået fra, indhentes ikke.
  • 410 Gone. Hvis dit slutpunkt svarer med HTTP 410 Gone, deaktiverer ChatLab det med det samme. Brug dette til programmatisk at nedlægge et slutpunkt fra modtagersiden.
  • Idempotens. Dublerede leveringer forventes ikke under normal drift, men hvis din behandling skal være strengt idempotent, skal du deduplikere ud fra eventId (også tilgængelig i headeren X-ChatLab-Delivery).

Begrænsninger

  • Op til 10 webhook-slutpunkter pr. konto.
  • Opbevaring af leveringslog: 14 dage. Ældre poster fjernes automatisk.

Relaterede artikler