Abikeskus
Chat API

Webhooks

Viimati uuendatud:

Webhookide ülevaade

Veebikonksud (veebikonksud) võimaldavad ChatLabil teavitada teie süsteeme kohe, kui teie vestlusrobotites midagi juhtub. Selle asemel et teha päringuid Management API poole või eksportida andmeid käsitsi, registreerite HTTPS-lõpp-punkti ja ChatLab saadab sinna reaalajas allkirjastatud HTTP POST -päringu - kui külastaja jätab müügivihje, esitab kontaktivormi, hindab vestlust, küsib inimest või kui käivitatakse tehisintellekti toiming.

Tüüpilised kasutusjuhud:

  • uute müügivihjete saatmine otse oma CRM-i samal sekundil, kui need kogutakse
  • oma meeskonna teavitamine Slackis, kui külastaja soovib reaalajas vestlust (live chat)
  • vestluste hinnangute ja kokkuvõtete edastamine oma analüütikasse
  • tehisintellekti toimingute (AI action) käivitamiste jälgimine ja vigade korral teavituste saamine

Saadavus: veebikonksud on saadaval alates paketist Standard plan (funktsioon: Webhooks).

Kus seadistada: avage administraatorirakenduses Account settings -> Webhooks (Konto seaded -> Veebikonksud; asub otse jaotise Management API kõrval). Veebikonksud on kontotasemel - üks lõpp-punkt võib võtta vastu sündmusi kõigilt teie robotitelt või filtreeritud alamhulgalt.

Lõpp-punkti seadistamine

  1. Avage Account settings -> Webhooks ja klõpsake valikul Create endpoint (Loo lõpp-punkt).
  2. Täitke lõpp-punkti vorm:
    • Name (Nimi) - silt teie enda tarbeks, nt "CRM sync" või "Slack alerts".
    • URL - HTTPS-aadress, kuhu ChatLab sündmused POST-päringuga saadab.
    • Events (Sündmused) - valige, milliseid sündmustüüpe see lõpp-punkt vastu võtab (vaadake allolevat kataloogi). Valige ainult need, mida vajate; suure mahuga sündmused, nagu ai_action.executed, võivad tekitada palju liiklust.
    • Bot filter (Roboti filter) (valikuline) - piirake lõpp-punkt konkreetsete robotitega. Jätke tühjaks, et saada sündmusi kõigilt oma konto robotitelt.
    • Custom form filter (Kohandatud vormi filter) (valikuline) - suunab ühe kohandatud vormi esitamised sellesse lõpp-punkti. See kitsendab ainult sündmust custom_form.submitted; kõik muud sündmused, mida tellite (müügivihjed, kontaktipäringud, vestlused, Live Chat, tehisintellekti toimingud), toimetatakse kohale sellest seadistusest sõltumata.
  3. Esitage vorm. Lõpp-punkti saladus (secret) kuvatakse õnnestumise dialoogis täpselt üks kord - kopeerige see kohe ja hoidke seda turvaliselt. Vajate seda allkirjade kontrollimiseks (vaadake jaotist Turvalisus allpool). Lihtteksti ei saa hiljem enam vaadata.

Igal lõpp-punktil on ka:

  • Enable/disable toggle (Lüliti Luba/keela) - peatab edastused ilma lõpp-punkti kustutamata. Keelatud lõpp-punktid jätavad sündmused vaikselt vahele (neid ei panda järjekorda hilisemaks).
  • Send sample event (Saada näidissündmus) - toimetab teie URL-ile allkirjastatud testpäringu, et saaksite oma vastuvõtjat otsast lõpuni kontrollida. Saate valida sündmuse tüübi ja muuta näidisväärtusi enne saatmist, et teie töötleja näeks realistlikke andmeid. Test saabub tavalise edastusena, kus eventType vastab teie valikule (või väärtusega webhook.test lihtsa ühenduvuse kontrolli puhul).
  • Roll secret (Uuenda saladust) - genereerib uue saladuse ja muudab vana kehtetuks. Kasutage seda, kui saladus võib olla lekkinud. Uut saladust kuvatakse taas ainult üks kord. Enne uuendamist värskendage oma vastuvõtjat, vastasel juhul ebaõnnestub teie poolel edastuste allkirja kontrollimine.
  • Delivery log (Edastuslogi) - lõpp-punktipõhine loend viimastest edastustest koos ajatempli, sündmuse tüübi, teie serveri tagastatud HTTP-oleku ja vastusajaga. Ebaõnnestunud edastused ja automaatse katkestuse (circuit breaker) pausid on siin nähtavad. Logi säilitatakse 14 päeva.

Sündmuse ümbrik

Iga edastus on HTTP POST -päring päisega Content-Type: application/json. Kehal on alati sama ümbrik (envelope); objekt data on spetsiifiline sündmuse tüübile:

{
  "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 - sündmuse kohta unikaalne. Kasutage seda duikaatide eemaldamiseks, kui teie töötlemine peab olema idempotentne.
  • eventType - üks allpool dokumenteeritud tüüpidest; saadetakse ka päises X-ChatLab-Event.
  • timestamp - ISO 8601 UTC aeg, millal sündmus toimus.
  • botId / botName - robot, millele sündmus kuulub.
  • conversationId / sessionId - vestluse kontekst, kui see on kohaldatav.

Sündmuste kataloog

lead.created

Käivitub, kui külastaja esitab oma kontaktandmed - läbi müügivihjete kogumise vormi, Live Chati eelvormi või müügivihjete kogumiseks kasutatava kohandatud vormi.

{
  "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 - kuidas kontaktandmed koguti: LEAD_COLLECTION_FORM (müügivihjete kogumise vorm), LIVE_CHAT_FORM (Live Chati eelvorm), CONVERSATION (tehisintellekt tuvastas andmed vestluse käigus), ADMIN_DATA_UPDATE või UPDATE_CLIENT_CONTEXT (muudetud ChatLabi poolel). Inimtoe kontaktivormi esitamised ei käivita seda sündmust kunagi - need käivitavad selle asemel sündmuse contact_form.submitted.
  • email, name, phone - kontaktandmed, mis on seotud müügivihje kirjega.
  • Kui müügivihjete kogumiseks kasutatakse kohandatud vormi, kaasatakse massiivi fields kõik sellel vormil määratletud väljad, vormi järjekorras, ning formCodeName / formName tuvastavad vormi. Klassikalise müügivihje vormi puhul on mõlemad null ja fields on tühi massiiv.
  • Iga kirje massiivis fields on kujul {name, value, type}. name on välja tehniline nimi, mis jääb siltide muutmisel samaks - kasutage seda vastendamiseks oma CRM-is.
  • Väljade multichoice puhul on value valitud valikute massiiv. Märkeruutude väljad on eraldi kirjed väärtustega "true" / "false".
  • Väljade file puhul on value üleslaaditud faili allalaadimislink; veebikonks ei kanna kunagi faili sisu.
  • pageUrl - leht, kus külastaja esitamise hetkel viibis.

contact_form.submitted

Käivitub, kui külastaja esitab inimtoe kontaktivormi või kohandatud vormi, mida kasutatakse inimesega kontakteerumiseks.

{
  "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 - aadress, mille külastaja jättis ja millele teie tugimeeskond peaks vastama.
  • source - CUSTOM_FORM, kui kontaktivormi taga on kohandatud vorm, CONTACT_FORM sisseehitatud vormi puhul.
  • formCodeName / formName - tuvastavad päringu taga oleva kohandatud vormi; mõlemad on sisseehitatud vormi puhul null.
  • Kui kasutatakse kohandatud vormi, kaasatakse kõik sellel vormil määratletud väljad massiivi fields (sama vorming {name, value, type} nagu sündmusel lead.created). Sisseehitatud kontaktivormi puhul täidetakse ainult email ja message, fields on tühi massiiv ja vormi identifikaatorid on null.
  • message - vastendatud sõnumiväli või kõik täidetud väärtused kokku liidetuna, kui vorm ei määratle sõnumivälja.

custom_form.submitted

Käivitub iga kohandatud vormi esitamisel, olenemata vormi eesmärgist. Pange tähele, et vormid, mille eesmärk on müügivihjete kogumine või inimkontakt, käivitavad lisaks ka oma spetsiaalse sündmuse lead.created / contact_form.submitted - tellige üks või teine sõltuvalt sellest, kas soovite üldist või spetsialiseeritud vaadet, ning eemaldage duplikaadid väärtuste conversationId + timestamp alusel, kui tellite mõlemad.

{
  "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 - vormi stabiilne masinnimi, mis ei muutu vormi ümbernimetamisel; kasutage seda esitamiste suunamiseks oma süsteemis. formName on külastajatele kuvatav silt.
  • fields kasutab samu kirjeid {name, value, type} nagu lead.created: mitmikvalikute väärtused on massiivid, failide väärtused on allalaadimislingid.
  • purpose - STANDALONE, LEAD_COLLECTION või HUMAN_CONTACT, sõltuvalt sellest, kuidas vorm on vestlusrobotiga seotud.

conversation.started

Käivitub, kui külastaja saadab uue vestluse esimese sõnumi.

{
  "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 - külastaja avasõnumi täpne tekst. null, kui vestlus avati ilma sõnumi sisuta.
  • chatSource - kanal, mille kaudu vestlus saabus: WIDGET, WHATSAPP, MESSENGER, VOICE, VOICE_PHONE, API, BOOKING, AIRBNB või IDOBOOKING.
  • byAdmin - true, kui vestlus pärineb ChatLabi administraatoripaneelis olevast vestlusroboti eelvaatest, mitte päriskülastajalt. Kasutage seda oma testvestluste CRM-ist eemal hoidmiseks.
  • countryCode - külastaja IP-aadressi põhjal tuvastatud ISO riigikood, null, kui seda ei õnnestunud määrata.
  • ipAddress - külastaja IP-aadress nii, nagu ChatLab seda näeb, null, kui pole saadaval. Käsitlege seda isikuandmetena GDPR-i alusel ja salvestage seda ainult siis, kui teil on selleks seaduslik alus.

conversation.rated

Käivitub, kui külastaja hindab roboti vastust pöidlaga üles või alla (vaadake Vestluse hindamine).

{
  "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 või NEGATIVE. Hinnangu eemaldamine sündmust ei käivita, seega ei saa te kunagi neutraalset väärtust.

conversation.summarized

Käivitub, kui ChatLab genereerib lõppenud vestluse kokkuvõtte.

{
  "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 - genereeritud kokkuvõtte tekst. Kokkuvõtted luuakse mõni minut pärast vestluse tegevusetuks muutumist, seega saabub see sündmus hiljem kui ülejäänud vestluse sündmused.
  • language - ISO kood keele kohta, milles kokkuvõte kirjutati, järgides vestluse keelt.

client.summarized

Käivitub, kui ChatLab värskendab kliendi tehisintellekti profiili. Profiil koostatakse uuesti eelmisest profiilist ja äsja lõppenud vestluse kokkuvõttest, mistõttu järgneb see sündmus samale vestlusele mõeldud sündmusele conversation.summarized. Kliente tuvastatakse e-posti teel, mistõttu korratakse aadressi objekti data kõrgeimal tasemel.

{
  "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 - identifikaator kliendi vastendamiseks teie enda CRM-iga. Anonüümsete külastajate puhul, kes ei jätnud aadressi, on see null, kuid sündmus käivitub ka nende puhul - jätke need edastused vahele, kui teie integratsioon põhineb e-postil.
  • client - kontaktikirje, mida ChatLab selle isiku kohta omab: email, name, phone, countryCode ja ipAddress. Iga võti on alati olemas; teadmata väärtused on null.
  • clientSummary - kogu profiili tekst lihttekstina, mitte erinevustena (diff). See asendab varasema kokkuvõtte täielikult, seega salvestage see ülekirjutamisena, mitte juurde lisamisena.
  • Profiil koostatakse uuesti ainult robotite puhul, millel on lubatud vestlusmälu (chat memory), ja ainult vestluste puhul, mis olid kokkuvõtte tegemiseks piisavalt kaua tegevusetud - oodake seda sündmust minuteid pärast vestluse lõppu, mitte kohe.

live_chat.requested

Käivitub, kui tehisintellekt annab vestluse üle reaalajas vestlusele (live chat), kas seetõttu, et külastaja küsis inimest, või seetõttu, et robot otsustas, et inimene on vajalik.

{
  "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 - hetkel alati AI, sest üleandmise algatab alati roboti Live Chati toiming, sealhulgas juhul, kui külastaja küsib seda tavaliste sõnadega. Käsitlege seda avatud loendina (enum): töödelge tundmatuid väärtusi, selle asemel et eeldada kindlalt väärtust AI.
  • Sündmus näitab, et üleandmist taotleti, mitte seda, et operaator selle vastu võttis. Selleks oodake sündmust live_chat.started.

live_chat.started

Käivitub, kui operaator liitub ja reaalajas vestluse seanss tegelikult algab.

{
  "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 on tahtlikult tühi. Kõik vajalik on ümbrikus: botId tuvastab vestlusroboti ning conversationId / sessionId seovad sündmuse vestlusega, mille kohta saite juba sündmuse live_chat.requested.

live_chat.ended

Käivitub reaalajas vestluse seansi lõppemisel.

{
  "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 - kui kaua operaator vestluses viibis, arvestatuna seansi alguse hetkest. Väli jäetakse välja harvadel juhtudel, kui seanss lõpeb ilma, et seda oleks kunagi alustatud.

ai_action.executed

Käivitub iga kord, kui robot käivitab tehisintellekti toimingu (AI action) - hallatud integratsiooni väljakutse või kohandatud API funktsiooni. See on suure mahuga sündmus: aktiivne e-kaubanduse robot võib käivitada sadu toiminguid päevas ja külastaja üksainus lause võib käivitada mitu toimingut. Tellige see spetsiaalsesse lõpp-punkti või veenduge, et teie vastuvõtja suudab selle mahuga toime tulla.

{
  "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 - käivitatud toimingu nimi nii, nagu tehisintellekt seda näeb, näiteks search_products hallatud integratsiooni puhul või nimi, mille andsite kohandatud API toimingule.
  • status - SUCCESS või ERROR.
  • durationMs - kui kaua toiming aega võttis (millisekundites). Kasulik aeglase integratsiooni märkamiseks enne, kui külastajad selle üle kurtma hakkavad.
  • errorMessage - ebaõnnestumise põhjus, täidetud ainult siis, kui status on ERROR; muul juhul null.

webhook.test

Saadetakse nupuga Send sample event, kui käivitate lihtsa ühenduvuse kontrolli. Allkirjastatud täpselt samamoodi nagu päris sündmus.

{
  "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 - fikseeritud tekst, alati sama. Ümbriku väljad kannavad näidisväärtusi, seega ärge kunagi käsitlege edastust webhook.test reaalsete andmetena.
  • See on ainus sündmuse tüüp, mida ei saa lõpp-punktis tellida: see saadetakse nõudmisel administraatoripaneelist ja jõuab alati sellesse lõpp-punkti, millel klõpsasite, olenemata sellest, milliseid sündmusi see kuulab.

Turvalisus: edastuste kinnitamine

Iga edastus sisaldab nelja päist:

Päis Väärtus
X-ChatLab-Signature sha256=<hex hmac> - andmesisu HMAC-SHA256 allkiri
X-ChatLab-Timestamp Unixi aeg sekundites edastuse allkirjastamise hetkel
X-ChatLab-Event Sündmuse tüüp, nt lead.created
X-ChatLab-Delivery Kordumatu edastuse ID, mis kattub keha väärtusega eventId

Allkiri arvutatakse HMAC-SHA256 väärtusena sõnest {timestamp}.{rawBody}, kasutades teie lõpp-punkti saladust (secret), kus {timestamp} on X-ChatLab-Timestamp päise väärtus ning {rawBody} on päringu töötlemata, parsimata keha. Kinnitage alati töötlemata baitide alusel - parsitud JSON-i uuesti jadastamine muudab baitide järjestust ja muudab allkirja kehtetuks.

Kordusrünnakute (replay attacks) eest kaitsmiseks lükake tagasi edastused, mille X-ChatLab-Timestamp on vanem kui 5 minutit.

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);
}

Kui kinnitamine ebaõnnestub, vastake koodiga 401 ja hüljake andmesisu. Ärge kunagi töödelge kinnitamata edastusi - igaüks, kes teie URL-i teada saab, võib sinna saata suvalist JSON-i.

Edastuste toimimispõhimõtted

Enne veebikonksude kasutuselevõttu arvestage järgmiste tagatistega:

  • Vastake kiiresti. Teie lõpp-punkt peab vastama 3 sekundi jooksul, vastasel juhul loetakse edastus ebaõnnestunuks. Vastake kohe staatusega 2xx ja töödelge andmesisu asünkroonselt (suunake see järjekorda ja seejärel kinnitage kättesaamist) - ärge tehke enne vastamist CRM-i päringuid ega andmebaasi kirjutamisi.
  • Tee ja unusta, ülimalt ühekordne (at-most-once). Iga sündmus saab täpselt ühe edastuskatse - uuestiproovimisi ei toimu. Kui teie lõpp-punkt ei tööta, saabub ajalõpp või tagastatakse muu staatus kui 2xx, on see sündmus kadunud ja seda uuesti ei edastata. Veebikonksud on teavitused, mitte replikeeritud andmesalv: kui vajate tagatud terviklikkust, sünkroonige andmed Management API liidese või müügivihjete ekspordifailide kaudu.
  • Kaitselüliti (circuit breaker). Pärast 5 järjestikust ebaõnnestunud edastust ühe boti puhul peatatakse selle boti edastused 5 minutiks. Peatamise ajal toimuvad sündmused jäetakse vahele ning edastuslogis kuvatakse kirjed CIRCUIT_OPEN, et näeksite täpselt, millal ja miks liiklus peatati. Kaitselüliti poolt vahele jäetud edastusi automaatse väljalülitamise arvestusse ei loeta.
  • Automaatne väljalülitamine. Kontroll käivitatakse edastuse ebaõnnestumise hetkel, mitte kunagi ajastatud taimeri alusel. Kui edastus ebaõnnestub ja 7 päeva jooksul pole toimunud ühtegi edukat edastust (arvestatuna viimasest õnnestumisest või lõpp-punkti loomise kuupäevast, kui see pole kordagi õnnestunud), lülitatakse lõpp-punkt välja ja teile saadetakse e-posti teel teavitus. Üksainus 2xx vastus mistahes hetkel lähtestab selle loenduri. Lõpp-punkti, kuhu liiklust ei saabu, ei lülitata kunagi välja, sest ükski katse ei ebaõnnestu. Kui olete vastuvõtja korda teinud, lülitage see uuesti sisse jaotises Account settings (konto seaded); uuesti sisselülitamisel tühjendatakse tõrkeloendur ja automaatse väljalülitamise märge, kuid väljalülitatud oleku ajal vahele jäänud sündmusi tagantjärele ei edastata.
  • 410 Gone. Kui teie lõpp-punkt vastab koodiga HTTP 410 Gone, lülitab ChatLab selle kohe välja. Kasutage seda lõpp-punkti programmiliseks sulgemiseks vastuvõtja poolelt.
  • Idempotentsus. Tavapärase toimimise korral topeltedastusi ei esine, kuid kui teie töötlus peab olema rangelt idempotentne, eemaldage duplikaadid väärtuse eventId abil (saadaval ka päises X-ChatLab-Delivery).

Piirangud

  • Kuni 10 veebikonksu lõpp-punkti konto kohta.
  • Edastuslogide säilitamine: 14 päeva. Vanemad kirjed eemaldatakse automaatselt.

Seotud artiklid

  • Lead collection (müügivihjete kogumine) - vorm sündmuse lead.created taga
  • Human Support Contact form (klienditoe kontaktivorm) - vorm sündmuse contact_form.submitted taga
  • Live Chat - töövoog sündmuste live_chat.* taga
  • Conversation rating (vestluste hindamine) - pöial üles/alla tagasiside sündmuse conversation.rated taga
  • AI Actions (tehisintellekti toimingud) - integratsioonid sündmuse ai_action.executed taga
  • Chat API - brauserisisesed vidina tagasikutsed (veebikonksude klientpoolne vaste)
  • Management API - REST API botide haldamiseks ja kasutusandmete pärimiseks