Your AI Connector Docs

Anpassade funktioner

Med anpassade funktioner kan din AI-bot ansluta till andra system under live-konversationer. Istället för att säga “Jag ska kontrollera detta och återkomma till dig”, kan boten slå upp en orderstatus, kontrollera lagersaldo eller skapa en post i ditt CRM (kundhanteringssystem – den programvara du använder för att spåra leads och kunder, såsom HubSpot eller Salesforce) – allt i realtid, medan kunden väntar.


Anpassade funktioner kontra webhooks

Detta är den vanligaste källan till förvirring, så det är värt att reda ut innan du bygger något.

Webhooks Anpassade funktioner
Riktning Envägs (skicka och glöm) Tvåvägs (anropa och vänta)
Vad boten gör Skickar en notis när något händer och fortsätter sedan. Anropar, pausar, väntar på svar och använder resultatet för att fortsätta konversationen.
Synlighet för konversationen Resultatet i det mottagande systemet är osynligt för boten – den ser aldrig vad som hände. Svaret matas direkt tillbaka till AI:n, så att boten kan citera det, resonera kring det och svara kunden med informationen.
Bäst för Loggning av händelser, synkronisering av data till ett CRM, triggning av externa automatiseringar (Zapier, Make, n8n). Allt där boten behöver ett svar innan den kan svara – live-uppslag, prissättning i realtid, generering av innehåll i farten.

När ska man välja vad: Om du bara behöver meddela ett annat system att något har hänt, använd en webhook – ett enkelriktat automatiserat meddelande som skickas till ett annat system (se Inställningar → Integrationer → Webhooks). Om boten behöver lära sig något från ett annat system innan den fortsätter konversationen, använd en anpassad funktion.


Exempel på vad anpassade funktioner möjliggör

Eftersom svaret matas tillbaka in i konversationen möjliggör anpassade funktioner saker som webhooks helt enkelt inte kan göra:

  • Lagersökning i Shopify eller WooCommerce i realtid — Innan boten ger ett prisförslag till en kund kontrollerar den lagersaldot i realtid och svarar “Ja, vi har 12 stycken i storlek M” istället för “låt mig kontrollera det och återkomma”.
  • Dynamisk prissättning från ett Google-kalkylark — Ditt säljteam uppdaterar priser i ett kalkylark; boten läser av den senaste raden mitt under konversationen och anger det aktuella priset utan att någon behöver ändra i AI-konfigurationen.
  • Voice-AI-återuppringningsagent — När boten kvalificerar en lead triggar den en röstagent (till exempel en ElevenLabs-driven uppringare) att ringa upp leaden inom några minuter, och bekräftar för kunden “bra, förvänta dig ett samtal inom de närmaste 5 minuterna”.
  • Anpassad offert-PDF, genererad och skickad via e-post mitt under chatten — Boten samlar in krav, anropar din offertbyggare, får tillbaka en PDF-URL och säger till kunden “Jag har precis skickat din offert via e-post – kontrollera din inkorg.”

Vad kan anpassade funktioner göra?

Se anpassade funktioner som att ge din bot superkrafter utöver att bara chatta. Här är exempel från verkligheten:

  • Orderstatus - En kund frågar “Var är min order?” och boten kontrollerar ditt e-handelssystem och svarar med leveransstatus och spårningslänk
  • Lagerkontroll - “Har ni den här i storlek 10?” Boten kontrollerar ditt lagersystem och ger ett svar i realtid
  • CRM-uppdateringar - När boten kvalificerar en lead skapar eller uppdaterar den automatiskt en post i HubSpot, Salesforce eller något annat CRM
  • Offertgenerering - Boten samlar in kundens krav och genererar en personlig offert från ditt prissättningssystem
  • Bokning - Boten skapar en tid i ditt externa bokningssystem
  • Rabattverifiering - “Är den här kupongkoden giltig?” Boten kontrollerar och bekräftar
  • Kontouppslag - En återkommande kund identifieras automatiskt och deras kontouppgifter hämtas

Kunden ser aldrig vad som händer bakom kulisserna. De upplever helt enkelt en bot som kan svara på deras frågor med korrekt, uppdaterad information.


Hur anpassade funktioner fungerar (den enkla versionen)

Här är vad som händer när en anpassad funktion triggas under en konversation:

  1. Kunden frågar något som kräver realtidsdata (t.ex. “Var är min beställning?”)
  2. Boten känner igen att den behöver använda en anpassad funktion för att svara
  3. Boten samlar in eventuell saknad information från kunden (t.ex. “Vad är ditt ordernummer?”)
  4. Plattformen skickar en förfrågan till ditt system (din webbplats, CRM eller något annat verktyg) med relevanta detaljer
  5. Ditt system svarar med datan (t.ex. orderstatus, spårningsnummer, leveransdatum)
  6. Boten läser svaret och formulerar ett naturligt svar: “Din beställning ORD-4582 har skickats och bör anlända senast fredag!”

Vad ett anpassat funktionsanrop kostar

Varje anpassat funktionsanrop debiteras enligt din agents AI-kvalitetsnivå:

AI-kvalitetsnivå Krediter per anpassat funktionsanrop Med din egen Anthropic-nyckel (BYOK) ansluten
Pro 1 kredit 0 krediter — körs på din nyckel
Ekonomi (utfasad) 0,5 krediter 0 krediter — körs på din nyckel
Max 0,25 krediter fortfarande 0,25 krediter, debiteras även med din egen nyckel ansluten
Mini 0,15 krediter fortfarande 0,15 krediter, debiteras även med din egen nyckel ansluten

Konfigurera en anpassad funktion (steg för steg)

  1. I huvudsidofältet, under AI Studio, klicka på Custom Functions.
  1. Klicka på den gröna knappen + Add Function (eller New function) längst upp till höger.

Listan över anpassade funktioner visar en tabell med följande kolumner:

Kolumn Vad den visar
Namn Funktionsnamnet (t.ex. check_order_status)
Beskrivning En kort sammanfattning av vad funktionen gör (förkortas till 50 tecken i tabellen)
Metod HTTP-metoden som används, visas som en färgad bricka: GET (blå), POST (grön), PUT (orange), DELETE (röd)
Skapad Datumet då funktionen skapades

Detta gör det enkelt att snabbt skanna dina funktioner och hitta den du behöver.

Steg 1: Ge den ett namn och en beskrivning

Fält Vad du ska ange Exempel
Namn Ett kort namn med bokstäver, siffror och understreck check_order_status
Beskrivning Förklara vad den här funktionen gör (AI:n läser detta för att avgöra när den ska användas) “Slår upp aktuell status för en kunds beställning med hjälp av deras ordernummer”
Syfte (AI-åtgärd) Berätta för AI:n exakt när och hur den ska använda funktionen “Använd denna när en kund frågar om sin orderstatus, frakt eller leverans. Fråga efter deras ordernummer först.”

Tips: Var mycket specifik i beskrivningen och syftet. Ju tydligare du är med när funktionen ska användas, desto mer tillförlitligt kommer boten att använda den vid rätt tillfälle.

Steg 2: Konfigurera anslutningen

Du måste berätta för appen vart förfrågan ska skickas:

Fält Vad som ska anges Exempel
URL Webbadressen till ditt systems slutpunkt (den specifika adressen i ditt system som tar emot förfrågan och skickar tillbaka data) https://api.yourstore.com/v1/orders/status
Metod Typen av förfrågan som ska skickas Se alternativ nedan

Vilken metod du ska välja:

Metod När den ska användas
GET Slå upp information (orderstatus, lagerstatus, kontouppgifter)
POST Skapa nya poster (supportärenden, leads, bokningar) eller komplexa uppslag
PUT Uppdatera en befintlig post helt och hållet
PATCH Uppdatera en del av en befintlig post
DELETE Ta bort en post

Om du är osäker på vilken du ska använda, kontrollera med din utvecklare eller dokumentationen för systemet du ansluter till. GET (för sökningar) och POST (för att skapa poster) är de vanligaste.

Steg 3: Lägg till autentiseringshuvuden

De flesta system kräver autentisering för att acceptera förfrågningar. Lägg till alla nödvändiga huvuden:

Huvud Exempelvärde
Authorization Bearer your-api-key-here
Content-Type application/json

Värden för rubriker som innehåller en nyckel eller ett lösenord, såsom Authorization eller X-API-Key, visas som punkter när de har skrivits in. Klicka på ögat bredvid värdet för att se det.

Säkerhetstips: Använd en dedikerad API-nyckel med begränsade behörigheter. Använd inte administratörsuppgifter.

Var hittar du API-nycklar: Kontrollera inställningarna eller utvecklarsektionen i systemet du ansluter till (t.ex. ditt CRM, din e-handelsplattform eller ditt bokningsverktyg).

Steg 4: Definiera indata (Vad boten skickar)

Indataparametrar är de informationsdelar som boten samlar in från konversationen och skickar till ditt system.

För varje parameter anger du:

Egenskap Vad det betyder
Namn Parameternamnet (måste matcha vad ditt system förväntar sig)
Typ Vilken typ av data det är (text, nummer, sant/falskt, etc.)
Beskrivning Berätta för AI:n vad denna information är och var den finns i konversationen
Obligatorisk Om inställd på Ja, kommer boten att fråga kunden efter denna information innan den fortsätter

Tillgängliga parametertyper:

Typ Vad det betyder
string Text (namn, ordernummer, adresser)
number Ett numeriskt värde (kvantitet, pris)
boolean Sant eller falskt (ja/nej-värden)
array En lista med objekt. Skickas som en riktig JSON-lista — i Run Test kan du skriva den som [8624], ["a", "b"] eller helt enkelt kommaseparerad (8624, 8625) så konverteras den åt dig. Om ditt API är strikt med vad listan innehåller — t.ex. endast siffror — ställ in den valfria Objekttyp bredvid typen så konverteras varje värde i listan till den.
query_param Text som skickas som en URL-parameter istället för i förfrågningskroppen. Använd detta när ditt API förväntar sig data i URL:en (t.ex. ?order_id=123).

Varje parameter har också ett valfritt fält för Sökväg för begärans brödtext (Request body path). Normalt skickas en parameter som ett fält på toppnivå i begärans brödtext (eller som ett frågesträngsvärde för typen query_param). Om din slutpunkt förväntar sig att den är nästlad istället — t.ex. {"order": {"id": "ORD-123"}} — ställer du in sökvägen till order.id så nästlar plattformen värdet åt dig.

Exempel: För en sökning av orderstatus kan du definiera:

  • order_number (string, obligatorisk): “Kundens ordernummer. Börjar vanligtvis med ORD- följt av siffror. Fråga kunden efter detta om de inte har nämnt det.”
  • email (string, valfri): “Kundens e-postadress för ytterligare verifiering. Behövs endast om ordernumret ensamt inte hittar en matchning.”

Vad ditt system tar emot automatiskt

Utöver de indataparametrar du definierar inkluderar plattformen automatiskt systemdata med varje förfrågan. Din slutpunkt tar emot detta i ett system-fält:

Systemfält Innehåll
system.contactId Plattform-ID för kontakten i konversationen
system.campaignId Identifierar AI-agenten som hanterar konversationen, i formatet agent:<agentId> (fältet behåller sitt äldre namn)
system.userId Ditt användar-ID
system.channel Meddelandekanalen (t.ex. "whatsapp", "instagram")
system.contact Hela kontaktposten (namn, telefon, e-post, taggar, etc.)
system.campaign Inställningarna för AI-agenten som hanterar konversationen (fältet behåller sitt äldre namn)
system.test true om detta är ett test i Try Out, false för live-konversationer
system.callback_url Endast när Resultat kommer senare är aktiverat: länken för att skicka resultatet till (se Långvariga jobb)
system.callback_expires_at Endast när Resultat kommer senare är aktiverat: när länken går ut

Detta är användbart om ditt system behöver identifiera kontakten, kontrollera vilken agent som anropade funktionen eller agera annorlunda under testning.

När en uppföljningskontroll anropar din funktion (se Skicka endast när en kontroll godkänns), skiljer sig anropet från ett anrop i en konversation: det har inga indataparametrar och fältet system innehåller endast system.contact (med dess id) plus ett system.follow_up-block (type, cycle_number, follow_up_number, reason, campaign_id, agent_id). Det finns inget campaign-objekt i det. Hoppa över systemdata gäller även för det anropet.

Behöver du inte systemdata? Aktivera reglaget Hoppa över systemdata i funktionsbyggaren. Boten skickar då endast de indataparametrar du definierat — ingen kontakt- eller agentdata. Använd detta om din slutpunkt avvisar oväntade fält eller om du helt enkelt vill ha en mer slimmad nyttolast.

Steg 5: Testa den, låt sedan boten läsa svaret

Du behöver normalt inte mappa svarsfält alls. När din slutpunkt svarar läser boten hela JSON-svaret och använder din funktions Beskrivning och Syfte (AI-åtgärd) — plus varje parameters egen beskrivning — för att räkna ut vad som är viktigt och presentera det på ett naturligt sätt. En tydlig beskrivning av själva funktionen (“Hämtar aktuell status för en kundorder inklusive fraktinformation och spårning”) gör mer nytta här än vad mappning fält för fält skulle göra.

Om din slutpunkt returnerar ett stort svar och du bara vill att boten ska se några specifika värden, öppna avsnittet Svarsmappning (som är dolt som standard, precis ovanför Test). Varje rad väljer ett fält på toppnivå från svaret: Svarsfält är fältnamnet i ditt API:s JSON-svar, och Utdatafält är namnet som boten tar emot det under. Med minst en rad ifylld får boten endast dina mappade värden istället för hela svarsbrödtexten. Lämna avsnittet tomt för att behålla standardbeteendet med fullständigt svar.

Innan du sparar, använd Test-sektionen längst ner i byggverktyget för att skicka begäran exakt som konfigurerat och se det faktiska svaret utan att lämna appen:

Svaret du ser här är slutpunktens råsvar. Om du har konfigurerat Svarsmappning ovan tar boten i en riktig chatt endast emot dessa mappade fält — testet visar alltid hela råsvaret så att du kan se vad som finns tillgängligt att mappa. Om något ser fel ut (oväntade fältnamn, extra nästling), åtgärda det på din slutpunkt eller justera din mappning.


Tilldela funktioner till en agent

När du har skapat en anpassad funktion måste du tala om för varje agent vilka funktioner den får använda:

  1. Öppna Agenten under AI Studio → AI-agenter.
  2. Gå till fliken AI-förmågor.
  3. Du ser en lista över alla anpassade funktioner du har skapat. Aktivera varje funktion som du vill att agentens bot ska kunna anropa.
  4. Klicka på Spara ändringar längst ner. Valen tillämpas först när de har sparats.

Endast tilldelade funktioner är tillgängliga för boten för den agenten. Detta förhindrar att boten av misstag använder funktioner som inte är relevanta.


Testa dina anpassade funktioner

Innan du går live, testa noggrant:

  1. Kör det inbyggda testet - Använd Test-sektionen inuti funktionsbyggaren (se ovan) för en snabb kontroll utan att lämna appen — fyll i realistiska värden och klicka på Kör test.
  2. Testa systemets slutpunkt direkt - För hela checklistan nedan gräver ett dedikerat verktyg som Postman (eller din utvecklare) djupare än ett enstaka Kör test.
  3. Testa i Prova på - Simulera en konversation där kunden frågar något som bör utlösa funktionen.
  4. Kontrollera svaret - Se till att boten korrekt läser och presenterar datan.
  5. Testa felscenarier - Vad händer om kunden anger ett ogiltigt ordernummer? Vad händer om ditt system ligger nere tillfälligt?

När testet returnerar 401 eller 403

En 401 eller 403 innebär att din slutpunkt tog emot anropet men nekade det. Ledtråden är att ingenting syns i dina egna loggar — de flesta verktyg avvisar ett obehörigt anrop innan arbetsflödet ens startar, så det finns ingenting att se på din sida och det ser ut som om anropet aldrig kom fram.

Detta beror nästan alltid på en autentiseringskonflikt: din slutpunkt kräver en viss typ av inloggningsuppgifter och funktionen skickar en annan. Kontrollera att headern du lade till i Steg 3 är exakt den som ditt system förväntar sig.

Den vanligaste varianten av detta är en webhook som skyddas med Basic Auth (n8n, Make och de flesta självhostade verktyg erbjuder detta som en kryssruta på själva webhooken) medan funktionen skickar en anpassad hemlig header som X-My-Secret. Basic Auth accepterar endast en Authorization-header, så en anpassad header ignoreras och anropet avvisas. Du har två alternativ:

  • Stäng av Basic Auth på webhooken och kontrollera din anpassade header inuti arbetsflödet istället.
  • Behåll Basic Auth aktiverat och lägg till en Authorization-header i funktionen vars värde är ordet Basic följt av din base64-kodade username:password.

Båda fungerar — se bara till att båda sidor är överens.

När testet returnerar 404

Slutpunkts-URL:en är felaktig eller så är arbetsflödet inte publicerat. I n8n har varje webhook specifikt en separat Test-URL och Production-URL, och test-URL:en lyssnar bara så länge du har redigeraren öppen. Kopiera Production-URL:en och se till att arbetsflödet är aktivt.

Se fel i Testa och Chattar

När AI:n anropar en anpassad funktion under en konversation och anropet misslyckas, till exempel på grund av felaktiga inloggningsuppgifter, en slutpunkt som ligger nere eller en timeout, visas detta nu i konversationen: en röd markering “(funktionsnamn) misslyckades” visas i tråden, både i agentens Try Out-flik och i riktiga konversationer under Chattar. Klicka på markeringen för att expandera detaljerna: statuskoden som din slutpunkt returnerade och dess svarstext, vilket oftast räcker för att du ska veta exakt vad som behöver åtgärdas (ett 401 med ett “unauthorized”-meddelande betyder att autentiseringshuvudet är fel, en timeout betyder att din slutpunkt tog längre tid än 30 sekunder; för ett jobb som kräver mer tid, se Långvariga jobb).

Lyckade anrop visar också en markör – klicka på den för att se vad din slutpunkt faktiskt skickade tillbaka. Detta är det snabbaste sättet att felsöka en integrering från början till slut: ha testkonversationen öppen i Testa, klicka sedan på funktionsmarkören för att se det faktiska resultatet av anropet utan att lämna sidan.

När ett verktyg fortsätter att misslyckas i riktiga konversationer

Om samma anpassade funktion misslyckas 3 gånger inom 24 timmar medan din AI-agent chattar, får du en avisering per dag om detta: via e-post, under klockikonen och som en push-notis om du har aktiverat det. Aviseringen namnger verktyget, visar det senaste felet och länkar till de berörda chattarna, eftersom agenten kommer att ha informerat dessa kontakter om att den stött på ett tekniskt problem. Funktionens rad i Inställningar visar en Misslyckas-rad med felantalet och det senaste felet tills verktyget fungerar igen; ett lyckat anrop rensar statusen. Du kan stänga av dessa aviseringar under Inställningar → Aviseringar → Verktygsfel.


Komplett exempel: Sökning av orderstatus

Här är ett fullständigt konfigurerat exempel som du kan använda som mall:

Grundläggande information:

  • Namn: check_order_status
  • Beskrivning: “Hämtar aktuell status för en kundorder, inklusive fraktinformation och spårning”
  • AI-åtgärd: “Anropa denna när en kund frågar om sin orderstatus, var paketet befinner sig eller när det kommer fram. Be alltid om ordernumret först.”

Anslutning:

  • URL: https://api.mystore.com/orders/lookup
  • Metod: POST

Rubriker:

  • Authorization: Bearer sk_live_abc123
  • Content-Type: application/json

Indataparametrar:

  • order_number (text, obligatorisk): “Ordernumret som kunden har angett”
  • customer_email (text, valfri): “Kundens e-postadress för ytterligare verifiering”

Ingen svarsmappning behövs — med en tydlig beskrivning och AI-åtgärd redan inställd ovan, läser boten vilken JSON som helst som din slutpunkt returnerar (status, spårningsnummer, leveransdatum, artiklar) och räknar ut hur den ska prata om det.

Hur konversationen ser ut:

Kund: Hej, var är min order?

Bot: Hej! Jag hjälper dig gärna att kontrollera din order. Kan du dela med dig av ditt ordernummer?

Kund: Det är ORD-78234

Bot: Låt mig söka upp det åt dig…

Din order ORD-78234 har skickats och är på väg! Det beräknade leveransdatumet är den 10 mars. Du kan spåra ditt paket här: https://tracking.example.com/1Z999AA1

Är det något annat jag kan hjälpa dig med?


Komplett exempel: Shopify-orderstatus

Om butiken körs på Shopify behöver du ingen utvecklare för att bygga en uppslags-endpoint — Shopifys eget system kan svara på orderfrågor direkt. (För produkt- och lagerfrågor i en Shopify-butik behöver du inte ens en anpassad funktion: anslut butikens inbyggda server istället — se Anslut en Shopify-butik.)

Skapa först en åtkomsttoken i Shopify. Shopify ändrade detta under 2026: appar kan inte längre skapas inuti Shopify-admin, och den nya app-skärmen ger dig ett Client ID och en Client secret istället för en färdig token. Stegen nedan omvandlar dessa till en permanent token. Räkna med cirka tio minuter, en gång per butik. (Om butiken redan har en äldre app skapad på det gamla sättet fortsätter dess befintliga token att fungera — hoppa direkt till den anpassade funktionen nedan.)

  1. Gå till Shopify Dev Dashboard på dev.shopify.com, öppna din organisation och klicka på Apps → Create app. Ge den ett namn, till exempel Order lookup.
  2. Ge appen behörigheten read_orders, publicera en version och installera appen i butiken.
  3. Öppna appens Settings och lägg till butikens egen webbadress (till exempel https://www.yourstore.com/) till de tillåtna omdirigeringsadresserna (redirect URLs). Spara.
  4. Fortfarande under Settings, kopiera Client ID och Client secret.
  5. I en webbläsare där du är inloggad på butikens Shopify-admin, öppna adressen nedan och ersätt butiksnamnet, klient-ID:t och omdirigeringsadressen med dina egna: https://YOUR-STORE.myshopify.com/admin/oauth/authorize?client_id=YOUR-CLIENT-ID&scope=read_orders&redirect_uri=https://www.yourstore.com/&state=12345 Godkänn skärmen som visas. Webbläsaren hamnar på din omdirigeringsadress och adressfältet innehåller nu code= följt av ett långt värde — kopiera det värdet. Det är bara giltigt i ett par minuter, så gå direkt till nästa steg.
  6. Byt ut den koden mot token, vilket du kan göra i Your AI Connector. I byggverktyget för anpassade funktioner, ställ in Method till POST och URL till https://YOUR-STORE.myshopify.com/admin/oauth/access_token, lägg till tre textindataparametrar med namnen client_id, client_secret och code, klicka sedan på Test, fyll i de tre värdena och kör det. Svaret innehåller access_token — det är din permanenta token. Kopiera den till en säker plats, rensa sedan byggverktyget och ställ in den riktiga funktionen nedan.

Ställ sedan in den anpassade funktionen:

Grundläggande information:

  • Namn: check_shopify_order
  • Beskrivning: “Slår upp en order i butikens Shopify-system och returnerar dess status, spårning och artiklar”
  • AI-åtgärd: “Anropa denna när en kund frågar om sin orderstatus eller leverans. Be alltid om ordernumret först.”

Anslutning:

  • URL: https://YOUR-STORE.myshopify.com/admin/api/2026-01/orders.json?status=any — ersätt YOUR-STORE med butikens .myshopify.com-namn (denna adress använder den tekniska Shopify-domänen, inte butikens anpassade domän)
  • Metod: GET

Rubriker:

  • X-Shopify-Access-Token: shpat_... (token från ovan)

Indataparametrar:

  • name (query_param, obligatorisk): “Kundens ordernummer exakt som det visas i orderbekräftelsen, inklusive #-tecknet — till exempel #1001. Be kunden om det om de inte har nämnt det.”

Ingen svarsmappning behövs — boten läser den returnerade ordern (betalningsstatus, leveransstatus, spårning, artiklar) och svarar naturligt.

Bra att veta: en token som skapats på detta sätt kan se ordrar från de senaste 60 dagarna — gott om tid för dagliga supportfrågor, men inte en fullständig orderhistorik.


Komplett exempel: Boka en tid

Grundläggande information:

  • Namn: create_booking
  • Beskrivning: “Skapar en ny bokning i vårt bokningssystem”
  • AI-åtgärd: “Använd denna efter att ha bekräftat datum, tid och kontaktuppgifter med kunden. Anropa inte förrän kunden uttryckligen har bekräftat att de vill boka.”

Anslutning:

  • URL: https://booking.mycompany.com/api/appointments
  • Metod: POST

Indataparametrar:

  • date (text, obligatorisk): “Bokningsdatum i formatet ÅÅÅÅ-MM-DD”
  • time (text, obligatorisk): “Bokningstid i formatet TT:MM”
  • name (text, obligatorisk): “Kundens fullständiga namn”
  • phone (text, obligatorisk): “Kundens telefonnummer”
  • service_type (text, obligatorisk): “Typ av tjänst som bokas”

Komplett exempel: Lägg till en nyhetsbrevsprenumerant i ditt CRM

Ett mycket vanligt mönster: boten har svarat klart, erbjuder nyhetsbrevet, kontakten svarar med sin e-postadress, och den adressen ska hamna direkt i ditt e-postverktyg. De flesta CRM-system (FluentCRM, ActiveCampaign, MailerLite, Brevo med flera) accepterar ett enkelt POST-anrop för just detta, så ingen automatiseringsplattform behövs däremellan.

Detta exempel använder FluentCRM på WordPress. Strukturen är densamma för alla andra verktyg som ger dig en “inkommande webhook” eller en slutpunkt för att “skapa prenumerant”.

Först, hämta URL:en från ditt CRM. I WordPress, öppna FluentCRM → Inställningar → Inkommande webhooks och skapa en webhook. Välj lista, taggar och prenumerationsstatus som nya kontakter ska få, och kopiera sedan webhook-URL:en som genereras. Allt du ställer in här tillämpas automatiskt, så boten behöver bara skicka e-postadressen.

Ställ sedan in den anpassade funktionen:

Grundläggande information:

  • Namn: add_newsletter_subscriber
  • Beskrivning: “Lägger till en person i vår nyhetsbrevslista med hjälp av e-postadressen de angav i chatten”
  • AI-åtgärd: “Använd denna i samma ögonblick som kontakten går med på att prenumerera på nyhetsbrevet och anger sin e-postadress. Anropa den inte innan de faktiskt har angett en adress, och anropa den inte två gånger för samma person.”

Anslutning:

  • URL: webhook-URL:en du kopierade från ditt CRM
  • Metod: POST

Indataparametrar:

  • email (sträng, obligatorisk): “E-postadressen som kontakten angav i konversationen”
  • first_name (sträng, valfri): “Kontaktens förnamn, om de nämnde det”

Hoppa över systemdata: slå på denna. Ditt CRM behöver bara fälten ovan, och en mindre nyttolast undviker fel från verktyg som avvisar oväntade fält.

Svarsmappning: behövs inte här. Ingenting behöver skickas tillbaka för att boten ska kunna fortsätta.

Glöm inte att aktivera funktionen för den agent som kör konversationen (se Tilldela funktioner till en agent). Detta är den vanligaste anledningen till att en korrekt byggd funktion aldrig körs.

Tips: boten har också ett inbyggt verktyg för att uppdatera kontaktens e-postadress, vilket sparar adressen i kontaktposten inuti plattformen. Det är separat från denna funktion och användbart vid sidan av den — det inbyggda verktyget håller din egen kontaktpost komplett, medan den anpassade funktionen skickar adressen till ditt CRM.


Tips för tillförlitliga anpassade funktioner

  1. Se till att upprepade förfrågningar är säkra. Om samma förfrågan av misstag skickas två gånger bör den inte skapa dubbletter. Nätverksproblem kan ibland orsaka detta.

  2. Returnera tydliga felmeddelanden. Om något går fel på ditt systems sida, returnera ett läsbart felmeddelande. Boten kommer att vidarebefordra det till kunden på ett smidigt sätt.

  3. Håll svarstiderna under 10 sekunder. Om ditt system tar längre tid, överväg att returnera en snabb bekräftelse först.

  4. Hantera utgångna eller ogiltiga autentiseringsuppgifter. Om din API-nyckel går ut, se till att felmeddelandet är tydligt så att boten vet att den ska varna en människa istället för att försöka igen.

  5. Skriv detaljerade beskrivningar. AI:n använder dina beskrivningar för att räkna ut när funktionen ska anropas och hur rätt information ska extraheras från konversationen. Vaga beskrivningar leder till misstag.

  6. Testa med riktiga konversationer. “Prova på” är utmärkt för inledande tester, men övervaka dina första live-konversationer för att säkerställa att allt fungerar med riktiga kundfrågor.

  7. Håll loggar på din sida. Be din utvecklare att logga förfrågningarna som kommer från appen så att du snabbt kan felsöka eventuella problem.

  8. Om din brandvägg kräver en IP-tillåtelselista, skickas varje anrop till en anpassad funktion (och varje uppföljningskontroll) från en fast IPv4-adress, samma som våra webhooks använder; inga intervall, ingen IPv6, ingen rotation. Kontakta supporten så ger vi dig adressen. Aktivera begärandesignering och kontrollera signaturen som din faktiska säkerhetskontroll, och betrakta IP-adressen som ett extra filter.

  9. Använd en publik slutgiltig URL. Din funktions-URL måste vara en publik webbadress (HTTP/HTTPS). Interna adresser, localhost och adresser i privata nätverk avvisas av säkerhetsskäl, och plattformen följer inte omdirigeringar — peka funktionen direkt mot den slutgiltiga URL:en, inte mot en som omdirigerar till den.


Långvariga jobb: hämta resultatet senare

Normalt måste en anpassad funktion svara inom 30 sekunder medan kontakten väntar på svaret. Vissa jobb tar längre tid än så: rendera en video, köra en kreditupplysning, vänta på att en person hos dig godkänner något. För dessa, aktivera Resultat kommer senare (långvarigt). AI:ns anrop startar då bara jobbet. Din tjänst svarar omedelbart, AI:n meddelar kontakten att resultatet är på väg och fortsätter konversationen, och din tjänst skickar resultatet till en återuppringningslänk när det är klart.

När ska det användas

Använd det när din tjänst inte på ett tillförlitligt sätt kan svara inom 30 sekunder. Lämna det avstängt för snabba sökningar (en orderstatus, en lagerkontroll, ett pris): dessa är enklare som ett vanligt anrop, eftersom AI:n svarar med resultatet i samma svar.

Inställningarna i editorn

Du hittar dessa i editorn för anpassade funktioner, bredvid Hoppa över systemdata.

Inställning Vad den gör
Resultat kommer senare (långvarigt) Gör om funktionen till en startsignal. Din tjänst har 30 sekunder på sig att svara på det första anropet (valfri 2xx-status, brödtexten ignoreras), och därefter upp till Vänta upp till på sig att skicka resultatet.
När resultatet anländer AI:n skriver nästa meddelande (standard): AI:n läser resultatet och skriver nästa meddelande med sin egen röst, enligt funktionens Syfte (AI-åtgärd). Skicka texten som den är: texten du skickar publiceras ord för ord till kontakten.
Vänta upp till Hur länge återuppringningslänken förblir giltig, i timmar, från 1 till 168 (7 dagar). Standardvärdet är 24.

Vad din tjänst tar emot

Med reglaget aktiverat innehåller varje anrop återuppringningslänken på tre ställen, utöver allt som beskrivs ovan (dina indataparametrar, system-blocket och signeringshuvudena):

Var Innehåll
Huvud X-Callback-Url Återuppringningslänken.
Brödtextfält callback_url Samma länk, för POST, PUT, PATCH och DELETE. För GET och HEAD är det istället en frågeparameter med namnet callback_url.
system.callback_url och system.callback_expires_at Länken och när den går ut (ett ISO 8601-datum och tid). Utelämnas när Hoppa över systemdata är aktiverat.

Länken är unik för varje anrop, tillhör den kontakten och det anropet, fungerar en gång och går ut efter Vänta upp till. Du behöver ingen API-nyckel för att använda den: själva länken är behörigheten. Behandla den som ett lösenord och skriv aldrig ner den i en offentlig logg.

Skicka resultatet

När jobbet är klart, skicka en POST till återuppringningslänken:

POST https://api.<your host>/v1/custom-functions/callback/d3f9...
Content-Type: application/json

{
  "result": { "video_url": "https://cdn.example.com/spring-offer.mp4", "duration_seconds": 42 },
  "message": "Your video is ready: https://cdn.example.com/spring-offer.mp4"
}
  • result är vad AI:n läser. Det kan vara text eller ett JSON-objekt.
  • message är valfritt. Med Skicka texten som den är tar kontakten emot message när du skickar en, annars result när det är text.
  • media_url är valfritt: en https-länk till en fil (bild, video, ljud eller dokument) som kontakten tar emot som en riktig bilaga, inte som en länk. Se Skicka en fil nedan.
  • Du kan även skicka en brödtext med vanlig text med Content-Type: text/plain. Den behandlas som result.
  • Brödtexten kan vara upp till 64 KB.

Vad callback-länken svarar:

Status Body Betydelse
202 {"ok":true,"received":true} Resultatet togs emot.
200 {"ok":true,"duplicate":true} Denna länk har redan tagit emot ett resultat. Ingenting händer en andra gång, så ett nytt försök är alltid säkert.
400 Brödtexten är inte giltig.
404 Länken är okänd. Kontrollera att du använde den exakta länken från förfrågan.
410 Länken har gått ut. AI:n har redan informerats om att resultatet aldrig kom.
413 Brödtexten är större än 64 KB.
429 Fler än 20 inlägg på en minut till samma länk. Vänta och försök igen.

Ett komplett exempel: en video som tar tre minuter

  1. AI:n anropar din funktion. Du tar emot (förkortat):
POST https://api.example.com/render
X-Callback-Url: https://api.<your host>/v1/custom-functions/callback/d3f9...
Content-Type: application/json

{
  "video_title": "Spring offer",
  "callback_url": "https://api.<your host>/v1/custom-functions/callback/d3f9...",
  "system": {
    "contactId": "...",
    "callback_url": "https://api.<your host>/v1/custom-functions/callback/d3f9...",
    "callback_expires_at": "2026-10-20T19:15:00.000Z"
  }
}
  1. Din tjänst startar renderingen och svarar direkt:
{ "status": "started" }
  1. AI:n berättar för kontakten att videon skapas och fortsätter chatta.
  2. Tre minuter senare postar din tjänst resultatet till callback-länken:
{ "result": { "video_url": "https://cdn.example.com/spring-offer.mp4", "duration_seconds": 42 } }
  1. AI:n skriver nästa meddelande med egna ord, till exempel “Din video är klar: https://cdn.example.com/spring-offer.mp4”.

Använder du Zapier eller Make? Låt trigger-webhooken ta emot anropet och gör det sista steget i flödet till en POST till callback_url från trigger-datan.

Vad som händer i chatten

Resultatet sparas i konversationen som en funktionspost, så du ser det i inkorgen som vilket annat anrop till en anpassad funktion som helst. Beroende på När resultatet anländer skriver och skickar sedan AI:n nästa meddelande (detta kostar ett AI-svar, precis som alla AI-meddelanden), eller så skickas din text som den är. Med Skicka texten som den är skickas fältet message när du inkluderar ett, annars result när det är klartext; om du bara postar ett objekt utan text skriver AI:n meddelandet istället.

Om AI:n är avstängd för den kontakten när resultatet anländer (en teammedlem tog över, AI:n pausades, agenten är avstängd eller har slut på krediter), sparas resultatet fortfarande i konversationen, men inget meddelande skickas. Det skickas inte heller senare när AI:n slås på igen. Teammedlemmen ser resultatet i chatten och kan använda det.

I agentens flik Testa fungerar hela flödet också: resultatet anländer i testchatten.

Skicka en fil (video, bild, PDF)

Ett resultat som är en fil, till exempel en video som din tjänst renderat i bakgrunden, når kontakten som en bilaga som de kan öppna i chatten, i båda lägena. Plattformen hittar filen i din callback på följande sätt:

  1. media_url i brödtexten, när du skickar en.
  2. Annars ett filfält på result-objektet: file_url, video_url, image_url, pdf_url, document_url, audio_url, attachment_url eller download_url.
  3. Annars den första https-länken i texten som slutar med ett filändelse som .mp4, .jpg, .png eller .pdf.

Med AI:n skriver nästa meddelande skriver AI:n texten och filen bifogas till det meddelandet (AI:n instrueras att inte klistra in länken). Med Skicka texten som den är är din message bildtexten för bilagan.

{
  "result": { "status": "done", "title": "Spring offer" },
  "message": "Your video is ready.",
  "media_url": "https://cdn.example.com/spring-offer.mp4"
}

Filer kan vara upp till 16 MB och måste vara nåbara via https. Varje kanal hanterar olika typer: till exempel stöder e-post och WhatsApp-kanaler video, bilder, ljud och dokument, medan SMS inte stöder filer. När en kanal inte kan ta emot filen, eller om filen är för stor, tar kontakten fortfarande emot meddelandet, med länken till filen tillagd i slutet.

När resultatet aldrig anländer

Om ingenting har postats innan Vänta upp till har löpt ut, informeras AI:n om att resultatet aldrig kom, så att den kan meddela kontakten. En post med koden APP-3103 visas under Inställningar → Fellogg, och du får ett meddelande om verktygsfel.

Gränser i korthet

  • Ett resultat per callback-länk. Senare inlägg till samma länk besvaras som dubbletter och ändrar ingenting.
  • Upp till 64 KB per resultat.
  • En fil per resultat, upp till 16 MB, via https.
  • Upp till 20 inlägg per minut till en länk.
  • Vänta upp till från 1 till 168 timmar.
  • Din tjänst har fortfarande 30 sekunder på sig att besvara det första anropet.

Verifiera att ett anrop verkligen kom från oss

Vem som helst som får reda på din funktions URL kan skicka en falsk förfrågan till den. En lång hemlighet i en autentiseringsrubrik hjälper, men det är samma värde vid varje anrop, så vem som helst som ser en förfrågan (i en logg eller en skärmdump) kan återanvända den. Begärandesignering löser detta: varje anrop bär på en signatur som endast någon som innehar din hemlighet kan producera, och som löper ut efter några minuter.

Signering är valfritt och avstängt som standard, och det är en inställning för hela ditt konto: en enda hemlighet signerar varje anpassad funktion.

Aktivera signering

  1. Öppna Anpassade funktioner.
  2. Nedanför din lista med funktioner, leta upp kortet Begärandesignering och klicka på Aktivera signering.
  3. Klicka på Visa, kopiera hemligheten (den börjar med whsec_) och lagra den i systemet som tar emot anropen. Behandla den som ett lösenord.

Från samma kort kan du kopiera hemligheten igen, Rotera den (den gamla slutar fungera omedelbart) eller Stänga av signering.

Vad vi skickar

När signering är aktiverat bär varje anrop som en anpassad funktion gör på två extra rubriker: AI:ns anrop under en chatt, villkor för uppföljningsutskick och knappen Kör test i redigeraren.

Huvud Betydelse
X-Webhook-Signature Signaturen, i formen v1=<hex>.
X-Webhook-Timestamp När vi skickade den, som en Unix-tidsstämpel i sekunder.

Varje anrop, signerat eller ej, bär även på User-Agent: Custom-Function/1.0 såvida du inte anger din egen User-Agent-rubrik.

Rubrikerna och signaturen fungerar exakt som signerade webhooks, så om du redan verifierar våra webhooks fungerar samma kod här. Endast hemligheten är annorlunda.

Hur man verifierar

Signaturen är en HMAC-SHA256 av strängen <timestamp>.<raw request body>, med din signeringshemlighet som nyckel. Kontrollera den mot den råa kroppen, de exakta bytes du tog emot: att tolka JSON och omvandla den tillbaka till text kan ändra bytesen, och signaturen kommer inte att matcha.

En funktion som använder GET (eller en POST utan innehåll att skicka) har ingen kropp, så den signerade strängen är bara <timestamp>. med en tom kropp. Signaturen bevisar då att anropet kom från oss och är nyligen utfört, men den täcker inte frågesträngen.

Node.js-exempel:

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");
  const received = signature.replace("v1=", "");

  return received.length === expected.length && crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));
}

Python-exempel:

import hashlib, hmac, time

def verify(raw_body: bytes, headers, secret: str) -> bool:
    timestamp = headers.get("X-Webhook-Timestamp", "")
    signature = headers.get("X-Webhook-Signature", "").replace("v1=", "")
    if not timestamp or 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)

Testa det med Kör test i redigeraren: när signering är aktiverat signeras testanropet exakt som ett live-anrop, så en funktion som klarar testet kommer även att klara din kontroll under riktiga chattar.

Använder du API:et? Samma hemlighet kan läsas, genereras eller roteras, och tas bort med GET, POST och DELETE på /v1/custom-functions/signing-secret.


Körningsbegränsningar

Varje anpassad funktion har en valfri sektion för Körningsbegränsningar längst ner i editorn. Den styr hur ofta AI:n får köra funktionen och om ett tidigare resultat kan återanvändas. Allt här är valfritt — lämna allt tomt så fungerar funktionen precis som tidigare.

Skrivskyddad funktion. Aktivera detta om din funktion endast läser data – en aktiekursuppslagning, en priskontroll, en sökning av orderstatus – och aldrig skapar eller ändrar någonting. När ett tillfälligt nätverksavbrott avbryter AI:n mitt i ett svar kan plattformen säkert försöka utföra konversationssteget igen istället för att lämna kunden utan svar. Aktivera den endast om funktionen verkligen aldrig skriver något: en funktion som skapar poster måste förbli avstängd, så att ett nytt försök aldrig av misstag kan köra den två gånger. Funktioner som använder GET-metoden behandlas automatiskt som skrivskyddade, eftersom GET-förfrågningar endast är avsedda att hämta data; POST-, PUT-, PATCH- och DELETE-funktioner behöver växlingsknappen.

Använd cachat resultat vid upprepade anrop. När AI:n anropar funktionen igen med samma indata (till exempel om kunden ställer samma fråga två gånger), återanvänds det tidigare resultatet istället för att anropa din slutpunkt igen. Cachade resultat sparas i upp till 24 timmar, och ett anrop med annan indata går alltid direkt till din slutpunkt.

Max antal körningar per konversation. Ett hårt tak för hur många gånger funktionen får köras inom en konversation. Ställ in den på 1 för funktioner som bara ska köras en gång per chatt — generera en offert, trigga en återuppringning, starta en automatisering. När taket nås får AI:n veta att funktionen redan har körts och får det senaste resultatet, så att den fortfarande kan svara kunden istället för att bli tyst.

Max antal körningar per tidsfönster. En hastighetsbegränsning över tid: till exempel högst 5 körningar inom 60 minuter. Användbart för funktioner som anropar betalda tredjepartstjänster eller triggar tyngre automatiseringar. Båda rutorna måste fyllas i tillsammans (antal körningar och ett fönster i minuter, upp till 7 dagar).

Skicka erbjudanden, kontrakt eller fakturor på LinkedIn. När AI:n svarar på LinkedIn skriver den från kontoinnehavarens egen inkorg, så den bör inte skicka ett erbjudande, kontrakt, offert, faktura, betalningslänk eller åtkomst för innehavarens räkning om inte innehavaren har sagt så. Med Automatiskt (standardinställningen) körs inte en funktion vars namn eller beskrivning anger att den skickar något av dessa på LinkedIn: AI:n får veta att inget skickades och meddelar personen att innehavaren kommer att hantera det. Välj Tillåtet för att låta funktionen köras på LinkedIn ändå, eller Aldrig på LinkedIn för att stoppa en funktion som den automatiska kontrollen skulle missa. Andra kanaler påverkas inte, och till skillnad från begränsningarna ovan gäller denna inställning även i Testa.

Några saker att känna till:

  • Begränsningar räknar endast lyckade körningar. Ett anrop som misslyckades på din slutpunkts sida förbrukar inte budgeten.
  • När en körning blockeras av en begränsning lämnas kunden aldrig hängande — AI:n får veta varför och arbetar vidare med den information den redan har.
  • Begränsningar gäller överallt där funktionen körs: vanliga chattar i alla kanaler och funktioner som hanteras av en automatisering. Testkonversationer i “Try Out” räknas inte och begränsas inte.

Inbyggda botverktyg

Utöver de anpassade funktioner du bygger själv, levereras plattformen med ett bibliotek av förbyggda verktyg som AI-boten kan använda under en konversation. Dessa täcker de vanligaste sakerna en bot behöver göra — varna en teammedlem, boka ett möte, tagga en kontakt, söka på din webbplats, schemalägga en uppföljning med mera — så att du inte behöver koppla ihop dem från grunden.

Boten avgör när varje verktyg ska användas baserat på vad som händer i konversationen och hur din agent är konfigurerad. De flesta av dessa verktyg aktiveras automatiskt när den relaterade funktionen aktiveras (till exempel blir bokningsverktygen endast tillgängliga när du ansluter en kalender och aktiverar bokningar).

Kreditkostnad: Varje verktygsanrop debiteras enligt din agents AI-kvalitetsnivå, och anpassade funktioner som du bygger själv debiteras på samma sätt:

AI-kvalitetsnivå Krediter per verktygsanrop Med din egen Anthropic-nyckel (BYOK) ansluten
Pro 1 kredit 0 krediter — körs på din nyckel
Ekonomi (utfasad) 0,5 krediter 0 krediter — körs på din nyckel
Max 0,25 krediter fortfarande 0,25 krediter, debiteras även med din egen nyckel ansluten
Mini 0,15 krediter fortfarande 0,15 krediter, debiteras även med din egen nyckel ansluten

Team- och uppgiftsverktyg

Verktyg Vad det gör När boten använder det
Varna en teammedlem Pausar boten för denna kontakt och mejlar ditt team om att en människa behövs. Chatten flaggas så att en kollega kan ta över. När kunden ber om att få prata med en människa, är frustrerad eller frågar något som boten inte får eller kan svara på.
Skapa en uppgift Skapar en ny uppgift på din uppgiftstavla, valfritt länkad till kontakten och konversationen. Boten fortsätter svara som vanligt – uppgiften är bara en notering för ditt team att följa upp. För icke-brådskande ärenden som en funktionsförfrågan, en merförsäljningsmöjlighet eller en återuppringning som teamet bör hantera senare.
Föreslå en FAQ-uppdatering När boten stöter på en fråga den inte kan besvara bra, skapar den en uppgift som ber ditt team att lägga till ett svar i kunskapsbasen. När en kontakt frågar något som inte täcks av dina befintliga FAQ:er – så att luckan täpps till till nästa gång.
Lägg till kontext till ett FAQ-förslag Om en annan kontakt senare ställer en liknande fråga ur en annan vinkel, lägger boten till den kontexten till det befintliga FAQ-förslaget istället för att skapa en dubblettuppgift. Automatiskt – håller din uppgiftslista ren när flera personer tar upp samma kunskapslucka.

Kontaktverktyg

Verktyg Vad det gör När boten använder det
Taggning Körs automatiskt efter varje botsvar — det är inte ett verktyg som den kundvända boten väljer att anropa. Systemet granskar den senaste konversationen och tillämpar relevanta taggar, återanvänder dina befintliga taggar där det är möjligt (och skapar en ny endast när det behövs). Automatiskt — närhelst konversationen avslöjar något värt att segmentera på, såsom intresse, avsikt, lead-kvalitet eller språk.
Uppdatera kontaktnamn Sparar kontaktens för- och/eller efternamn när de delar det. När kunden presenterar sig eller korrigerar ett namn.
Uppdatera kontakt-e-post Sparar kontaktens e-postadress när de delar den. När kunden anger en e-postadress — för nyhetsbrev, kvitton, kontosökningar, etc.

Verktyg för tidsbokning

Dessa verktyg är endast tillgängliga när bokningar är aktiverade på din agent och en kalenderhändelsetyp är konfigurerad.

Verktyg Vad det gör När boten använder det
Kontrollera lediga tider Söker efter vilka tider som är lediga i din anslutna kalender för ett visst datum eller datumintervall. När kunden vill boka och boten behöver erbjuda faktiska lediga tider.
Boka en tid Skapar bokningen i din kalender och bekräftar bokningen för kunden. Efter att kunden har bekräftat ett specifikt datum och tid.
Flytta en bokning Ändrar tid för en befintlig bokning till ett nytt datum och tid. När kunden ber om att få boka om.
Avboka en tid Avbokar en befintlig bokning. När kunden ber om att få avboka.
Sök efter bokningar Hämtar en kontakts befintliga bokningar så att boten vet vad som redan är inbokat. När kunden frågar “när har jag min bokning?” eller innan boten erbjuder ombokning.

Kunskaps- och webbverktyg

Verktyg Vad det gör När boten använder det
Sök på din webbplats Skannar de webbadresser du har lagt till i agentens lista över dynamiska webbadresser för att hitta produktsidor, artiklar eller annat innehåll som besvarar kundens fråga. Endast tillgängligt när AI-webbsökning är aktiverat och du har lagt till minst en dynamisk webbadress. Om AI-webbsökning är avstängt kan boten inte läsa sidor eller länkar — inte ens de som kunden klistrar in i chatten. När kunden frågar om något som troligen finns på din webbplats — produkter, priser, platser, policyer.
Kontrollera en länk Läser innehållet på en specifik webbadress så att boten kan svara på frågor om den sidan. Endast tillgängligt när AI-webbsökning är aktiverat och du har lagt till minst en dynamisk webbadress. Om AI-webbsökning är avstängt kan boten inte läsa sidor eller länkar — inte ens de som kunden klistrar in i chatten. När kunden delar en länk eller frågar om en specifik sida på din webbplats.
Sök på webben Kör en offentlig Google-sökning och returnerar de bästa resultaten, så att boten kan svara på frågor utanför ditt eget innehåll. När kunden frågar om något generellt (t.ex. vägbeskrivningar, offentlig information) som inte finns i din kunskapsdatabas. Används endast om webbsökning är aktiverat.

Uppföljningsverktyg

Dessa verktyg kräver att uppföljningar är aktiverade på din agent.

Verktyg Vad det gör När boten använder det
Schemalägg en smart uppföljning Schemalägger ett intelligent uppföljningsmeddelande med hjälp av din uppföljningssekvens – väljer rätt mall och tidpunkt baserat på konversationen. När kunden blir tyst eller ber boten att “återkomma senare”.
Schemalägg en uppföljning Schemalägger en grundläggande uppföljning vid en specifik tidpunkt. När boten behöver driva konversationen framåt vid ett bestämt tillfälle.

Körning av anpassade funktioner

Verktyg Vad det gör När boten använder det
Kör en anpassad funktion Exekverar en av de anpassade funktioner du har skapat och tilldelat agenten (se resten av denna sida). När kundens förfrågan matchar syftet med en av dina anpassade funktioner.
Skicka en fil från ett verktygsresultat Skickar en bild, video, ljudfil eller ett dokument vars länk returnerades från en av dina anpassade funktioner eller MCP-servrar som en riktig bilaga, istället för att klistra in länken. Tillgängligt när agenten har minst en anpassad funktion eller MCP-server. När ett verktygsresultat innehåller en fil som kontakten bad att få se. Se Filer från dina egna verktyg.

Verktyg för restaurangbokning (Zenchef och Formitable)

Dessa verktyg är endast tillgängliga när en Zenchef- eller Formitable-integration är ansluten. De låter boten hantera restaurangbokningar från början till slut.

Verktyg Vad det gör När boten använder det
Kontrollera restaurangens tillgänglighet Söker efter lediga bokningstider för ett visst datum, antal personer och (valfritt) sittområde. När en gäst ber om att få boka ett bord.
Skapa en restaurangbokning Skapar en ny bokning. Efter att gästen har bekräftat en specifik tid.
Uppdatera en restaurangbokning Ändrar datum, tid, antal personer eller anteckningar för en befintlig bokning. När gästen ber om att få ändra sin bokning.
Avboka eller ändra bokningsstatus Avbokar en bokning eller uppdaterar dess status (t.ex. bekräftad, utebliven gäst). När gästen avbokar, eller när boten behöver markera en statusändring.
Sök efter bokningar Hittar befintliga bokningar som matchar kriterier som namn, e-post eller datum. När en återkommande gäst frågar om en befintlig bokning.
Uppdatera gästprofil Uppdaterar gästens profil i restaurangsystemet (preferenser, anteckningar, kontaktuppgifter). När gästen delar med sig av kostpreferenser, ett nytt telefonnummer eller annan information på profilnivå.
Lista restaurangprodukter Hämtar listan över menyer, fasta menyer eller tillval som är tillgängliga för bokning. När gästen frågar “vilka fasta menyer har ni?” eller boten behöver bifoga en meny till en bokning.

Aktivera och inaktivera verktyg

De flesta verktyg styrs på agentens flik AI-förmågor:

  • Bokningsverktyg aktiveras när du aktiverar bokningar och ansluter en kalender, i kortet Bokningar på samma flik AI-förmågor
  • Uppföljningsverktyg aktiveras när du aktiverar uppföljningar
  • Restaurangverktyg aktiveras när du ansluter ett Zenchef- eller Formitable-konto
  • Webbsökning har ett eget reglage på fliken FAQ & Kunskap
  • Uppgiftsverktyg kan stängas av per agent med reglaget Tillåt AI att skapa uppgifter (de är på som standard; den kontoomfattande uppgiftsbrytaren i Inställningar → Profil → Funktioner stänger av hela uppgiftssystemet överallt)
  • Kontaktuppdateringsverktyg styrs på samma flik AI-förmågor — huruvida AI:n får byta namn på kontakter eller spara extra insamlad information om dem
  • Alert-verktyg är alltid tillgängliga; taggning körs automatiskt efter varje botsvar (det är inte ett verktyg som boten väljer att anropa)

Om du vill att boten ska sluta använda ett specifikt inbyggt verktyg är det enklaste sättet att inaktivera den underliggande funktionen (till exempel, stäng av bokningar för att inaktivera alla bokningsverktyg).


Funktioner som hanteras av en automatisering

Vissa poster på din sida för anpassade funktioner kan ha en etikett för Hanteras av automatisering. Dessa har inte skapats här – de kommer från en automatisering med en AI-agentfunktion-utlösare, vilket ger din agent en förmåga vars steg du bygger visuellt på automatiseringsytan istället för att peka på en extern webbadress.

En hanterad funktion sköts åt dig: dess namn, beskrivning och fält följer alltid det som ställts in för automatiseringens utlösare, så den kan inte redigeras eller tas bort från den här sidan — använd länken Öppna automatisering och ändra själva automatiseringen. Du kan fortfarande välja vilka agenter som ska ha den på vanligt sätt: på en agents flik AI-förmågor visas den tillsammans med agentens andra förmågor med en vanlig på/av-växlare (om dess automatisering är pausad anges detta på raden — förmågan aktiveras när automatiseringen slås på). Allt annat kring den fungerar som vilken annan anpassad funktion som helst: AI:n avgör när den ska anropas, samlar in de detaljer du definierat och kan använda automatiseringens svar i samma konversation.

Om du väljer mellan de två: peka en vanlig anpassad funktion mot ett system som redan har en adress att anropa; bygg en automatisering med en AI Agent Function-utlösare när arbetet är något du hellre vill sätta ihop steg för steg – slå upp något i ett kalkylblad eller en databas, förgrena baserat på ett villkor, skapa poster – utan att köra en egen server. Se Automatiseringar.


Planeringskrav

Anpassade funktioner är tillgängliga i abonnemang som inkluderar funktionen för anpassade funktioner. Kontrollera ditt abonnemang för att bekräfta tillgänglighet.


Nästa steg

  • Anslut MCP-servrar till din bot – ett färdigt paket med verktyg istället för en funktion i taget.
  • AI-agenter – huvudsidan för AI Studio-gruppen där anpassade funktioner finns, och där anpassade funktioner tilldelas en bot.