Översikt över webhooks
Webhooks gör att ChatLab kan notifiera dina system i samma ögonblick som något inträffar i dina chattbottar. Istället för att göra förfrågningar mot Management API eller exportera data manuellt registrerar du en HTTPS-slutpunkt, och ChatLab skickar en signerad HTTP POST till den i realtid - när en besökare lämnar ett lead, skickar in ett kontaktformulär, betygsätter en konversation, efterfrågar en mänsklig agent eller när en AI-handling körs.
Typiska användningsområden:
- skicka nya leads direkt till ditt CRM så fort de samlas in
- notifiera ditt team i Slack när en besökare efterfrågar live chat (livechatt)
- mata in konversationsbetyg och sammanfattningar i dina egna analysverktyg
- övervaka körningar av AI actions (AI-handlingar) och larma vid fel
Tillgänglighet: webhooks är tillgängliga från och med Standard plan (funktion: Webhooks).
Var du konfigurerar: i administratörsappen öppnar du Account settings -> Webhooks (Kontoinställningar -> Webhooks, precis bredvid avsnittet för Management API). Webhooks ligger på kontonivå - en slutpunkt kan ta emot händelser från alla dina botar eller från ett filtrerat urval.
Konfigurera en slutpunkt
- Öppna Account settings -> Webhooks och klicka på Create endpoint (Skapa slutpunkt).
- Fyll i slutpunktsformuläret:
- Name (Namn) - en etikett för din egen referens, t.ex. "CRM sync" eller "Slack alerts".
- URL - HTTPS-adressen som ChatLab ska skicka (POST) händelser till.
- Events (Händelser) - välj vilka händelsetyper denna slutpunkt ska ta emot (se katalogen nedan). Välj bara det du behöver; händelser med hög volym som
ai_action.executedkan generera mycket trafik. - Bot filter (valfritt) - begränsa slutpunkten till specifika botar. Lämna tomt för att ta emot händelser från alla botar på ditt konto.
- Custom form filter (valfritt) - dirigerar inskickade svar från ett visst anpassat formulär till denna slutpunkt. Den filtrerar enbart händelsen
custom_form.submitted; alla andra händelser du prenumererar på (leads, kontaktförfrågningar, konversationer, livechatt, AI-handlingar) levereras oavsett denna inställning.
- Skicka in. Slutpunktens secret (hemlighet) visas exakt en gång i bekräftelsedialogen - kopiera den direkt och spara den på ett säkert ställe. Du behöver den för att verifiera signaturer (se Säkerhet nedan). Den kan inte hämtas i klartext senare.
Varje slutpunkt har även:
- Enable/disable toggle (Aktivera/inaktivera-reglage) - pausa leveranser utan att ta bort slutpunkten. Inaktiverade slutpunkter ignorerar händelser helt (de läggs inte i kö för senare).
- Send sample event (Skicka testhändelse) - levererar en signerad testförfrågan till din URL så att du kan verifiera din mottagare från ände till ände. Du kan välja händelsetyp och redigera testvärdena innan du skickar, så att din mottagare hanterar realistisk data. Testet levereras som en vanlig händelse med
eventTypematchande ditt val (eller somwebhook.testför en enkel anslutningskontroll). - Roll secret (Rotera hemlighet) - genererar en ny hemlighet och gör den gamla ogiltig. Använd detta om hemligheten kan ha läckt. Den nya hemligheten visas återigen bara en gång. Uppdatera din mottagare innan du roterar den, annars misslyckas signaturverifieringen på din sida.
- Delivery log (Leveranslogg) - en lista för varje slutpunkt med de senaste leveranserna inklusive tidsstämpel, händelsetyp, HTTP-statuskod från din server samt svarstid. Misslyckade leveranser och pauser orsakade av automatsäkringen (circuit breaker) syns här. Loggen sparas i 14 dagar.
Händelsekuvert
Varje leverans är en HTTP POST med Content-Type: application/json. Innehållet har alltid samma kuvert; data-objektet är specifikt för respektive händelsetyp:
{
"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- unikt för varje händelse. Använd det för avdubblering om din behandling måste vara idempotent.eventType- en av typerna som beskrivs nedan; skickas även i headernX-ChatLab-Event.timestamp- ISO 8601 UTC-tidpunkt då händelsen inträffade.botId/botName- boten som händelsen tillhör.conversationId/sessionId- konversationskontexten, om tillämpligt.
Händelsekatalog
lead.created
Utlöses när en besökare skickar in sina kontaktuppgifter - via leadinsamlingsformuläret, formuläret före livechatt eller ett anpassat formulär som används för leadinsamling.
{
"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- hur kontaktuppgifterna samlades in:LEAD_COLLECTION_FORM(leadinsamlingsformulär),LIVE_CHAT_FORM(formulär före livechatt),CONVERSATION(AI:n fångade upp uppgifterna under chatten),ADMIN_DATA_UPDATEellerUPDATE_CLIENT_CONTEXT(redigerades på ChatLab-sidan). Formulär för mänsklig support utlöser aldrig denna händelse - de utlösercontact_form.submittedistället.email,name,phone- kontaktuppgifterna som mappats till leadposten.- När ett anpassat formulär används för leadinsamling inkluderas alla fält som definierats i formuläret i
fields, i formulärets ordning, ochformCodeName/formNameidentifierar formuläret. Med det klassiska leadformuläret är bådanullochfieldsär en tom array. - Varje post i
fieldshar strukturen{name, value, type}.nameär fältets tekniska namn och ändras inte när etiketter redigeras - använd det för mappning till ditt CRM. - För
multichoice-fält ärvalueen array med de valda alternativen. Kryssrutor visas som enskilda poster med värdena"true"/"false". - För
file-fält ärvalueen nedladdningslänk till den uppladdade filen; webhooken innehåller aldrig själva filinnehållet. pageUrl- sidan som besökaren befann sig på när formuläret skickades.
contact_form.submitted
Utlöses när en besökare skickar in kontaktformuläret för mänsklig support eller ett anpassat formulär som används för mänsklig 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 besökaren angav och den som ditt supportteam bör svara till.source-CUSTOM_FORMnär ett anpassat formulär ligger bakom kontaktformuläret,CONTACT_FORMför det inbyggda formuläret.formCodeName/formName- identifierar det anpassade formuläret bakom förfrågan; båda ärnullför det inbyggda formuläret.- När ett anpassat formulär används inkluderas alla fält som definierats i formuläret i
fields(samma format{name, value, type}som förlead.created). Med det inbyggda kontaktformuläret fylls endastemailochmessagei,fieldsär en tom array och formuläridentifierarna ärnull. message- det mappade meddelandefältet, eller alla ifyllda värden sammanslagna om formuläret saknar ett specifikt meddelandefält.
custom_form.submitted
Utlöses vid varje inskickning av ett anpassat formulär, oavsett formulärets syfte. Observera att formulär vars syfte är leadinsamling eller mänsklig kontakt också utlöser sina dedikerade händelser lead.created / contact_form.submitted - prenumerera på den ena eller den andra beroende på om du vill ha den generiska eller den specialiserade vyn, och gör en avdubblering baserat på conversationId + timestamp om du prenumererar på båda.
{
"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- formulärets stabila systemnamn som inte ändras när du byter namn på formuläret; använd det för att dirigera inskickade uppgifter i ditt eget system.formNameär visningsnamnet som visas för besökare.fieldsanvänder samma poster med{name, value, type}somlead.created: flervalsvärden är arrayer, filvärden är nedladdningslänkar.purpose-STANDALONE,LEAD_COLLECTIONellerHUMAN_CONTACT, beroende på hur formuläret är kopplat till chattbotten.
conversation.started
Utlöses när en besökare skickar det första meddelandet i en ny konversation.
{
"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 exakta texten i besökarens första meddelande.nullom konversationen öppnades utan meddelandeinnehåll.chatSource- kanalen som konversationen kom in via:WIDGET,WHATSAPP,MESSENGER,VOICE,VOICE_PHONE,API,BOOKING,AIRBNBellerIDOBOOKING.byAdmin-truenär konversationen kommer från chattbottens förhandsgranskning i ChatLabs adminpanel istället för från en riktig besökare. Använd detta för att hålla dina egna testchattar borta från ditt CRM.countryCode- ISO-landskod hämtad från besökarens IP-adress,nullom den inte kunde fastställas.ipAddress- besökarens IP-adress som den registrerades av ChatLab,nullom den inte är tillgänglig. Behandla detta som personuppgifter enligt GDPR och lagra det endast om du har en rättslig grund.
conversation.rated
Utlöses när en besökare betygsätter ett botsvar med tumme upp eller tumme ner (se Konversationsbetyg).
{
"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-POSITIVEellerNEGATIVE. Om ett betyg tas bort utlöses inte händelsen, så du får aldrig ett neutralt värde.
conversation.summarized
Utlöses när ChatLab genererar en sammanfattning av en avslutad konversation.
{
"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 genererade sammanfattningstexten. Sammanfattningar skapas några minuter efter att konversationen blivit inaktiv, så denna händelse kommer senare än övriga konversationshändelser.language- ISO-kod för språket som sammanfattningen skrevs på, vilket följer konversationens språk.
client.summarized
Utlöses när ChatLab uppdaterar en klients AI-profil. Profilen byggs upp från den tidigare profilen plus sammanfattningen av konversationen som just avslutades, så denna händelse följer efter conversation.summarized för samma konversation. Klienter identifieras med e-postadress, vilket är anledningen till att adressen upprepas på översta nivån 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- identifieraren för att matcha klienten mot ditt eget CRM. Den ärnullför anonyma besökare som aldrig lämnat en adress, och händelsen utlöses fortfarande för dem - ignorera dessa leveranser om din integration baseras på e-post.client- kontaktposten som ChatLab har för denna person:email,name,phone,countryCodeochipAddress. Samtliga nycklar finns alltid med; okända värden ärnull.clientSummary- hela profiltexten som klartext, inte en differens. Den ersätter den tidigare sammanfattningen, så spara den genom att skriva över tidigare innehåll istället för att lägga till text.- Profilen återskapas endast för botar med chattminne aktiverat, och endast för konversationer som varit inaktiva tillräckligt länge för att sammanfattas - förvänta dig denna händelse några minuter efter att konversationen avslutats, inte omedelbart.
live_chat.requested
Utlöses när AI:n lämnar över konversationen till live chat (livechatt), antingen för att besökaren bad om en mänsklig agent eller för att boten bedömde att en människa behövdes.
{
"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- för närvarande alltidAI, eftersom överlämningen alltid startas av botens livechatt-handling, även när besökaren ber om det i klartext. Behandla fältet som en öppen enum: hantera okända värden istället för att förutsätta enbartAI.- Händelsen anger att en överlämning har begärts, inte att en operatör har tagit emot den. Vänta på
live_chat.startedför det.
live_chat.started
Utlöses när en operatör ansluter och livechattsessionen faktiskt startar.
{
"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är avsiktligt tomt. Allt du behöver finns i kuvertet:botIdidentifierar chattbotten ochconversationId/sessionIdkopplar händelsen till konversationen som du redan tagit emotlive_chat.requestedför.
live_chat.ended
Utlöses när livechattsessionen avslutas.
{
"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- hur länge operatören var aktiv i konversationen, räknat från tidpunkten då sessionen startade. Fältet utelämnas i sällsynta fall när en session avslutas utan att någonsin ha påbörjats.
ai_action.executed
Utlöses varje gång boten kör en AI action (AI-handling) - ett hanterat integrationsanrop eller en anpassad API-funktion. Detta är en händelse med hög volym: en aktiv e-handelsbot kan utföra hundratals handlingar per dag, och en enda replik från en besökare kan utlösa flera stycken. Prenumerera på denna händelse via en dedikerad slutpunkt, eller se till att din mottagare kan hantera volymen.
{
"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- namnet på den utförda handlingen så som AI:n ser det, till exempelsearch_productsför en hanterad integration eller namnet du gav till en anpassad API-handling.status-SUCCESSellerERROR.durationMs- hur lång tid handlingen tog i millisekunder. Praktiskt för att upptäcka en långsam integration innan besökare börjar klaga på den.errorMessage- orsaken till felet, finns endast med närstatusärERROR; annarsnull.
webhook.test
Skickas via knappen Send sample event (Skicka testhändelse) när du gör en enkel anslutningskontroll. Signeras på exakt samma sätt som en riktig 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 text, alltid densamma. Kuvertfälten innehåller exempelvärden, så behandla aldrig en leverans av typenwebhook.testsom riktig data.- Detta är den enda händelsetypen du inte kan prenumerera på via en slutpunkt: den skickas på begäran från adminpanelen och når alltid den slutpunkt du klickade på, oavsett vilka händelser den lyssnar på.
Säkerhet: verifiera leveranser
Varje leverans innehåller fyra headers:
| Header | Värde |
|---|---|
X-ChatLab-Signature |
sha256=<hex hmac> - HMAC-SHA256-signatur av nyttolasten |
X-ChatLab-Timestamp |
Unix-tid i sekunder när leveransen signerades |
X-ChatLab-Event |
Händelsetypen, t.ex. lead.created |
X-ChatLab-Delivery |
Unikt leverans-ID, samma som request-body-innehållets eventId |
Signaturen beräknas som HMAC-SHA256 över strängen {timestamp}.{rawBody} med din slutpunktshemlighet, där {timestamp} är värdet för X-ChatLab-Timestamp och {rawBody} är den råa, oparsade request-bodyn. Verifiera alltid mot de råa byten - om du serialiserar om parsad JSON ändras bytesekvensen vilket bryter signaturen.
För att skydda mot replay-attacker bör du avvisa leveranser vars X-ChatLab-Timestamp är äldre än 5 minuter.
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);
}
Om verifieringen misslyckas, svara med 401 och släng nyttolasten. Behandla aldrig overifierade leveranser - vem som helst som upptäcker din URL kan göra POST-anrop med godtycklig JSON till den.
Leveransbeteende
Ha dessa förutsättningar i åtanke innan du bygger funktioner baserade på webhooks:
- Svara snabbt. Din slutpunkt måste svara inom 3 sekunder, annars räknas leveransen som misslyckad. Svara
2xxomedelbart och bearbeta nyttolasten asynkront (lägg den i en kö och bekräfta därefter) - gör inga CRM-anrop eller databasskrivningar innan du svarar. - Fire-and-forget, högst en gång. Varje händelse får exakt ett leveransförsök - inga nya försök görs. Om din slutpunkt ligger nere, får en timeout eller returnerar en annan status än 2xx, är händelsen förlorad och levereras inte igen. Webhooks är aviseringar, inte ett replikerat datalager: när du behöver garanterad fullständighet, stäm av mot Management API eller dina lead-exporter.
- Circuit breaker. Efter 5 misslyckade leveranser i rad för en bot pausas leveranserna för den botten i 5 minuter. Händelser som inträffar under pausen kastas, och leveransloggen visar
CIRCUIT_OPEN-poster så att du kan se exakt när och varför trafiken stoppades. Leveranser som hoppas över av en öppen kretsbrytare räknas inte in i den automatiska inaktiveringen. - Automatisk inaktivering. Kontrollen körs i samma ögonblick som en leverans misslyckas, aldrig enligt ett schemalagt tidsintervall. Om en leverans misslyckas och det inte har skett någon lyckad leverans på 7 dagar - räknat från den senaste lyckade leveransen, eller från slutpunktens skapandedatum om den aldrig har lyckats - stängs slutpunkten av och du får en e-postavisering. Ett enda
2xx-svar när som helst återställer den tidsräkningen. En slutpunkt som inte tar emot någon trafik inaktiveras aldrig, eftersom ingenting misslyckas. Återaktivera den från Account settings (Kontoinställningar) så snart din mottagare är åtgärdad; felräknaren och tidsstämpeln för automatisk inaktivering rensas när du slår på den igen, och händelser som missades under tiden den var avstängd fylls inte i retroaktivt. - 410 Gone. Om din slutpunkt svarar med HTTP
410 Goneinaktiverar ChatLab den omedelbart. Använd detta för att programmatiskt avveckla en slutpunkt från mottagarsidan. - Idempotens. Duplicerade leveranser förväntas inte under normal drift, men om din bearbetning måste vara strikt idempotent kan du deduplicera med hjälp av
eventId(finns även i headernX-ChatLab-Delivery).
Begränsningar
- Upp till 10 webhook-slutpunkter per konto.
- Lagringstid för leveranslogg: 14 dagar. Äldre poster tas bort automatiskt.
Relaterade artiklar
- Insamling av leads - formuläret bakom
lead.created - Human Support Contact form (Kontaktformulär för mänsklig support) - formuläret bakom
contact_form.submitted - Live Chat - flödet bakom
live_chat.*-händelserna - Konversationsbetyg - tumme upp/ned bakom
conversation.rated - AI Actions - integrationerna bakom
ai_action.executed - Chat API - callbacks i webbläsarens widget (motsvarigheten till webhooks på klientsidan)
- Management API - REST-API för b伙伴thantering och användningsdata