Webhook-uri
Webhook-urile permit Your AI Connector să notifice automat celelalte instrumente de afaceri ori de câte ori se întâmplă ceva important — crearea unui contact nou, programarea unei întâlniri, primirea unui mesaj. În loc să verificați manual actualizările, sistemele conectate primesc o notificare instantanee în momentul în care are loc un eveniment.
Ce sunt webhook-urile?
Gândiți-vă la un webhook ca la un mesaj text automat între două aplicații. Când se întâmplă ceva în Your AI Connector (cum ar fi înregistrarea unui contact nou), platforma trimite instantaneu o notificare către un alt sistem ales de dumneavoastră. Furnizați o adresă web (numită „URL webhook”) unde ar trebui trimise aceste notificări — aceasta este furnizată de obicei de CRM-ul, platforma de automatizare sau dezvoltatorul dumneavoastră.
Webhook-urile trimit date DOAR în afara Your AI Connector. Un webhook este o cale cu sens unic de la Your AI Connector către celelalte instrumente ale tale. Nu există niciun URL de webhook care să trimită clienți potențiali, contacte sau mesaje ÎN platformă. Pentru a introduce un client potențial nou — dintr-un formular de pe site, din CRM-ul tău sau din GoHighLevel — sistemul tău efectuează în schimb un apel API. Consultă Acces API (operațiunea Create a Contact) și Funnel-uri. Singurul lucru de care ai nevoie pentru direcția de intrare este cheia API, care se află în propria sa secțiune — consultă Acces API. Pagina Webhook-uri descrisă aici este exclusiv pentru direcția de ieșire.
Notă: Configurarea webhook-urilor implică o anumită configurare tehnică. Dacă nu vă simțiți confortabil cu acest lucru, partajați această pagină cu dezvoltatorul dvs. sau utilizați o platformă de automatizare precum Zapier, Make sau Pabbly, care oferă URL-uri de webhook fără a fi nevoie de programare.
Utilizările comune includ:
- Sincronizarea contactelor noi cu CRM-ul dumneavoastră.
- Declanșarea unui flux de lucru în Zapier, Make sau Pabbly atunci când este aplicată o etichetă.
- Notificarea echipei în Slack atunci când un om este alertat.
- Actualizarea sistemului de calendar atunci când este programată o întâlnire.
- Înregistrarea rezumatelor conversațiilor în baza de date.
Configurarea webhook-urilor
- În bara laterală din stânga, faceți clic pe Settings (pictograma roată).
- În bara laterală Settings, sub grupul Integrations, faceți clic pe Webhooks.
Într-un cont în care nu sunt configurate încă webhook-uri, pagina arată astfel:
- Faceți clic pe New webhook (Webhook nou), în dreapta sus. Un formular se va deschide direct în pagină:
- Completați:
- URL Endpoint — adresa web către care Your AI Connector va trimite notificările despre evenimente. O obțineți de la sistemul extern (CRM, platformă de automatizare sau server personalizat).
- Nume — o etichetă pe care o veți recunoaște ulterior (de exemplu, „Alerte Slack” sau „Sincronizare CRM”). Doar pentru referința dumneavoastră.
URL-ul dvs. de webhook trebuie să fie o adresă
https://accesibilă public. Adreselehttp://simple,localhostsau adresele de rețea privată și adresele interne ale platformei sunt respinse la salvare. Pentru a testa de pe propriul computer, utilizați un tunel public (webhook.site sau ngrok) în loc de localhost.
- Sub Evenimente, faceți clic pe evenimentele pe care doriți să le primească acest webhook — toate cele 22 sunt listate în Cele 22 de evenimente Webhook.
- (Opțional) Activați Reîncercare livrări eșuate dacă doriți ca Your AI Connector să continue să încerce în caz de eșec temporar — consultați Reîncercarea livrărilor eșuate.
- Faceți clic pe Creează webhook. Acesta apare în lista de sub formular și puteți face clic pe Test în rândul său oricând pentru a trimite un payload de probă către endpoint-ul dvs.
Permisiune necesară. Adăugarea, editarea sau testarea webhook-urilor necesită permisiunea „edit” pentru Integrations (membrii echipei cu acces doar pentru vizualizare vor vedea o notificare de tip read-only în locul formularului).
Semnarea unui webhook necesită ca acesta să fie deja salvat — deschideți rândul unui webhook existent pentru a-l edita, iar panoul Signing secret va apărea în partea de jos a formularului de editare. O schiță nouă, nesalvată, nu are încă opțiune de semnare — consultați Signed Payloads mai jos.
Un singur webhook pentru toate conturile clienților tăi (Agenții)
Dacă administrezi o agenție, nu trebuie să recreezi același webhook pentru fiecare cont de client. În contul de agenție, formularul pentru webhook are un comutator suplimentar: Also fire for all client accounts. Activează-l și acest webhook va primi și evenimentele care au loc în fiecare cont de client din cadrul agenției tale — un singur endpoint pentru întreaga agenție.
Cum funcționează:
- Blocul
userîți indică apartenența evenimentului la un anumit client. Fiecare notificare conține deja un blocusercare identifică contul în care a avut loc evenimentul, astfel încât automatizarea ta să poată direcționa datele per client. - Setările proprii ale webhook-ului tău se aplică peste tot. Evenimentele selectate, secretul de semnare și setarea de reîncercare sunt utilizate și pentru livrările către conturile clienților.
- Fără livrări duble. Dacă un cont de client are propriul său webhook care indică către același URL, acesta va fi utilizat în schimb pentru evenimentele acelui cont — același eveniment nu va ajunge niciodată de două ori la același endpoint.
- Clienții nu îl văd. Webhook-ul nu apare în pagina de Webhooks a contului clientului, iar clienții nu îl pot dezactiva — este sub controlul tău.
- Fiabilitatea este monitorizată per cont de client. Dacă endpoint-ul tău continuă să eșueze, acesta este dezactivat automat doar pentru contul ale cărui livrări au eșuat (vezi Fiabilitatea Webhook-urilor), nu pentru întreaga agenție deodată.
Comutatorul apare doar în conturile de agenție. Configurarea acestuia prin API este, de asemenea, acceptată — vezi câmpul apply_to_sub_accounts din Webhooks API.
Evenimente de declanșare disponibile
Puteți activa sau dezactiva fiecare dintre cele 22 de evenimente webhook în mod independent. Când un eveniment este declanșat, Your AI Connector trimite o notificare către URL-ul webhook-ului dvs. cu datele relevante. Fiecare eveniment, semnificația acestuia și codul event pe care îl introduce în payload sunt listate împreună în Cele 22 de evenimente Webhook mai jos pe această pagină.
Bine de știut: Task Created, Task Updated și Task Completed sunt complet selectabile și se salvează corect. Daily Summary Created este, de asemenea, o adăugare recentă. Consultați Webhook pentru Task Completed mai jos pentru structura acelui payload.
Declanșatoare de webhook bazate pe etichete
subscribed_to_tags nu limitează evenimentele unui webhook la o etichetă. Acesta doar restrânge etichetele care produc o notificare de rezumat al conversației. Pentru a primi o solicitare atunci când este aplicată o anumită etichetă, setați un URL de webhook pe acea etichetă în fila Etichete a agentului (sau campaniei).
Formularul de webhook în sine nu are un selector de etichete, nici la crearea unui webhook nou, nici la editarea unuia, deci subscribed_to_tags poate fi citit sau modificat doar prin API-ul Webhooks sau solicitând asistență.
Bine de știut: editarea unui webhook existent care are o listă
subscribed_to_tags(redenumirea acestuia, modificarea evenimentelor, activarea reîncercărilor) nu mai șterge acea listă — deoarece formularul nu are un selector de etichete de trimis înapoi, salvarea din această pagină lasă acum lista existentă neatinsă. (Aceasta a fost o eroare reală înainte de 21 iulie 2026: salvarea din formularul de webhook obișnuia să șteargă lista deoarece trimitea întotdeauna o listă de etichete goală. Dacă un webhook și-a pierdut listasubscribed_to_tagsînainte de acea dată, va trebui reconfigurat prin API.)
Generarea unui rezumat pentru contactele etichetate
Acolo unde un webhook are o listă subscribed_to_tags, puteți activa Generează rezumat. Când este activat, Your AI Connector generează automat un rezumat al conversației pentru contact atunci când una dintre acele etichete este aplicată și îl include în datele webhook-ului — context complet fără o solicitare separată.
Testarea webhook-ului dumneavoastră
- Deschideți Setări → Integrări → Webhook-uri.
- Pe rândul webhook-ului dvs., faceți clic pe Test.
- Verificați sistemul extern pentru a confirma că a primit datele de test.
- Examinați formatul datelor pentru a vă asigura că sistemul dvs. îl poate analiza corect.
Pentru un test complet cap-la-cap, trimiteți un mesaj care ar declanșa unul dintre evenimentele configurate (o difuzare sau un mesaj primit pe un canal conectat) și verificați dacă webhook-ul se declanșează cu datele reale.
Sfat: Utilizați un instrument precum webhook.site sau RequestBin în timpul dezvoltării pentru a inspecta datele brute ale webhook-ului înainte de a vă conecta sistemul de producție.
Ce este considerată o livrare reușită
Indiferent dacă dai clic pe Test sau dacă evenimentul este declanșat în mod real, trimitem același lucru:
- O solicitare POST (niciodată GET), cu corpul sub formă de JSON și
Content-Type: application/json. - Antetele listate sub Payload-uri semnate. Antetele de semnătură sunt incluse doar după ce ați setat o cheie secretă de semnare.
Considerăm livrarea reușită atunci când:
- Endpoint-ul tău răspunde cu orice cod de stare 2xx (200, 201, 204 — toate sunt acceptate).
- Răspunde în decurs de 30 de secunde.
Câteva aspecte care îi surprind pe utilizatori:
- Corpul răspunsului este ignorat. Nu trebuie să returnați niciun JSON anume. Un răspuns 200 gol este suficient.
- Redirecționările sunt considerate eșecuri. Noi nu le urmăm, așa că un cod 301 sau 302 (inclusiv o redirecționare cu slash la final sau de la http la https) este înregistrat ca o livrare eșuată. Salvați URL-ul final, nu unul care redirecționează.
- Șirurile de interogare (query strings) sunt pe deplin acceptate.
https://your-app.com/hook?token=abc123este trimis exact așa cum l-ați salvat, deci plasarea unui token în șirul de interogare funcționează la fel de bine ca plasarea lui în cale. - URL-ul dumneavoastră trebuie să fie
https://și accesibil public. Adresele care aparțin propriei infrastructuri Your AI Connector sunt respinse, dar propriile dumneavoastră endpoint-uri pe Google Cloud Functions, Cloud Run, App Engine, Firebase Hosting sau oriunde altundeva sunt în regulă. - Un firewall sau un strat de protecție împotriva boților din fața endpoint-ului dumneavoastră ne poate bloca. Cel mai frecvent caz este Cloudflare: dacă zona dumneavoastră are activat „Bot Fight Mode” sau o provocare gestionată, cererea noastră primește o pagină de provocare „Just a moment…” cu un cod 403 în loc să ajungă la serverul dumneavoastră — iar o cerere server-la-server nu poate trece niciodată de o provocare de browser, așa că atât butonul Test, cât și evenimentele reale eșuează în același mod. Butonul Test vă va spune când se întâmplă acest lucru („Cloudflare is showing a bot challenge to our request”). Remediați problema în Cloudflare cu o regulă de Securitate / WAF care omite provocările pentru calea webhook-ului dumneavoastră (sau pentru agentul utilizator
Webhook-Delivery/1.0), apoi faceți clic din nou pe Test. - Dacă firewall-ul dumneavoastră are nevoie de o listă de permisiuni IP în schimb (de exemplu, planul gratuit Cloudflare, unde „Bot Fight Mode” simplu nu poate fi omis printr-o regulă WAF, dar o regulă de acces IP setată pe „Allow” rulează înaintea acestuia), vă putem ajuta: fiecare livrare, fie că provine de la butonul Test sau de la un eveniment live, este trimisă de la o singură adresă IPv4 fixă (fără intervale, fără IPv6, fără rotație). Contactați asistența și vă vom oferi adresa pentru a o adăuga în lista de permisiuni. Păstrați verificarea semnăturii ca verificare reală de încredere, deoarece aceasta validează fiecare sarcină utilă indiferent de locul din care provine.
- Rezultatul testului vă spune exact ce a răspuns endpoint-ul dumneavoastră. Un test eșuat arată acum motivul real (codul de stare HTTP pe care l-a returnat endpoint-ul dumneavoastră, un timeout sau faptul că nu am putut accesa deloc adresa) în loc de o eroare generică, iar un test pe un webhook salvat este trimis semnat atunci când semnarea este activată, exact ca un eveniment live.
Utilizarea n8n, Make sau Zapier (“Test URL” vs “Production URL”)
Platformele de automatizare îți oferă de obicei două adrese webhook diferite, iar acest lucru îi induce pe mulți în eroare:
- Un URL de test (în n8n conține
/webhook-test/). Acesta primește date doar în timp ce monitorizați activ panoul și tocmai ați făcut clic pe Ascultă evenimentul de test (sau Testare flux de lucru). Acesta captează un singur eveniment și apoi încetează să mai asculte — deci, dacă faceți clic pe Test în Your AI Connector de mai multe ori la rând, se va capta doar primul, și doar dacă fereastra de ascultare este activă în acel moment exact. Pentru a testa: faceți clic mai întâi pe Ascultă evenimentul de test în n8n, apoi reveniți la Your AI Connector și faceți clic pe Test o singură dată. - Un URL de producție (în n8n conține
/webhook/, fără-test). Acesta este cel care trebuie lipit în Your AI Connector pentru evenimente live. Funcționează doar după ce fluxul de lucru este setat pe Activ. Dacă fluxul de lucru nu este activ, n8n respinge cererea cu o eroare “404 / webhook not registered”, chiar dacă Your AI Connector a trimis datele corect.
Pe scurt: testează cu URL-ul de test în timp ce asculți, dar pentru ca webhook-ul să continue să funcționeze pentru contacte reale, salvează URL-ul de producție în Your AI Connector și asigură-te că fluxul de lucru este Active.
Formatul datelor webhook
Când un webhook este declanșat, Your AI Connector trimite date structurate (JSON) către URL-ul webhook-ului dumneavoastră. Dacă utilizați o platformă de automatizare precum Zapier sau Make, aceasta analizează automat aceste date pentru dumneavoastră. Dacă construiți o integrare personalizată:
{
"event": "contactCreated",
"contact": { "id": "<contact-id>", "first_name": "Jane", "...": "..." },
"campaign": { "id": "<campaign-id>", "name": "AI Receptionist", "status": "Live" },
"agent": { "id": "<agent-id>", "name": "Front Desk" },
"user": { "id": "<account-id>", "email": "owner@example.com" }
}
| Câmp | Descriere |
|---|---|
event |
Șirul exact al evenimentului care a declanșat notificarea (de exemplu, contactCreated, booked). Aceasta nu este eticheta de afișare prezentată în lista de evenimente; fiecare etichetă și codul său corespondent se află în Cele 22 de evenimente Webhook. |
contact |
Contactul despre care este evenimentul sau null pentru evenimentele care nu sunt legate de un contact (cum ar fi creditsRecharged). |
campaign |
Campania din care face parte contactul sau null dacă nu există una. |
agent |
Agentul care gestionează conversația sau null dacă nu există unul. |
user |
Informații de identitate de bază pentru contul care deține datele. |
campaignsauagent— de obicei unul, nu ambele. Dacă contul dvs. utilizează agenți, contactele sunt alocate unui agent, nu unei campanii, decicampaignapare canull, iaragentvă indică cine a gestionat conversația. Conturile mai vechi, bazate pe campanii, văd situația invers. Citiți câmpul care este completat; nu presupuneți căcampaigneste întotdeauna prezent.
Blocul
agenta fost introdus pe 15 august 2026. Acesta se află alături decampaignîn ceea ce privește evenimentele legate de o conversație — un chat încheiat, modul „nu deranjați”, o reluare, o dezarhivare, o pauză AI, un mesaj nou, un rezumat al conversației și webhook-ul pe care îl puteți seta pe o etichetă — și conțineidșinameale agentului care gestionează conversația, saunullatunci când nu este implicat niciun agent. Este pur aditiv: fiecare câmp pe care îl primiți deja rămâne neschimbat, astfel încât un receptor pe care l-ați creat înainte de acea dată va continua să funcționeze fără a fi nevoie de actualizări.
Unele evenimente adaugă propriul lor bloc suplimentar de nivel superior. De exemplu, Appointment Booked adaugă un bloc appointment (vezi Webhook-ul Appointment Booked), New Message adaugă un bloc complet message cu textul (vezi Webhook-ul New Message), iar Deliveries și Reads adaugă un bloc scurt message doar cu ID-ul și starea mesajului (vezi Webhook-ul Deliveries and Reads).
Deliveries și Reads vă spun despre ce mesaj este vorba, dar nu și ce conținea acesta. Acestea conțin un bloc
messagecare includeidșistatusale mesajului — iar acelideste acelașimessageIdpe care îl returnează endpoint-ul de trimitere a mesajelor, astfel încât să puteți potrivi o confirmare de livrare sau de citire cu mesajul exact pe care l-ați trimis — dar nu conțin corpul mesajului. Replies nu conține deloc un blocmessage. Dacă aveți nevoie de cuvintele trimise sau primite, abonați-vă și la New Message.
Două lucruri de știut înainte de a scrie receptorul. Nu există niciun câmp
timestampși niciun wrapperdata. Fiecare bloc se află la nivelul superior al obiectului JSON, așa cum se arată mai sus.
Cele 22 de evenimente Webhook
Cele 22 de evenimente webhook, cu eticheta de afișare pe care o bifați în aplicație și codul event trimis în payload. Codul event este un șir scurt care nu se potrivește cu eticheta de afișare, deci potriviți receptorul dvs. pe baza codului, nu a etichetei:
| Etichetă de afișare (în aplicație) | Cod event în payload |
Ce înseamnă |
|---|---|---|
| Contact Created | contactCreated |
Un contact nou este adăugat în contul dvs. (manual, prin import sau prin API). |
| Contact Paused | contact_paused |
O conversație cu un contact este întreruptă (botul nu mai răspunde). |
| Contact Resumed | contact_resumed |
O conversație întreruptă cu un contact este reluată. |
| Contact Do Not Disturb | contact_do_not_disturb_changed |
Setarea „Nu deranja” a unui contact este activată. |
| Contact Unarchived | contact_unarchived |
Un contact arhivat trimite un mesaj nou, readucându-l în inbox-ul dvs. activ. |
| New Message | new_message |
Orice mesaj este adăugat la o conversație pe orice canal — atât mesajele pe care contactul vi le trimite, cât și mesajele pe care AI-ul sau echipa dvs. le trimite acestuia. Acesta este singurul eveniment care conține textul propriu-zis al mesajului (vezi Webhook-ul New Message). |
| Replies | replied |
Un contact răspunde la un mesaj. |
| Reads | read |
Un contact citește un mesaj (pe canalele care acceptă confirmări de citire). Conține ID-ul mesajului care a fost citit — vezi Webhook-ul Deliveries and Reads. |
| Deliveries | delivered sau undelivered |
Un mesaj este livrat cu succes unui contact (undelivered când livrarea eșuează). Conține ID-ul mesajului — vezi Webhook-ul Deliveries and Reads. |
| Human Alerted | humanAlerted |
Botul AI determină că nu poate gestiona o conversație și o marchează pentru atenție umană. |
| Chat Concluded | chat_concluded |
Botul AI decide că o conversație a ajuns la final (programare efectuată, lead descalificat etc.). |
| Appointment Booked | booked |
Un contact programează o întâlnire prin sistemul de programări. |
| Credits Spent | creditsSpent |
Creditele sunt deduse din contul dvs. |
| Credits Recharged | creditsRecharged |
Creditele sunt adăugate în contul dvs. prin reîncărcare automată sau achiziție manuală. |
| Low Credit Balance | lowCreditBalance la o livrare Test, Low Credit Balance la una reală |
Un avertisment timpuriu că soldul de credite a scăzut sub pragul de alertă (100 de credite, dacă nu ați setat altul). Destinat agențiilor ale căror sub-conturi consumă dintr-un fond comun. Conține balance, threshold și account_email în loc de un bloc de contact, este trimis cel mult o dată la 24 de ore cât timp soldul rămâne scăzut și se reactivează imediat ce soldul depășește din nou pragul. |
| Task Created | taskCreated |
O sarcină este creată. |
| Task Updated | taskUpdated |
O sarcină se modifică fără a trece într-o etapă de finalizare. |
| Task Completed | taskCompleted |
O sarcină trece într-o etapă configurată ca etapă de finalizare. |
| Daily Summary Created | dailySummaryCreated |
Raportul dvs. zilnic este generat. |
| Channel Connected | channelConnected |
Încă nu este trimis — selectabil, dar nu este emis momentan. Nu construiți pe baza acestuia. Destinat momentului în care un canal de mesagerie termină conectarea. |
| Broadcast Started | broadcastStarted |
O difuzare începe să fie trimisă (starea se schimbă în „Sending”). Se declanșează o dată per pornire, inclusiv când o difuzare întreruptă este reluată. Conține un bloc broadcast în loc de un bloc de contact: id, nume, canal, stare, stare anterioară, lista vizată (list_id, list_name, is_smart_list), scheduled_at, total_contacts. |
| Broadcast Completed | broadcastCompleted |
O difuzare se termină (starea se schimbă în „Sent” sau „Failed”). Același bloc broadcast plus completed_at și, când este disponibil, completion_summary (total_sent, permanently_failed, unique_replied, failure_rate, had_errors). Folosiți-le pe ambele pentru a conecta o listă Smart Broadcast la instrumente externe. |
Încă două coduri nu apar niciodată în acea listă deoarece nu vă abonați la ele: contact_tags_updated, trimis de un URL de webhook setat pe o etichetă individuală, și summary_generated, trimis când un rezumat al chat-ului este scris pentru o etichetă din lista subscribed_to_tags a unui webhook.
Canal conectat nu este trimis încă. Apare în lista de evenimente, dar nimic nu îl emite în prezent. Nu construiți funcționalități bazate pe acesta.
Notificările bazate pe etichete și sarcini folosesc propriile forme separate. Consultați Contact Tags Updated și Task Completed.
Webhook pentru Contact Creat
Trimis când se declanșează evenimentul Contact creat (un contact nou este adăugat manual, prin import sau prin API).
Numele evenimentului
contactCreated
Formatul sarcinii utile (payload)
{
"event": "contactCreated",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null,
"is_bot_active": true,
"ad_referral": null
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
}
}
| Câmp | Descriere |
|---|---|
event |
Întotdeauna contactCreated pentru acest eveniment. |
contact.id |
ID-ul unic al noului contact. |
contact.email / contact.phone_number |
Adresa de e-mail și numărul de telefon ale contactului, dacă sunt cunoscute (oricare poate fi gol, în funcție de canal). |
contact.first_name / contact.last_name |
Numele contactului, dacă este cunoscut. |
contact.human_alerted / contact.human_alert_reason |
Dacă contactul este marcat pentru atenție umană și motivul. |
contact.is_bot_active |
Dacă botul AI este activ în prezent pentru acest contact. |
contact.ad_referral |
Atribuirea reclamei Meta Click-to-WhatsApp sau null — consultați Atribuirea reclamelor Click-to-WhatsApp. |
campaign |
Campania sub care a fost creat contactul sau null. |
agent |
Agentul atribuit contactului sau null. |
user |
Informații de bază de identitate pentru contul care deține contactul. |
Eșantionul de “Test” și un eveniment real arată ușor diferit. Butonul de test trimite date de substituent (John Doe, o campanie eșantion). Un eveniment real de Contact creat conține detaliile reale ale contactului, iar unele câmpuri pot fi goale în funcție de canal.
Webhook Mesaj nou
Acest webhook se declanșează de fiecare dată când un mesaj este adăugat la o conversație, pe orice canal. Acesta acoperă ambele direcții: mesajele pe care contactul ți le trimite și mesajele pe care AI-ul, echipa ta sau o campanie le trimite acestuia. Este singurul webhook care include textul mesajului, deci acesta este cel pe care trebuie să îl folosești atunci când dorești să oglindești conversațiile într-un sistem extern.
Numele evenimentului
new_message
Formatul sarcinii utile (payload)
{
"event": "new_message",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null,
"is_bot_active": true,
"ad_referral": null
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<message-id>",
"body": "Hi, are you open on Saturday?",
"direction": "inbound",
"status": "received",
"created_at": "2026-07-30T17:27:06.000Z",
"channel": "whatsapp_web"
}
}
| Câmp | Descriere |
|---|---|
event |
Întotdeauna new_message pentru acest eveniment. Rețineți că acesta este șirul exact trimis — nu este eticheta de afișare „New Message”. |
contact |
Contactul căruia îi aparține conversația mesajului. Aceeași formă ca în Contact Created. |
agent |
Agentul care gestionează conversația (id și name) sau null dacă nu este implicat niciun agent. |
user |
Informații de identitate de bază pentru contul care deține conversația. |
message.id |
ID-ul unic al mesajului. |
message.body |
Textul mesajului. Gol pentru un mesaj care conține doar un atașament (imagine, notă vocală, document). |
message.direction |
inbound pentru un mesaj de la contact, outbound pentru unul trimis de AI-ul dvs. sau de echipa dvs. din inbox și outbound-api pentru unul trimis de o campanie, o difuzare, un șablon sau prin API. |
message.status |
Unde se află mesajul în ciclul său de viață: received pentru primire și queued / sent / delivered / read / failed / undelivered pentru trimitere. Aceasta este starea în momentul în care mesajul a fost creat, deci un mesaj trimis ajunge de obicei aici ca queued sau sent și ajunge la delivered ulterior — folosiți evenimentele Deliveries și Reads dacă aveți nevoie de acele tranziții ulterioare. Ele conțin același message.id ca acest bloc, astfel încât să puteți potrivi tranziția cu acest mesaj (vezi Webhook-ul Deliveries and Reads). |
message.created_at |
Când a fost creat mesajul, în UTC (ISO 8601). |
message.channel |
Canalul prin care a trecut mesajul, de exemplu whatsapp, whatsapp_web, sms, instagram, messenger, telegram, email sau custom. |
Încă nu există un bloc
campaignîn acest payload. Mesajul nou trimitecontact,agent,userșimessage. Bloculagenta fost adăugat pe 15 august 2026 și vă indică ce agent gestionează conversația; dacă aveți nevoie și de contextul campaniei, căutați contactul prin API folosindcontact.id.
Înregistrările interne ale AI-ului nu declanșează acest webhook. Pe lângă mesajele reale, platforma își păstrează propriile rânduri de evidență într-o conversație (apelurile de instrumente ale AI-ului și înregistrările interne ale turnurilor). Acelea nu sunt trimise niciodată — primești doar mesajele care au fost trimise sau primite în mod autentic.
Webhook-ul Deliveries and Reads
Aceste două evenimente raportează ce s-a întâmplat cu un mesaj după ce a părăsit Your AI Connector: Deliveries se declanșează când un mesaj ajunge la contact (sau nu reușește), iar Reads se declanșează când contactul îl deschide, pe canalele care acceptă confirmări de citire.
Ambele conțin un bloc message cu ID-ul mesajului la care se referă evenimentul, astfel încât să puteți potrivi actualizarea cu mesajul exact pe care l-ați trimis.
Numele evenimentelor
delivered și undelivered pentru Deliveries, read pentru Reads.
Formatul sarcinii utile (payload)
{
"event": "delivered",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"ad_referral": null
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<message-id>",
"status": "delivered"
}
}
| Câmp | Descriere |
|---|---|
event |
delivered sau undelivered pentru Deliveries, read pentru Reads. |
contact |
Contactul căruia i-a fost trimis mesajul. |
campaign |
Campania din care face parte contactul sau null. |
agent |
Agentul care gestionează conversația sau null. |
user |
Informații de identitate de bază pentru contul care deține datele. |
message.id |
ID-ul mesajului la care se referă această actualizare. Este aceeași valoare pe care endpoint-ul de trimitere a mesajelor o returnează ca messageId și același message.id pe care îl conține o notificare New Message. |
message.status |
Noua stare, întotdeauna același șir ca event (delivered, undelivered sau read). |
Cum să potriviți o actualizare cu mesajul trimis. Stocați
messageIdpe care îl primiți când trimiteți un mesaj prin API. Când sosește o notificare Deliveries sau Reads, căutați acel ID stocat înmessage.iddin payload — aceasta este confirmarea de livrare sau de citire pentru acel mesaj exact.
Nu există text de mesaj aici. Blocul
messageconține doar ID-ul și starea. Abonați-vă la New Message dacă aveți nevoie și de corpul mesajului.
Blocul
messageeste prezent doar atunci când știm despre ce mesaj este vorba. În cazul rar al unei actualizări pe care nu o putem asocia cu un mesaj stocat, blocul este omis complet în loc să fie trimis gol — deci verificați dacămessageexistă înainte de a citimessage.id.
O notificare per schimbare de stare. Un singur mesaj trimis produce în mod normal o notificare
deliveredși apoi, pe canalele cu confirmări de citire, unaread. O trimitere eșuată produceundeliveredîn schimb.
Appointment Booked Webhook
Se declanșează atunci când un contact programează o întâlnire. Se declanșează în același mod, indiferent dacă AI-ul a programat-o în timpul unei conversații, dacă ați programat-o manual sau dacă a venit prin API.
Numele evenimentului
booked
Formatul sarcinii utile (payload)
{
"event": "booked",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith"
},
"campaign": {
"id": "<campaign-id>",
"name": "AI Receptionist",
"status": "Live"
},
"user": {
"id": "<account-id>",
"email": "owner@example.com"
},
"appointment": {
"appointment_id": "<appointment-id>",
"start_time": "2026-07-20T15:00:00.000Z",
"end_time": "2026-07-20T15:30:00.000Z",
"status": "confirmed",
"room_name": "Room 1",
"description": "Discovery call",
"summary": "30 min intro",
"google_calendar_event_id": null,
"event": {
"id": "<service-id>",
"event_name": "Intro Call",
"slot_duration": 30,
"location": "Zoom",
"meeting_link": "https://...",
"event_type": "online"
}
}
}
| Câmp | Descriere |
|---|---|
event |
Întotdeauna booked pentru acest eveniment. |
contact |
Persoana care a efectuat programarea. email și phone_number pot fi goale în funcție de canal. |
appointment.appointment_id |
ID-ul unic al programării. |
appointment.start_time / end_time |
Începutul și sfârșitul intervalului programat, în UTC (ISO 8601). |
appointment.status |
Starea curentă a programării. |
appointment.room_name |
Camera în care a fost plasată programarea, dacă este utilizată. |
appointment.description / summary |
Detalii textuale capturate odată cu programarea. |
appointment.google_calendar_event_id |
ID-ul Google Calendar pentru evenimentul sincronizat. Este adesea null în webhook-ul Appointment Booked, deoarece evenimentul din calendar este creat în același moment în care este trimisă notificarea — re-preluați programarea prin appointment_id-ul său puțin mai târziu dacă aveți nevoie și așteptați-vă la un null permanent pe conturile fără un Google Calendar conectat. |
appointment.event |
Serviciul care a fost programat: nume, lungimea intervalului, locație, link de întâlnire, tip. |
google_calendar_event_ideste adeseanullîn acest webhook, și acest lucru este normal. Evenimentul Google Calendar este creat în același moment în care este trimisă această notificare, deci ID-ul de obicei nu este încă gata. Regăsiți programarea dupăappointment_idpuțin mai târziu dacă aveți nevoie de ea. Rămânenullpermanent dacă contul nu are un Google Calendar conectat, deci nu așteptați la nesfârșit.
Butonul “Test” nu include blocul
appointment. Folosiți-l pentru a confirma că punctul final răspunde, apoi faceți o programare reală pentru a vedea sarcina utilă completă.
Două cazuri în care acest webhook nu se declanșează: programările importate dintr-un calendar extern și rezervările care provin prin integrarea Formitable.
Webhook pentru actualizarea etichetelor de contact
Se declanșează atunci când o etichetă este aplicată unui contact, iar acea etichetă are un URL de webhook configurat pentru agentul sau campania de care aparține contactul.
Numele evenimentului
contact_tags_updated
Când se declanșează
- O etichetă este aplicată unui contact care are un agent atribuit, o campanie atribuită sau ambele.
- Cel puțin una dintre etichetele aplicate are un URL de webhook setat în fila Etichete a acelui agent sau acelei campanii.
Dacă un contact le are pe ambele și etichetele campaniei conțin URL-uri de webhook, acelea au prioritate; în caz contrar, se folosesc cele ale agentului.
Dacă mai multe etichete cu URL-uri de webhook diferite sunt aplicate în aceeași actualizare, se trimite o cerere per URL, fiecare conținând doar etichetele care corespund acelui URL.
Eliminarea unei etichete nu trimite niciodată o cerere. Majoritatea utilizatorilor direcționează aceste URL-uri către o acțiune — colectarea unui depozit, rezervarea unui interval, alertarea unui reprezentant — astfel încât eliminarea unei etichete de pe un contact ar fi putut declanșa din nou acea acțiune. Acest lucru nu mai este posibil. O eliminare apare totuși în removed_tags atunci când are loc în aceeași actualizare cu o aplicare care merge către același URL, astfel încât o automatizare care citește ambele matrice păstrează imaginea completă; ceea ce nu va vedea niciodată este o cerere cauzată doar de o eliminare. (Modificat la 12 august 2026. Înainte de această dată, eliminările trimiteau și ele o cerere.)
Formatul sarcinii utile (payload)
{
"event": "contact_tags_updated",
"contact": {
"id": "<contact-id>",
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"is_bot_active": true,
"ad_referral": {
"ctwa_clid": "ARAbc123...",
"source_id": "120210000000000",
"source_type": "ad",
"source_url": "https://fb.me/xxxx",
"headline": "Get 20% off today",
"body": "Message us now to claim your discount",
"channel": "whatsapp"
}
},
"added_tags": ["qualified-lead"],
"removed_tags": ["new-lead"],
"agent": {
"id": "<agent-id>",
"name": "Front Desk"
},
"user": {
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
}
}
| Câmp | Descriere |
|---|---|
event |
Întotdeauna contact_tags_updated pentru acest webhook. |
contact.id |
ID-ul unic al contactului ale cărui etichete s-au modificat. |
contact.email / contact.phone_number |
E-mailul/telefonul contactului, dacă este cunoscut. |
contact.first_name / contact.last_name |
Numele contactului. |
contact.human_alerted |
Dacă contactul este marcat în prezent pentru atenția unui operator uman. |
contact.is_bot_active |
Dacă botul AI este activ în prezent în conversația acestui contact. |
contact.ad_referral |
Prezent doar atunci când contactul v-a contactat pentru prima dată printr-o reclamă sau postare Meta Click-to-WhatsApp (CTWA). null în caz contrar. |
added_tags |
Matrice de nume de etichete aplicate în această actualizare. Niciodată goală — o aplicare este cea care declanșează cererea. |
removed_tags |
Matrice de nume de etichete eliminate în aceeași actualizare, dacă există. O eliminare de una singură nu trimite nimic. |
agent |
Agentul care gestionează conversația contactului (id și name), sau null dacă nu este implicat niciun agent. Adăugat pe 15 august 2026. |
user |
Informații de bază de identitate pentru contul care deține contactul. |
Testarea unui webhook de etichetă
Lângă câmpul URL-ului webhook-ului din fila Etichete există un buton Test. Acesta trimite imediat un payload de probă către acel URL, astfel încât să puteți confirma că automatizarea dvs. îl primește înainte de a aștepta o conversație reală.
Testul trimite aceeași formă contact_tags_updated prezentată mai sus, folosind un contact substituent, cu eticheta pe care o testați în added_tags și un removed_tags gol. Ceea ce vede automatizarea dvs. în test este ceea ce va vedea în producție.
Două lucruri de știut:
- Salvați mai întâi eticheta. Testul caută eticheta după numele salvat, deci o etichetă nouă sau o redenumire nesalvată nu poate fi testată încă. Butonul rămâne gri până când numele de pe ecran corespunde cu cel salvat.
- Un test eșuat nu afectează webhook-ul dvs. Testele nu contribuie niciodată la oprirea automată după eșecuri repetate descrisă în Fiabilitatea Webhook-urilor.
Dacă testul eșuează, mesajul vă spune ce a răspuns endpoint-ul dvs. (de exemplu, un 404 sau 500), ceea ce este de obicei suficient pentru a identifica un URL greșit sau un flux de lucru care nu este activat.
Webhook pentru sarcină finalizată
Doar pentru referință. Webhook-urile de sarcini (ca date) sunt documentate aici pentru dezvoltatori; evenimentele Task Created, Task Updated și Task Completed sunt selectabile în lista standard de evenimente din formularul de webhook ca oricare alt eveniment — consultați Evenimente de declanșare disponibile și Cele 22 de evenimente Webhook.
Acest payload este trimis atunci când o sarcină trece într-o etapă marcată ca etapă de finalizare. O sarcină care se mută între etape care nu sunt de finalizare trimite în schimb formatul taskUpdated.
Numele evenimentului
taskCompleted
Când se declanșează
- O sarcină este actualizată.
- Valoarea
stagea acesteia s-a modificat față de valoarea anterioară. - Noua etapă este configurată ca etapă de finalizare în setările etapelor de sarcini ale contului.
Formatul sarcinii utile (payload)
{
"event": "taskCompleted",
"contact": {
"email": "jane@example.com",
"phone_number": "+15551234567",
"first_name": "Jane",
"last_name": "Smith",
"human_alerted": false,
"human_alert_reason": null
},
"user": {
"email": "owner@example.com",
"first_name": "Alex",
"last_name": "Doe"
},
"message": {
"id": "<task-id>",
"title": "Follow up with Jane",
"description": "Confirm pricing and send proposal",
"type": "follow_up",
"priority": "high",
"stage": "<stage-id>",
"due_date": "2026-01-20T15:00:00Z",
"source": "ai",
"source_detail": "<source-detail>",
"campaign_id": "<campaign-id>",
"linked_human_alert": "<human-alert-id>",
"tags": ["qualified-lead"],
"notes": "Customer requested a callback"
}
}
| Câmp | Descriere |
|---|---|
event |
Întotdeauna taskCompleted pentru acest webhook. Același format de payload este trimis ca taskUpdated atunci când o sarcină se modifică fără a intra într-o etapă de finalizare. |
contact |
Contactul legat de sarcină, dacă există. null când nu este legat. |
contact.human_alert_reason |
Motivul pentru care contactul a fost marcat pentru atenție umană, dacă este cazul. |
user |
Informații de identitate de bază pentru contul care deține sarcina. |
message.id |
ID-ul unic al sarcinii. |
message.title / description |
Titlul și descrierea sarcinii. |
message.type |
Tipul sarcinii (de exemplu, follow_up, call, custom). |
message.priority |
Prioritatea sarcinii (low, medium, high). |
message.stage |
ID-ul etapei în care se află acum sarcina. |
message.due_date |
Data scadentă a sarcinii, dacă este setată. |
message.source |
Ce a creat sarcina (ai, manual, api). |
message.source_detail |
Detalii suplimentare despre sursă. |
message.campaign_id |
ID-ul campaniei legate sau null. |
message.linked_human_alert |
ID-ul alertei umane legate, dacă există. |
message.tags |
Etichete aplicate sarcinii. |
message.notes |
Note libere despre sarcină. |
Dezactivarea (sau ștergerea) unui webhook
Fiecare webhook are un comutator pornit/oprit, chiar pe rândul său. Oprirea unuia (off) îl împiedică să primească evenimente, dar păstrează tot ce ați configurat — URL-ul, evenimentele, orice secret de semnare. Reporniți-l și va continua de unde a rămas; nimic din ce s-a întâmplat în timp ce era oprit nu va fi livrat ulterior.
Folosiți această opțiune atunci când doriți ca livrările să se oprească pentru o perioadă: punctul final este în curs de reconstrucție, depanați o integrare zgomotoasă sau întrerupeți o automatizare.
Ștergerea unui webhook (pictograma coș de gunoi de pe rândul său) îl elimină definitiv, inclusiv secretul său de semnare. Dacă doriți doar ca livrările să se oprească, opriți-l în schimb — ștergerea este pentru când ați terminat complet cu acel endpoint.
Acest lucru nu este același lucru cu dezactivarea automată a unui webhook. Dacă dezactivăm webhook-ul dumneavoastră după eșecuri repetate (consultați Fiabilitatea Webhook), comutatorul de mai sus nu îl va reactiva. Odată ce punctul final este remediat, editați webhook-ul și salvați-l cu o adresă URL modificată (orice modificare a URL-ului îl reactivează) sau apelați punctul final de reactivare prin API — sau contactați asistența și îl vom reactiva noi pentru dumneavoastră.
Payload-uri semnate (Verificarea faptului că un webhook provine într-adevăr de la noi)
Oricine află URL-ul webhook-ului dvs. ar putea trimite o cerere falsă către acesta. Dacă acționați automat pe baza webhook-urilor — actualizarea facturării, crearea de înregistrări CRM — activarea semnării vă permite să verificați dacă fiecare cerere provine cu adevărat de la noi.
Semnarea este opțională și dezactivată implicit, și o activați pentru fiecare webhook, din vizualizarea de editare a acelui webhook (deschideți rândul unui webhook salvat).
Activarea semnării
- Deschideți webhook-ul (Setări → Integrări → Webhook-uri → faceți clic pe rândul webhook-ului dvs.).
- În secțiunea Secret de semnare, faceți clic pe Generare.
- Copiați secretul (începe cu
whsec_) și stocați-l în sistemul dvs. de primire. Tratați-l ca pe o parolă.
Puteți reveni oricând pentru a dezvălui, copia, roti sau dezactiva secretul din același panou.
Ce trimitem
Odată ce semnarea este activată, fiecare livrare pentru acel webhook conține aceste două anteturi HTTP suplimentare:
| Antet | Semnificație |
|---|---|
X-Webhook-Signature |
Semnătura, sub forma v1=<hex>. |
X-Webhook-Timestamp |
Când am trimis-o, sub formă de marcaj temporal Unix în secunde. |
Aceste trei sunt prezente la fiecare livrare, semnată sau nu:
| Antet | Semnificație |
|---|---|
X-Webhook-Delivery |
Un ID unic pentru acest eveniment. Rămâne același pe parcursul reîncercărilor, deci acesta este elementul după care puteți elimina duplicatele. |
X-Webhook-Attempt |
A câta încercare este aceasta (1 este prima încercare). |
X-Webhook-Event |
Numele evenimentului, astfel încât să puteți direcționa fluxul fără a citi corpul mesajului. |
Cum se verifică
Semnătura este un HMAC-SHA256 al șirului <timestamp>.<raw request body>, folosind secretul tău de semnare drept cheie.
Verificați în raport cu corpul cererii brute — octeții exacți pe care i-ați primit. Dacă framework-ul dvs. analizează JSON-ul și îl reserializează înainte de verificare, octeții se pot modifica și semnătura nu se va potrivi.
Exemplu Node.js:
const crypto = require("crypto");
function verify(rawBody, headers, secret) {
const timestamp = headers["x-webhook-timestamp"];
const signature = headers["x-webhook-signature"]; // "v1=<hex>"
// Reject anything older than 5 minutes so a captured request can't be replayed later.
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = crypto.createHmac("sha256", secret).update(`${timestamp}.${rawBody}`).digest("hex");
return crypto.timingSafeEqual(Buffer.from(signature.replace("v1=", "")), Buffer.from(expected));
}
Exemplu Python:
import hashlib, hmac, time
def verify(raw_body: bytes, headers, secret: str) -> bool:
timestamp = headers["X-Webhook-Timestamp"]
signature = headers["X-Webhook-Signature"].replace("v1=", "")
# Reject anything older than 5 minutes so a captured request can't be replayed later.
if abs(time.time() - int(timestamp)) > 300:
return False
expected = hmac.new(secret.encode(), f"{timestamp}.".encode() + raw_body, hashlib.sha256).hexdigest()
return hmac.compare_digest(signature, expected)
Compară semnăturile cu o funcție sigură la sincronizare (timing-safe) (
timingSafeEqual/compare_digest), nu==. Nu costă nimic și evită o clasă subtilă de atacuri.
Rotarea secretului
Dă clic pe Rotește pentru a înlocui secretul. Comutarea este imediată: următoarea livrare este semnată doar cu noul secret. Dacă endpoint-ul tău este activ, acceptă atât secretul vechi, cât și pe cel nou timp de câteva minute, în timp ce îl implementezi pe cel nou.
Dezactivarea semnării oprește pur și simplu trimiterea antetelor de semnătură.
Reîncercarea livrărilor eșuate
În mod implicit, o livrare care eșuează nu este reîncercată — dacă sistemul dvs. este indisponibil în acel moment, evenimentul respectiv este pierdut.
Activează Reîncearcă livrările eșuate pentru un webhook (în formularul de creare/editare) și vom continua să încercăm:
| Încercare | Când |
|---|---|
| 1 | Imediat |
| 2 | 1 minut mai târziu |
| 3 | 5 minute mai târziu |
| 4 | 30 minute mai târziu |
| 5 | 2 ore mai târziu |
Acest interval însumează aproximativ 2 ore și 40 de minute, astfel încât un webhook poate supraviețui unei ferestre de mentenanță sau unei întreruperi scurte din partea dvs.
Ce se reîncearcă: probleme temporare — serverul dvs. returnează o eroare 5xx, un timeout sau o eroare de conexiune.
Ce nu facem: dacă endpoint-ul tău respinge cererea (orice eroare 4xx), nu reîncercăm — trimiterea aceleiași cereri din nou ar produce doar aceeași respingere.
Ce evenimente se reîncearcă: webhook-urile de etichete (contact_tags_updated), cele trei evenimente de sarcină și rezumatul zilnic. Restul sunt trimise o singură dată, deci pentru acelea comutatorul nu are nicio acțiune. Fiecare eveniment conține în continuare X-Webhook-Delivery, deci o singură regulă de eliminare a duplicatelor le acoperă pe toate.
Activează reîncercările doar dacă endpoint-ul tău este idempotent. Reîncercările înseamnă că același eveniment poate ajunge de mai multe ori. Folosește antetul
X-Webhook-Deliverypentru a recunoaște o repetiție: acesta rămâne același la fiecare încercare pentru un eveniment, astfel încât poți ignora în siguranță un ID pe care l-ai procesat deja.
Reîncercările interacționează cu oprirea automată după eșecuri repetate (consultați Fiabilitatea webhook-urilor) exact așa cum v-ați dori: contorul de eșecuri numără o livrare completă, doar după ce fiecare reîncercare a fost epuizată — nu fiecare încercare individuală.
Fiabilitatea Webhook-urilor
- Your AI Connector trimite webhook-uri printr-o conexiune securizată (HTTPS). Asigurați-vă că adresa web pe care o furnizați utilizează HTTPS.
- Dacă sistemul dumneavoastră returnează o eroare, livrarea este considerată eșuată.
- Monitorizați timpul de funcționare al sistemului de primire pentru a evita pierderea evenimentelor.
- Pentru fluxuri de lucru critice, activați Reîncercarea livrărilor eșuate și luați în considerare și un mecanism de rezervă.
Webhook-urile sunt dezactivate automat după eșecuri repetate. Dacă URL-ul webhook-ului dumneavoastră eșuează în mod repetat (aproximativ 5 erori consecutive sau 3 consecutive pentru erori de tip configurare), Your AI Connector nu mai trimite automat evenimente către acel URL. Pentru a-l reactiva odată ce punctul final este funcțional: editați webhook-ul și salvați-l cu o adresă URL modificată (orice modificare a URL-ului îl reactivează) sau utilizați punctul final de reactivare prin API — salvarea cu același URL nu este suficientă. Asistența îl poate reactiva, de asemenea, pentru dumneavoastră.
Depanare
| Problemă | Soluție |
|---|---|
| Webhook-ul nu se declanșează | Mai întâi, verificați dacă webhook-ul nu este oprit pe rândul său. Apoi, confirmați că evenimentele corecte sunt selectate și că URL-ul dvs. este accesibil de pe internet. |
| Evenimentul de test funcționează, dar evenimentele reale nu | Asigurați-vă că tipul specific de eveniment este activat. Dacă ați așteptat o solicitare la aplicarea unei etichete, rețineți că subscribed_to_tags nu limitează evenimentele unui webhook la o etichetă — ci doar restrânge etichetele care generează o notificare de rezumat al conversației. Pentru a primi o solicitare când este aplicată o etichetă specifică, setați un URL de webhook pe acea etichetă în fila Etichete a agentului (sau campaniei) — consultați Webhook pentru actualizarea etichetelor de contact. |
| Nu ajunge nimic în n8n / Make / Zapier | Probabil utilizați URL-ul de test al platformei, care ascultă doar un singur eveniment imediat după ce faceți clic pe „Ascultă evenimentul de test”. Pentru evenimente live, salvați URL-ul de producție și comutați fluxul de lucru pe Activ. |
| Primiți evenimente duplicate | Verificați dacă există mai multe webhook-uri care indică spre același URL. Dacă opțiunea Reîncearcă livrările eșuate este activată, o repetare este de așteptat ori de câte ori punctul final a acceptat un eveniment, dar nu a reușit să răspundă la timp — eliminați duplicatele pe X-Webhook-Delivery. |
| Verificarea semnăturii eșuează mereu | Aproape întotdeauna deoarece corpul a fost re-serializat înainte de verificare. Verificați în raport cu corpul brut al cererii, semnați <timestamp>.<body> și confirmați că utilizați secretul curent dacă l-ați rotit recent. |
| Reîncercările nu au loc | Reîncercările sunt dezactivate, cu excepția cazului în care sunt activate pentru acel webhook specific. Nu reîncercăm răspunsurile 4xx. |
Blocul campaign este întotdeauna null |
Este de așteptat dacă contul dvs. utilizează agenți: contactele sunt alocate unui agent, nu unei campanii. Citiți blocul agent în schimb — consultați Formatul datelor webhook. |
| Datele sunt goale sau malformate | Verificați dacă sistemul dvs. de primire acceptă JSON. Verificați jurnalele serverului pentru erori de parsare. |
| URL-ul webhook-ului returnează erori | Testați URL-ul cu un instrument precum Postman sau webhook.site. |
| Webhook-ul a încetat să se mai declanșeze complet după o întrerupere | Eșecurile repetate dezactivează automat un webhook. Salvarea din nou nu îl reactivează — reparați punctul final, apoi contactați asistența. |
| Salvarea sau Testarea oferă o eroare de permisiune | Aveți nevoie de permisiunea „edit” pentru Integrări. Cereți proprietarului contului să v-o acorde. |
Lista subscribed_to_tags a unui webhook a revenit goală |
subscribed_to_tags nu limitează evenimentele unui webhook la o etichetă — ci doar restrânge etichetele care generează o notificare de rezumat al conversației. Editarea din formularul de webhook nu mai șterge acea listă (remediat la 21 iulie 2026). Dacă un webhook și-a pierdut lista înainte de acea dată, setați subscribed_to_tags din nou prin API-ul Webhooks — consultați Declanșatoare webhook bazate pe etichete. |
Pașii următori
- Integrare GoHighLevel — utilizați webhook-uri pentru a integra Your AI Connector cu GHL.
- Acces API — combinați webhook-urile cu API-ul pentru automatizări puternice.
- Utilizarea etichetelor pentru a marca contactele — configurați etichete care declanșează webhook-urile dumneavoastră.