Funcții personalizate
Funcțiile personalizate permit botului tău AI să se conecteze la alte sisteme în timpul conversațiilor live. În loc să spună „Voi verifica și revin către tine”, botul poate căuta starea unei comenzi, poate verifica stocul sau poate crea o înregistrare în CRM-ul tău (sistemul de gestionare a relațiilor cu clienții - software-ul pe care îl folosești pentru a urmări clienții potențiali și clienții actuali, cum ar fi HubSpot sau Salesforce) - totul în timp real, în timp ce clientul așteaptă.
Funcții personalizate vs. Webhook-uri
Acesta este cel mai frecvent punct de confuzie, așa că merită să clarificăm acest aspect înainte de a construi ceva.
| Webhook-uri | Funcții personalizate | |
|---|---|---|
| Direcție | Unidirecțional (trimite și uită) | Bidirecțional (apelează și așteaptă) |
| Ce face botul | Trimite o notificare când se întâmplă ceva, apoi își continuă activitatea. | Apelează, se întrerupe, așteaptă răspunsul și folosește rezultatul primit pentru a continua conversația. |
| Vizibilitate în conversație | Rezultatul final este invizibil pentru bot — acesta nu vede niciodată ce s-a întâmplat. | Răspunsul este transmis direct înapoi către AI, astfel încât botul îl poate cita, poate analiza informația și poate răspunde clientului pe baza acesteia. |
| Ideal pentru | Înregistrarea evenimentelor, sincronizarea datelor cu un CRM, declanșarea automatizărilor externe (Zapier, Make, n8n). | Orice situație în care botul are nevoie de un răspuns înainte de a putea replica — căutări live, prețuri în timp real, generare de conținut pe loc. |
Când să alegi ce: Dacă trebuie doar să anunți un alt sistem că s-a întâmplat ceva, folosește un webhook - un mesaj automat unidirecțional trimis către un alt sistem (vezi Setări → Integrări → Webhook-uri). Dacă botul trebuie să afle ceva de la un alt sistem înainte de a continua conversația, folosește o funcție personalizată.
Exemple de ce pot debloca funcțiile personalizate
Deoarece răspunsul este transmis înapoi în conversație, funcțiile personalizate deschid posibilități pe care webhook-urile pur și simplu nu le pot oferi:
- Verificarea stocului în timp real în Shopify sau WooCommerce — Înainte de a oferi o ofertă unui client, botul verifică stocul în timp real și răspunde „Da, avem 12 bucăți mărimea M” în loc de „lăsați-mă să verific și revin”.
- Prețuri dinamice dintr-un Google Sheet — Echipa ta de vânzări actualizează prețurile într-un tabel; botul citește cel mai recent rând în timpul conversației și oferă prețul actual fără ca cineva să modifice configurația AI-ului.
- Agent de apelare Voice-AI — Când botul califică un lead, acesta declanșează un agent vocal (de exemplu, un apelant bazat pe ElevenLabs) pentru a suna lead-ul în câteva minute și confirmă clientului „grozav, așteptați-vă la un apel în următoarele 5 minute”.
- PDF cu ofertă personalizată, generat și trimis prin e-mail în timpul chat-ului — Botul colectează cerințele, apelează generatorul de oferte, primește un URL către PDF și îi spune clientului „Tocmai v-am trimis oferta prin e-mail — verificați căsuța poștală”.
Ce pot face funcțiile personalizate?
Gândește-te la funcțiile personalizate ca la niște superputeri oferite botului tău, dincolo de simpla conversație. Iată exemple din lumea reală:
- Urmărirea comenzilor - Un client întreabă „Unde este comanda mea?”, iar botul verifică sistemul tău de e-commerce și răspunde cu starea livrării și link-ul de urmărire.
- Verificarea inventarului - „Aveți acest produs pe mărimea 10?” Botul verifică sistemul de stocuri și oferă un răspuns în timp real.
- Actualizări CRM - Când botul califică un lead, acesta creează sau actualizează automat o înregistrare în HubSpot, Salesforce sau orice alt CRM.
- Generarea de oferte - Botul colectează cerințele clientului și generează o ofertă personalizată din sistemul tău de prețuri.
- Programări - Botul creează o programare în sistemul tău extern de rezervări.
- Verificarea reducerilor - „Este valid acest cod de cupon?” Botul verifică și confirmă.
- Căutarea contului - Un client care revine este recunoscut automat, iar detaliile contului său sunt extrase.
Clientul nu vede niciodată ce se întâmplă în culise. El experimentează pur și simplu un bot capabil să răspundă la întrebări cu informații reale și actualizate.
Cum funcționează funcțiile personalizate (Versiunea simplă)
Iată ce se întâmplă atunci când o funcție personalizată este declanșată în timpul unei conversații:
- Clientul întreabă ceva care necesită date în timp real (de ex., „Unde este comanda mea?”)
- Botul recunoaște că trebuie să utilizeze o funcție personalizată pentru a răspunde
- Botul colectează orice informație lipsă de la client (de ex., „Care este numărul comenzii tale?”)
- Platforma trimite o cerere către sistemul tău (site-ul tău, CRM sau orice alt instrument) cu detaliile relevante
- Sistemul tău răspunde cu datele (de ex., starea comenzii, numărul de urmărire, data livrării)
- Botul citește răspunsul și formulează un răspuns natural: „Comanda ta ORD-4582 a fost expediată și ar trebui să ajungă până vineri!”
Cât costă un apel de funcție personalizat
Fiecare apel de funcție personalizat este facturat în funcție de nivelul de Calitate AI al Agentului tău:
| Nivel de Calitate AI | Credite per apel de funcție personalizat | Cu propria cheie Anthropic (BYOK) conectată |
|---|---|---|
| Pro | 1 credit | 0 credite — rulează pe cheia ta |
| Economy (depreciat) | 0,5 credite | 0 credite — rulează pe cheia ta |
| Max | 0,25 credite | tot 0,25 credite, facturat chiar și cu propria cheie conectată, deoarece Max rulează pe propriul nostru model |
| Mini | 0,15 credite | tot 0,15 credite, facturat chiar și cu propria cheie conectată, deoarece Mini rulează pe propriul nostru model |
Configurarea unei funcții personalizate (pas cu pas)
- În bara laterală principală, sub AI Studio, faceți clic pe Custom Functions.
- Faceți clic pe butonul verde + Add Function (sau New function) din partea dreaptă sus.
Lista de funcții personalizate afișează un tabel cu următoarele coloane:
| Coloană | Ce afișează |
|---|---|
| Name | Numele funcției (de ex., check_order_status) |
| Description | Un scurt rezumat al funcției (trunchiat la 50 de caractere în tabel) |
| Method | Metoda HTTP utilizată, afișată ca o etichetă colorată: GET (albastru), POST (verde), PUT (portocaliu), DELETE (roșu) |
| Created | Data la care a fost creată funcția |
Acest lucru facilitează scanarea rapidă a funcțiilor și găsirea celei de care ai nevoie.
Pasul 1: Oferă-i un nume și o descriere
| Câmp | Ce trebuie introdus | Exemplu |
|---|---|---|
| Name | Un nume scurt folosind litere, cifre și caractere de subliniere | check_order_status |
| Description | Explică ce face această funcție (AI-ul citește acest lucru pentru a decide când să o folosească) | „Caută starea curentă a comenzii unui client folosind numărul comenzii” |
| Purpose (AI Action) | Spune AI-ului exact când și cum să folosească această funcție | „Folosește acest lucru când un client întreabă despre starea comenzii, expediere sau livrare. Cere mai întâi numărul comenzii.” |
Sfat: Fii foarte specific în descriere și scop. Cu cât ești mai clar cu privire la momentul în care ar trebui utilizată funcția, cu atât mai fiabil o va folosi botul la momentul potrivit.
Pasul 2: Configurează conexiunea
Trebuie să spui aplicației unde să trimită cererea:
| Câmp | Ce să introduci | Exemplu |
|---|---|---|
| URL | Adresa web a endpoint-ului sistemului tău (adresa specifică din sistemul tău care primește cererea și trimite datele înapoi) | https://api.yourstore.com/v1/orders/status |
| Metodă | Tipul de cerere care trebuie trimisă | Vezi opțiunile de mai jos |
Ce metodă să alegi:
| Metodă | Când să o folosești |
|---|---|
| GET | Căutarea de informații (starea comenzii, inventar, detalii cont) |
| POST | Crearea de înregistrări noi (tichete de asistență, clienți potențiali, rezervări) sau căutări complexe |
| PUT | Actualizarea completă a unei înregistrări existente |
| PATCH | Actualizarea unei părți dintr-o înregistrare existentă |
| DELETE | Eliminarea unei înregistrări |
Dacă nu ești sigur pe care să o folosești, verifică cu dezvoltatorul tău sau consultă documentația sistemului la care te conectezi. GET (pentru căutări) și POST (pentru crearea de înregistrări) sunt cele mai comune.
Pasul 3: Adaugă antetele de autentificare
Majoritatea sistemelor necesită autentificare pentru a accepta cereri. Adaugă orice antete necesare:
| Antet | Valoare exemplu |
|---|---|
Authorization |
Bearer your-api-key-here |
Content-Type |
application/json |
Sfat de securitate: Folosește o cheie API dedicată cu permisiuni limitate. Nu utiliza credențiale de nivel admin.
Unde găsești cheile API: Verifică setările sau secțiunea pentru dezvoltatori a sistemului la care te conectezi (de exemplu, CRM-ul tău, platforma de e-commerce sau instrumentul de rezervări).
Pasul 4: Definește datele de intrare (ce trimite botul)
Parametrii de intrare sunt informațiile pe care botul le colectează din conversație și le trimite către sistemul tău.
Pentru fiecare parametru, specifici:
| Proprietate | Ce înseamnă |
|---|---|
| Nume | Numele parametrului (trebuie să corespundă cu ceea ce așteaptă sistemul tău) |
| Tip | Ce fel de date sunt (text, număr, adevărat/fals etc.) |
| Descriere | Spune AI-ului ce reprezintă această informație și unde să o găsească în conversație |
| Obligatoriu | Dacă este setat pe Da, botul va cere clientului această informație înainte de a continua |
Tipuri de parametri disponibili:
| Tip | Ce înseamnă |
|---|---|
| string | Text (nume, numere de comandă, adrese) |
| number | O valoare numerică (cantitate, preț) |
| boolean | Adevărat sau fals (valori da/nu) |
| array | O listă de elemente. Trimisă ca o listă JSON reală — în Run Test o poți introduce ca [8624], ["a", "b"] sau pur și simplu separată prin virgulă (8624, 8625) și este convertită automat pentru tine. Dacă API-ul tău este strict cu privire la conținutul listei — de exemplu, doar numere — setează opțiunea Item type lângă tip și fiecare valoare din listă va fi convertită la acesta. |
| query_param | Text care este trimis ca parametru URL în loc de corpul cererii. Folosește acest lucru atunci când API-ul tău așteaptă date în URL (de exemplu, ?order_id=123). |
Fiecare parametru are, de asemenea, un câmp opțional Cale corp cerere (Request body path). În mod normal, un parametru este trimis ca un câmp de nivel superior în corpul cererii (sau ca o valoare în șirul de interogare, pentru tipul query_param). Dacă endpoint-ul tău se așteaptă ca acesta să fie imbricat — de exemplu {"order": {"id": "ORD-123"}} — setează calea la order.id, iar platforma va imbrica valoarea acolo pentru tine.
Exemplu: Pentru o căutare a stării comenzii, ai putea defini:
- order_number (string, obligatoriu): „Numărul comenzii clientului. De obicei începe cu ORD- urmat de cifre. Cere clientului acest număr dacă nu l-a menționat deja.”
- email (string, opțional): „Adresa de e-mail a clientului pentru verificare suplimentară. Necesară doar dacă numărul comenzii singur nu găsește o potrivire.”
Ce primește sistemul tău automat
Pe lângă parametrii de intrare pe care îi definiți, platforma include automat date de sistem cu fiecare solicitare. Endpoint-ul dumneavoastră primește acest lucru într-un câmp system:
| Câmp de sistem | Ce conține |
|---|---|
system.contactId |
ID-ul de platformă al contactului din conversație |
system.campaignId |
ID-ul campaniei de care aparține conversația |
system.userId |
ID-ul tău de utilizator |
system.channel |
Canalul de mesagerie (de ex., "whatsapp", "instagram") |
system.contact |
Înregistrarea completă a contactului (nume, telefon, e-mail, etichete etc.) |
system.campaign |
Configurația campaniei |
system.test |
true dacă acesta este un test de tip „Încearcă”, false pentru conversații live |
Acest lucru este util dacă sistemul dumneavoastră trebuie să identifice contactul, să verifice ce campanie a declanșat funcția sau să se comporte diferit în timpul testării.
Nu aveți nevoie de datele de sistem? Activați comutatorul Omite datele de sistem (Skip System Data) în constructorul de funcții. Botul va trimite apoi doar parametrii de intrare pe care i-ați definit — fără date despre contact sau campanie. Utilizați această opțiune dacă endpoint-ul dumneavoastră respinge câmpurile neașteptate sau dacă pur și simplu doriți un payload mai simplu.
Pasul 5: Testează-l, apoi lasă botul să citească răspunsul
În mod normal, nu trebuie să mapezi deloc câmpurile de răspuns. Odată ce endpoint-ul tău răspunde, botul citește întregul răspuns JSON și folosește Descrierea și Scopul (Acțiune AI) ale funcției tale — plus descrierea fiecărui parametru — pentru a determina ce este important și a prezenta informația în mod natural. O descriere clară a funcției în sine („Recuperează starea curentă a unei comenzi a clientului, incluzând informațiile de livrare și urmărirea”) face mai multă treabă aici decât ar face maparea câmp cu câmp.
Dacă endpoint-ul tău returnează un răspuns mare și vrei ca botul să vadă doar câteva valori specifice, deschide secțiunea Mapare răspuns (restrânsă implicit, chiar deasupra butonului Test). Fiecare rând alege un câmp de nivel superior din răspuns: Câmp răspuns este numele câmpului din răspunsul JSON al API-ului tău, iar Câmp ieșire este numele sub care îl primește botul. Cu cel puțin un rând completat, botul primește doar valorile mapate de tine în loc de întregul corp al răspunsului. Lasă secțiunea goală pentru a păstra comportamentul implicit de răspuns complet.
Înainte de a salva, folosește secțiunea Test din partea de jos a generatorului pentru a lansa cererea exact așa cum a fost configurată și pentru a vedea răspunsul real, fără a părăsi aplicația:
Răspunsul pe care îl vedeți aici este răspunsul brut al endpoint-ului. Dacă ați configurat Maparea răspunsului mai sus, botul într-un chat real primește doar acele câmpuri mapate — testul arată întotdeauna răspunsul brut complet, astfel încât să puteți vedea ce este disponibil pentru mapare. Dacă ceva pare în neregulă (nume de câmpuri neașteptate, imbricare suplimentară), remediați acest lucru la nivelul endpoint-ului sau ajustați maparea.
Atribuirea funcțiilor unui Agent
După crearea unei funcții personalizate, trebuie să spui fiecărui Agent ce funcții poate folosi:
- Deschide Agentul din AI Studio → AI Agents.
- Mergi la fila AI Abilities (Abilități AI). (Pentru o campanie care își păstrează propriile setări AI direct, în loc să le gestioneze printr-un Agent separat, aceeași listă apare în schimb la pasul AI Abilities al acelei campanii.)
- Vei vedea o listă cu fiecare funcție personalizată pe care ai creat-o. Activează fiecare funcție pe care vrei ca botul acestui Agent să o poată apela.
- Fă clic pe Save changes (Salvează modificările) în partea de jos. Selecțiile se aplică doar după salvare.
Doar funcțiile atribuite sunt disponibile botului pentru acel Agent. Acest lucru previne utilizarea accidentală a unor funcții care nu sunt relevante.
Testarea funcțiilor personalizate
Înainte de a trece la varianta live, testați temeinic:
- Rulează testul încorporat - Folosește secțiunea Test din interiorul generatorului de funcții (vezi mai sus) pentru o verificare rapidă fără a părăsi aplicația — introdu valori realiste și fă clic pe Run test.
- Testează direct endpoint-ul sistemului tău - Pentru lista de verificare completă de mai jos, un instrument dedicat precum Postman (sau dezvoltatorul tău) analizează mai în profunzime decât un singur Run test.
- Testează în Try Out - Simulează o conversație în care clientul întreabă ceva ce ar trebui să declanșeze funcția.
- Verifică răspunsul - Asigură-te că botul citește și prezintă corect datele.
- Testează scenariile de eroare - Ce se întâmplă dacă clientul oferă un număr de comandă invalid? Ce se întâmplă dacă sistemul tău este temporar indisponibil?
Când testul returnează 401 sau 403
O eroare 401 sau 403 înseamnă că punctul final (endpoint) a primit cererea, dar a refuzat-o. Indiciul este că nu apare nimic în propriile jurnale — majoritatea instrumentelor resping un apel neautorizat înainte de a începe fluxul de lucru, deci nu există nimic de văzut din partea ta și pare că cererea nu a ajuns niciodată.
Aproape întotdeauna este vorba despre o nepotrivire de autentificare: punctul tău final dorește un anumit tip de acreditări, iar funcția trimite unul diferit. Verifică dacă antetul pe care l-ai adăugat la Pasul 3 este exact cel așteptat de sistemul tău.
Cea mai comună variantă a acestei probleme este un webhook protejat cu Basic Auth (n8n, Make și majoritatea instrumentelor găzduite local oferă acest lucru ca o bifă pe webhook-ul în sine), în timp ce funcția trimite un antet secret personalizat precum X-My-Secret. Basic Auth acceptă doar un antet Authorization, deci un antet personalizat este ignorat și apelul este respins. Ai două opțiuni:
- Dezactivează Basic Auth pe webhook și verifică antetul personalizat în interiorul fluxului de lucru.
- Păstrează Basic Auth activat și adaugă un antet
Authorizationla funcție, a cărui valoare să fie cuvântulBasicurmat deusername:passwordcodificat în base64.
Oricare dintre variante funcționează — asigură-te doar că ambele părți sunt de acord.
Când testul returnează 404
URL-ul punctului final este greșit sau fluxul de lucru nu este publicat. În n8n, în mod specific, fiecare webhook are un URL de Test și un URL de Producție separat, iar cel de Test ascultă doar cât timp ai editorul deschis. Copiază URL-ul de Producție și asigură-te că fluxul de lucru este activ.
Vizualizarea erorilor în Try Out și Chats
Atunci când AI-ul apelează o funcție personalizată în timpul unei conversații și apelul eșuează — credențiale incorecte, endpoint indisponibil, timeout — conversația afișează acum acest lucru: un indicator roșu „(nume funcție) a eșuat” apare în firul de discuție, atât în fila Try Out a agentului, cât și în conversațiile reale din Chats. Faceți clic pe indicator pentru a extinde detaliile: codul de stare returnat de endpoint-ul dumneavoastră și corpul răspunsului, care sunt de obicei suficiente pentru a vă spune exact ce trebuie remediat (un 401 cu un mesaj „unauthorized” înseamnă o problemă cu antetul de autentificare, un timeout înseamnă că endpoint-ul a durat mai mult de 30 de secunde).
Apelurile reușite afișează, de asemenea, un indicator — faceți clic pe el pentru a vedea ce a trimis efectiv înapoi endpoint-ul dumneavoastră. Aceasta este cea mai rapidă modalitate de a depana o integrare cap-la-cap: purtați conversația de test în Try Out, apoi faceți clic pe indicatorul funcției pentru a vedea rezultatul real al cererii fără a părăsi pagina.
Exemplu complet: Căutare stare comandă
Iată un exemplu complet configurat pe care îl poți folosi ca șablon:
Informații de bază:
- Nume:
check_order_status - Descriere: “Recuperează starea curentă a unei comenzi a clientului, inclusiv informațiile de livrare și urmărire”
- Acțiune AI: “Apelează această funcție atunci când un client întreabă despre starea comenzii sale, unde se află coletul sau când va sosi. Întreabă întotdeauna mai întâi numărul comenzii.”
Conexiune:
- URL:
https://api.mystore.com/orders/lookup - Metodă: POST
Antete:
Authorization:Bearer sk_live_abc123Content-Type:application/json
Parametri de intrare:
order_number(text, obligatoriu): “Numărul comenzii furnizat de client”customer_email(text, opțional): “Adresa de e-mail a clientului pentru verificare suplimentară”
Nu este necesară maparea răspunsului — cu o Descriere și o Acțiune AI clar setate mai sus, botul citește orice JSON returnează endpoint-ul tău (stare, număr de urmărire, dată de livrare, articole) și determină cum să comunice despre acesta.
Cum arată conversația:
Client: Hei, unde este comanda mea?
Bot: Bună! Mă bucur să verific starea comenzii tale. Îmi poți comunica numărul comenzii?
Client: Este ORD-78234
Bot: Lasă-mă să verific pentru tine…
Comanda ta ORD-78234 a fost expediată și este pe drum! Data estimată a livrării este 10 martie. Poți urmări coletul aici: https://tracking.example.com/1Z999AA1
Te mai pot ajuta cu altceva?
Exemplu complet: Starea comenzii Shopify
Dacă magazinul rulează pe Shopify, nu ai nevoie de un dezvoltator pentru a crea un endpoint de căutare — sistemul propriu Shopify poate răspunde direct la întrebările despre comenzi. (Pentru întrebări despre produse și stocuri într-un magazin Shopify, nu ai nevoie deloc de o funcție personalizată: conectează serverul integrat al magazinului — vezi Conectarea unui magazin Shopify.)
Mai întâi, creați un jeton de acces în Shopify. Shopify a modificat acest lucru în cursul anului 2026: aplicațiile nu mai pot fi create în interiorul panoului de administrare Shopify, iar noul ecran pentru aplicații vă oferă un ID de client și un Secret de client în loc de un jeton gata pregătit. Pașii de mai jos transformă aceste date într-un jeton permanent. Alocați aproximativ zece minute, o singură dată per magazin. (Dacă magazinul are deja o aplicație mai veche creată prin metoda veche, jetonul existent va continua să funcționeze — treceți direct la funcția personalizată de mai jos.)
- Accesați Shopify Dev Dashboard la dev.shopify.com, deschideți organizația dvs. și faceți clic pe Apps → Create app. Denumiți-o ceva de genul
Order lookup. - Acordați aplicației permisiunea read_orders, lansați o versiune și instalați aplicația pe magazin.
- Deschideți Setările aplicației și adăugați adresa web a magazinului (de exemplu
https://www.yourstore.com/) la URL-urile de redirecționare permise. Salvați. - Tot în Setări, copiați Client ID și Client secret.
- Într-un browser în care sunteți conectat la Shopify admin al acelui magazin, deschideți adresa de mai jos, înlocuind numele magazinului, ID-ul clientului și adresa de redirecționare cu ale dvs.:
https://YOUR-STORE.myshopify.com/admin/oauth/authorize?client_id=YOUR-CLIENT-ID&scope=read_orders&redirect_uri=https://www.yourstore.com/&state=12345Aprobați ecranul care apare. Browserul va ajunge la adresa dvs. de redirecționare, iar bara de adrese va conține acumcode=urmat de o valoare lungă — copiați acea valoare. Este validă doar pentru câteva minute, așa că treceți direct la pasul următor. - Schimbați acel cod cu token-ul, ceea ce puteți face în Your AI Connector. În constructorul de funcții personalizate, setați Metoda la POST și URL la
https://YOUR-STORE.myshopify.com/admin/oauth/access_token, adăugați trei parametri de intrare text numițiclient_id,client_secretșicode, apoi faceți clic pe Test, completați cele trei valori și rulați-l. Răspunsul conțineaccess_token— acesta este token-ul dvs. permanent. Copiați-l într-un loc sigur, apoi goliți constructorul și configurați funcția reală mai jos.
Apoi configurează funcția personalizată:
Informații de bază:
- Nume:
check_shopify_order - Descriere: “Caută o comandă în sistemul Shopify al magazinului și returnează starea, urmărirea și articolele acesteia”
- Acțiune AI: “Apelează această funcție atunci când un client întreabă despre starea comenzii sau livrarea sa. Întreabă întotdeauna mai întâi numărul comenzii.”
Conexiune:
- URL:
https://YOUR-STORE.myshopify.com/admin/api/2026-01/orders.json?status=any— înlocuieșteYOUR-STOREcu numele.myshopify.comal magazinului (această adresă folosește domeniul tehnic Shopify, nu domeniul personalizat al magazinului) - Metodă: GET
Antete:
X-Shopify-Access-Token:shpat_...(tokenul de mai sus)
Parametri de intrare:
name(query_param, obligatoriu): “Numărul comenzii clientului exact așa cum apare în confirmarea comenzii, inclusiv semnul # — de exemplu #1001. Cere clientului acest număr dacă nu l-a menționat deja.”
Nu este necesară maparea răspunsului — botul citește comanda returnată (starea plății, starea livrării, urmărirea, articolele) și răspunde în mod natural.
Bine de știut: un token creat în acest mod poate vedea comenzile din ultimele 60 de zile — suficient pentru întrebările de asistență zilnice, dar nu pentru un istoric complet al comenzilor.
Exemplu complet: Programare
Informații de bază:
- Nume:
create_booking - Descriere: “Creează o programare nouă în sistemul nostru de rezervări”
- Acțiune AI: “Folosește această funcție după confirmarea datei, orei și a detaliilor de contact cu clientul. Nu apela funcția până când clientul nu confirmă explicit că dorește să facă programarea.”
Conexiune:
- URL:
https://booking.mycompany.com/api/appointments - Metodă: POST
Parametri de intrare:
date(text, obligatoriu): “Data programării în format AAAA-LL-ZZ”time(text, obligatoriu): “Ora programării în format HH:MM”name(text, obligatoriu): “Numele complet al clientului”phone(text, obligatoriu): “Numărul de telefon al clientului”service_type(text, obligatoriu): “Tipul serviciului rezervat”
Exemplu complet: Adăugarea unui abonat la newsletter în CRM-ul tău
Un tipar foarte comun: botul termină de răspuns, oferă newsletter-ul tău, contactul răspunde cu adresa de e-mail, iar acea adresă ar trebui să ajungă direct în instrumentul tău de e-mail. Majoritatea sistemelor CRM (FluentCRM, ActiveCampaign, MailerLite, Brevo și altele) acceptă un simplu POST exact pentru acest lucru, deci nu este nevoie de o platformă de automatizare intermediară.
Acest exemplu utilizează FluentCRM pe WordPress. Structura este aceeași pentru orice alt instrument care îți oferă un „webhook de intrare” sau un endpoint de „creare abonat”.
Mai întâi, obține URL-ul din CRM-ul tău. În WordPress, deschide FluentCRM → Settings → Incoming Webhooks și creează un webhook. Alege lista, etichetele și starea abonamentului pe care ar trebui să le primească noile contacte, apoi copiază URL-ul webhook-ului generat. Tot ce setezi aici este aplicat automat, astfel încât botul trebuie doar să trimită adresa de e-mail.
Apoi configurează funcția personalizată:
Informații de bază:
- Nume:
add_newsletter_subscriber - Descriere: „Adaugă o persoană în lista noastră de newsletter folosind adresa de e-mail oferită în chat”
- Acțiune AI: „Folosește acest lucru în momentul în care contactul este de acord să se aboneze la newsletter și oferă adresa de e-mail. Nu apela funcția înainte ca aceștia să fi furnizat efectiv o adresă și nu o apela de două ori pentru aceeași persoană.”
Conexiune:
- URL: URL-ul webhook-ului pe care l-ai copiat din CRM-ul tău
- Metodă: POST
Parametri de intrare:
email(șir, obligatoriu): „Adresa de e-mail pe care contactul a oferit-o în conversație”first_name(șir, opțional): „Prenumele contactului, dacă a fost menționat”
Omite datele de sistem: activează această opțiune (on). CRM-ul tău are nevoie doar de câmpurile de mai sus, iar un payload mai simplu evită erorile din partea instrumentelor care resping câmpurile neașteptate.
Maparea răspunsului: nu este necesară aici. Nu trebuie să se întoarcă nimic pentru ca botul să își continue activitatea.
Nu uitați să activați funcția pentru Agentul care rulează conversația (consultați Atribuirea funcțiilor unui agent). Acesta este cel mai frecvent motiv pentru care o funcție construită corect nu se declanșează niciodată.
Sfat: botul are, de asemenea, un instrument încorporat de Actualizare e-mail contact (Update Contact Email), care salvează adresa în fișa de contact din cadrul platformei. Aceasta este separată de această funcție și utilă în paralel — instrumentul încorporat păstrează fișa ta de contact completă, iar funcția personalizată trimite adresa către CRM-ul tău.
Sfaturi pentru funcții personalizate fiabile
-
Asigură-te că cererile repetate sunt sigure. Dacă aceeași cerere este trimisă accidental de două ori, aceasta nu ar trebui să creeze înregistrări duplicate. Problemele de rețea pot cauza ocazional acest lucru.
-
Returnează mesaje de eroare clare. Dacă ceva nu merge bine din partea sistemului tău, returnează o eroare ușor de înțeles pentru utilizatori. Botul o va transmite clientului într-o manieră elegantă.
-
Menține timpii de răspuns sub 10 secunde. Dacă sistemul tău are nevoie de mai mult timp, ia în considerare returnarea unei confirmări rapide mai întâi.
-
Gestionează credențialele expirate sau invalide. Dacă cheia ta API expiră, asigură-te că mesajul de eroare este clar, astfel încât botul să știe să alerteze un om în loc să reîncerce.
-
Scrie descrieri detaliate. AI-ul folosește descrierile tale pentru a determina când să apeleze funcția și cum să extragă informațiile corecte din conversație. Descrierile vagi duc la greșeli.
-
Testează cu conversații reale. „Încearcă” este excelent pentru testarea inițială, dar monitorizează primele conversații live pentru a te asigura că totul funcționează cu întrebări reale ale clienților.
-
Păstrează jurnale (logs) de partea ta. Cere dezvoltatorului tău să înregistreze cererile care vin din aplicație, astfel încât să poți depana rapid orice problemă.
-
Folosește un URL final public. URL-ul funcției tale trebuie să fie o adresă web publică (HTTP/HTTPS). Adresele interne, localhost și cele din rețele private sunt respinse din motive de securitate, iar platforma nu urmărește redirecționările — direcționează funcția direct către URL-ul final, nu către unul care redirecționează către acesta.
Limite de execuție
Fiecare funcție personalizată are o secțiune opțională Limite de execuție în partea de jos a editorului. Aceasta controlează cât de des poate rula AI-ul funcția și dacă un rezultat anterior poate fi refolosit. Totul aici este opțional — lăsați totul gol și funcția se va comporta exact ca înainte.
Funcție doar în citire. Activați această opțiune dacă funcția dvs. doar citește date — o căutare de stoc, o verificare de preț, o căutare a stării unei comenzi — și nu creează sau modifică niciodată nimic. Atunci când o problemă temporară de rețea întrerupe AI-ul în timpul răspunsului, platforma poate reîncerca în siguranță pasul conversației în loc să lase clientul fără un răspuns. Activați-o doar dacă funcția nu scrie niciodată nimic: o funcție care creează înregistrări trebuie să rămână dezactivată, astfel încât o reîncercare să nu o poată rula accidental de două ori.
Servește rezultatul din cache la apeluri repetate. Când AI-ul apelează funcția din nou cu aceleași date de intrare (de exemplu, clientul pune aceeași întrebare de două ori), rezultatul anterior este refolosit în loc să apeleze din nou punctul final (endpoint). Rezultatele din cache sunt păstrate timp de până la 24 de ore, iar un apel cu date de intrare diferite va accesa întotdeauna punctul final pentru o interogare nouă.
Număr maxim de rulări per conversație. O limită strictă privind numărul de ori în care funcția poate rula în cadrul unei conversații. Setați-o la 1 pentru funcțiile care ar trebui să fie declanșate o singură dată per chat — generarea unei oferte, declanșarea unui apel înapoi, pornirea unei automatizări. Când limita este atinsă, AI-ul este informat că funcția a rulat deja și primește cel mai recent rezultat, astfel încât să poată răspunde în continuare clientului în loc să rămână tăcut.
Număr maxim de rulări per interval de timp. O limită de rată în timp: de exemplu, cel mult 5 rulări în 60 de minute. Util pentru funcțiile care apelează servicii terțe plătite sau declanșează automatizări mai complexe. Ambele căsuțe trebuie completate împreună (un număr de rulări și un interval în minute, până la 7 zile).
Câteva lucruri de știut:
- Limitele contorizează doar rulările reușite. Un apel care a eșuat din partea punctului dvs. final nu consumă din buget.
- Atunci când o rulare este blocată de o limită, clientul nu este lăsat niciodată în așteptare — AI-ul este informat despre motiv și lucrează cu informațiile pe care le are deja.
- Limitele se aplică peste tot unde rulează funcția: chat-uri obișnuite pe fiecare canal și funcții gestionate de o automatizare. Conversațiile de test din „Încearcă” (Try Out) nu sunt contorizate și nu sunt limitate.
Instrumente integrate pentru boți
Pe lângă funcțiile personalizate pe care le construiești singur, platforma vine cu o bibliotecă de instrumente predefinite pe care botul AI le poate folosi în timpul unei conversații. Acestea acoperă cele mai comune acțiuni pe care trebuie să le facă un bot — alertarea unui coleg, programarea unei întâlniri, etichetarea unui contact, căutarea pe site-ul tău, programarea unei urmăriri și multe altele — astfel încât să nu fii nevoit să le configurezi de la zero.
Botul decide când să folosească fiecare instrument în funcție de ceea ce se întâmplă în conversație și de modul în care este configurat Agentul tău (și campania atașată acestuia). Majoritatea acestor instrumente se activează automat când funcția aferentă este activată (de exemplu, instrumentele de rezervare devin disponibile doar după ce conectezi un calendar și activezi rezervările).
Cost în credite: Fiecare apel de instrument este facturat în funcție de nivelul de Calitate AI al Agentului tău, iar funcțiile personalizate pe care le creezi singur sunt facturate în același mod:
| Nivel de Calitate AI | Credite per apel de instrument | Cu propria cheie Anthropic (BYOK) conectată |
|---|---|---|
| Pro | 1 credit | 0 credite — rulează pe cheia ta |
| Economy (depreciat) | 0,5 credite | 0 credite — rulează pe cheia ta |
| Max | 0,25 credite | tot 0,25 credite, facturat chiar și cu propria cheie conectată, deoarece Max rulează pe propriul nostru model |
| Mini | 0,15 credite | tot 0,15 credite, facturat chiar și cu propria cheie conectată, deoarece Mini rulează pe propriul nostru model |
Instrumente pentru echipă și sarcini
| Instrument | Ce face | Când îl folosește botul |
|---|---|---|
| Alertă membru echipă | Oprește botul pentru acest contact și trimite un e-mail echipei tale că este nevoie de un om. Chat-ul este marcat pentru a fi preluat de un coleg. | Când clientul cere un om, este frustrat sau întreabă ceva ce botul nu are voie sau nu poate să răspundă. |
| Creare sarcină | Creează o sarcină nouă pe panoul tău de sarcini, opțional legată de contact și conversație. Botul continuă să răspundă normal — sarcina este doar o notă pentru echipa ta de a reveni ulterior. | Pentru elemente non-urgente, cum ar fi o cerere de funcționalitate, o oportunitate de vânzare suplimentară sau un apel pe care echipa ar trebui să îl gestioneze mai târziu. |
| Sugerează actualizare FAQ | Când botul întâlnește o întrebare la care nu poate răspunde bine, creează o sarcină prin care cere echipei tale să adauge un răspuns în baza de cunoștințe. | Când un contact întreabă ceva ce nu este acoperit de FAQ-urile existente — astfel încât lacuna să fie remediată pentru data viitoare. |
| Adaugă context la o sugestie FAQ | Dacă un alt contact întreabă ulterior ceva similar dintr-o altă perspectivă, botul adaugă acel context la sugestia FAQ existentă în loc să creeze o sarcină duplicat. | Automat — îți menține lista de sarcini curată când mai multe persoane ridică aceeași problemă de cunoștințe. |
Instrumente pentru contacte
| Instrument | Ce face | Când îl folosește botul |
|---|---|---|
| Etichetare | Rulează automat după fiecare răspuns al botului — nu este un instrument pe care botul care interacționează cu clientul decide să îl apeleze. Sistemul analizează conversația recentă și aplică etichete relevante, refolosind etichetele tale existente acolo unde este posibil (și creând una nouă doar când este necesar). | Automat — ori de câte ori conversația dezvăluie ceva ce merită segmentat, cum ar fi interesul, intenția, calitatea lead-ului sau limba. |
| Actualizează numele contactului | Salvează prenumele și/sau numele de familie al contactului atunci când acesta le partajează. | Când clientul se prezintă sau își corectează numele. |
| Actualizează e-mailul contactului | Salvează adresa de e-mail a contactului atunci când acesta o partajează. | Când clientul furnizează un e-mail — pentru buletine informative, chitanțe, căutări în cont etc. |
Instrumente pentru programări și rezervări
Aceste instrumente sunt disponibile doar atunci când rezervările sunt activate în campania legată de Agentul tău și este configurat un tip de eveniment de calendar.
| Instrument | Ce face | Când îl folosește botul |
|---|---|---|
| Verifică intervalele orare disponibile | Caută ce intervale sunt libere în calendarul tău conectat pentru o anumită dată sau perioadă. | Când clientul dorește să facă o programare și botul trebuie să ofere disponibilitate reală. |
| Programează o întâlnire | Creează programarea în calendarul tău și confirmă rezervarea către client. | După ce clientul confirmă o dată și o oră specifică. |
| Mută o întâlnire | Reprogrammează o întâlnire existentă la o nouă dată și oră. | Când clientul solicită reprogramarea. |
| Anulează o întâlnire | Anulează o întâlnire existentă. | Când clientul solicită anularea. |
| Caută întâlniri | Extrage programările existente ale unui contact, astfel încât botul să știe ce este deja stabilit. | Când clientul întreabă „când este programarea mea?” sau înainte de a oferi reprogramarea. |
Instrumente pentru cunoștințe și web
| Instrument | Ce face | Când îl folosește botul |
|---|---|---|
| Căutare pe site-ul tău | Scanează URL-urile pe care le-ai adăugat în lista de URL-uri dinamice a campaniei pentru a găsi pagini de produse, articole sau alt conținut care răspunde la întrebarea clientului. Disponibil doar când Căutare web AI este activată și ai adăugat cel puțin un URL dinamic. Dacă Căutarea web AI este dezactivată, botul nu poate citi pagini sau linkuri — nici măcar pe cele pe care clientul le lipește în chat. | Când clientul întreabă despre ceva ce se află probabil pe site-ul tău — produse, prețuri, locații, politici. |
| Verifică un link | Citește conținutul unui anumit URL, astfel încât botul să poată răspunde la întrebări despre acea pagină. Disponibil doar când Căutare web AI este activată și ai adăugat cel puțin un URL dinamic. Dacă Căutarea web AI este dezactivată, botul nu poate citi pagini sau linkuri — nici măcar pe cele pe care clientul le lipește în chat. | Când clientul distribuie un link sau întreabă despre o anumită pagină de pe site-ul tău. |
| Căutare pe web | Rulează o căutare publică pe Google și returnează primele rezultate, astfel încât botul să poată răspunde la întrebări din afara propriului tău conținut. | Când clientul întreabă despre ceva general (de ex., direcții, informații publice) care nu se află în baza ta de cunoștințe. Utilizat doar dacă căutarea web este activată. |
Instrumente de follow-up
Aceste instrumente necesită activarea urmăririlor (follow-ups) în campania conectată la Agentul tău.
| Instrument | Ce face | Când îl folosește botul |
|---|---|---|
| Programează o continuare inteligentă | Programează un mesaj de continuare inteligent folosind secvența ta de continuare — alege șablonul și momentul potrivit în funcție de conversație. | Când clientul nu mai răspunde sau cere botului să „revină mai târziu”. |
| Programează o continuare | Programează o continuare de bază la un moment specific. | Când botul trebuie să impulsioneze conversația într-un moment definit. |
Executor de funcții personalizate
| Instrument | Ce face | Când îl folosește botul |
|---|---|---|
| Rulează o funcție personalizată | Execută una dintre funcțiile personalizate pe care le-ai creat și atribuit Agentului (vezi restul acestei pagini). | Când solicitarea clientului corespunde scopului uneia dintre funcțiile tale personalizate. |
Instrumente pentru rezervări la restaurant (Zenchef și Formitable)
Aceste instrumente sunt disponibile doar atunci când este conectată o integrare Zenchef sau Formitable. Acestea permit botului să gestioneze rezervările la restaurant cap-la-cap.
| Instrument | Ce face | Când îl folosește botul |
|---|---|---|
| Verifică disponibilitatea restaurantului | Caută intervale de rezervare libere pentru o anumită dată, număr de persoane și (opțional) zonă de așezare. | Când un oaspete dorește să rezerve o masă. |
| Creează o rezervare la restaurant | Creează o rezervare nouă. | După ce oaspetele confirmă un interval specific. |
| Actualizează o rezervare la restaurant | Modifică data, ora, numărul de persoane sau notele unei rezervări existente. | Când oaspetele solicită modificarea rezervării. |
| Anulează sau schimbă starea rezervării | Anulează o rezervare sau îi actualizează starea (de ex., confirmată, neprezentare). | Când oaspetele anulează sau când botul trebuie să marcheze o schimbare de stare. |
| Caută rezervări | Găsește rezervările existente care corespund unor criterii precum nume, e-mail sau dată. | Când un oaspete care revine întreabă despre o rezervare existentă. |
| Actualizează profilul oaspetelui | Actualizează profilul oaspetelui în sistemul restaurantului (preferințe, note, informații de contact). | Când oaspetele împărtășește preferințe alimentare, un număr de telefon nou sau alte informații la nivel de profil. |
| Listează produsele restaurantului | Extrage lista de meniuri, meniuri fixe sau opțiuni suplimentare disponibile pentru rezervare. | Când oaspetele întreabă „ce meniuri fixe aveți?” sau botul trebuie să atașeze un meniu unei rezervări. |
Activarea și dezactivarea instrumentelor
Majoritatea instrumentelor sunt controlate în fila Abilități AI a Agentului (sau în pasul Abilități AI al campaniei, dacă lucrezi dintr-o campanie încă clasică):
- Instrumentele de rezervare se activează când activezi rezervările și conectezi un calendar — aceasta rămâne o setare per campanie pentru moment, cu un link direct către pasul acelei campanii din fila Abilități AI a Agentului
- Instrumentele de urmărire se activează când activezi urmăririle
- Instrumentele pentru restaurante se activează când conectezi un cont Zenchef sau Formitable
- Căutarea web are propriul comutator în fila Întrebări frecvente și cunoștințe
- Instrumentele pentru sarcini pot fi dezactivate per Agent cu comutatorul Permite AI să creeze sarcini (sunt activate implicit; comutatorul pentru sarcini la nivel de cont din Setări → Profil → Caracteristici dezactivează întregul sistem de sarcini peste tot)
- Instrumentele de actualizare a contactelor sunt controlate în aceeași filă Abilități AI — dacă AI-ul poate redenumi contactele sau salva informații suplimentare colectate despre acestea
- Instrumentele de alertă sunt întotdeauna disponibile; etichetarea rulează automat după fiecare răspuns al botului (nu este un instrument pe care botul alege să îl apeleze)
Dacă dorești ca botul să nu mai folosească un anumit instrument încorporat, cea mai simplă metodă este să dezactivezi funcția subiacentă (de exemplu, dezactivează rezervările pentru a dezactiva toate instrumentele de rezervare).
Funcții gestionate de o automatizare
Unele intrări din pagina Funcții personalizate pot purta insigna Gestionat de automatizare. Acestea nu au fost create aici — ele provin dintr-o automatizare cu un declanșator de tip Funcție Agent AI, care oferă agentului tău o abilitate ai cărei pași îi construiești vizual pe pânza de automatizare, în loc să indici o adresă web externă.
O funcție gestionată este administrată pentru tine: numele, descrierea și câmpurile sale respectă întotdeauna ceea ce este setat în declanșatorul automatizării, așa că nu poate fi editată sau ștearsă din această pagină — folosește linkul Deschide automatizarea și modifică automatizarea în sine. Poți alege în continuare ce agenți o au în mod obișnuit: în fila Capacități AI a unui agent, aceasta apare alături de celelalte capacități ale agentului cu un comutator obișnuit pornit/oprit (dacă automatizarea sa este întreruptă, rândul va specifica acest lucru — capacitatea devine activă când automatizarea este pornită). Tot restul se comportă ca orice altă funcție personalizată: AI-ul decide când să o apeleze, colectează detaliile pe care le-ai definit și poate folosi răspunsul automatizării în aceeași conversație.
Dacă alegi între cele două: direcționează o funcție personalizată obișnuită către un sistem care are deja o adresă de apelat; construiește o automatizare cu un declanșator de Funcție Agent AI atunci când munca este ceva ce ai prefera să asamblezi din pași — caută ceva într-o foaie de calcul sau bază de date, ramifică pe baza unei condiții, creează înregistrări — fără a rula propriul tău server. Vezi Automatizări.
Cerințele planului
Funcțiile personalizate sunt disponibile în planurile care includ funcționalitatea de funcții personalizate. Verificați abonamentul pentru a confirma disponibilitatea.
Pașii următori
- Conectează servere MCP la botul tău — un pachet gata pregătit de instrumente în loc de o singură funcție pe rând.
- Agenți AI — pagina principală a grupului AI Studio în care se află Funcțiile Personalizate și unde funcțiile personalizate sunt atribuite unui bot.