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:
- Kunden frågar något som kräver realtidsdata (t.ex. “Var är min beställning?”)
- Boten känner igen att den behöver använda en anpassad funktion för att svara
- Boten samlar in eventuell saknad information från kunden (t.ex. “Vad är ditt ordernummer?”)
- Plattformen skickar en förfrågan till ditt system (din webbplats, CRM eller något annat verktyg) med relevanta detaljer
- Ditt system svarar med datan (t.ex. orderstatus, spårningsnummer, leveransdatum)
- 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 |
| Economy (föråldrad) | 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, eftersom Max körs på vår egen modell |
| Mini | 0,15 krediter | fortfarande 0,15 krediter, debiteras även med din egen nyckel ansluten, eftersom Mini körs på vår egen modell |
Konfigurera en anpassad funktion (steg för steg)
- I huvudsidofältet, under AI Studio, klicka på Custom Functions.
- 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 |
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 | Vad det innehåller |
|---|---|
system.contactId |
Plattform-ID för kontakten i konversationen |
system.campaignId |
Kampanj-ID som konversationen tillhör |
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 |
Kampanjkonfigurationen |
system.test |
true om detta är ett test i “Prova på”, false för live-konversationer |
Detta är användbart om ditt system behöver identifiera kontakten, kontrollera vilken kampanj som utlöste funktionen eller bete sig annorlunda under testning.
Behöver du inte systemdatan? Aktivera reglaget Hoppa över systemdata i funktionsbyggaren. Boten skickar då endast de indataparametrar du definierat — ingen kontakt- eller kampanjdata. 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:
- Öppna Agenten under AI Studio → AI-agenter.
- Gå till fliken AI-förmågor. (För en kampanj som fortfarande har sina egna AI-inställningar direkt istället för via en separat agent, visas samma lista i kampanjens eget steg AI-förmågor istället.)
- Du ser en lista över varje anpassad funktion du har skapat. Aktivera varje funktion som du vill att denna agents bot ska kunna anropa.
- 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:
- 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.
- 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.
- Testa i Prova på - Simulera en konversation där kunden frågar något som bör utlösa funktionen.
- Kontrollera svaret - Se till att boten korrekt läser och presenterar datan.
- 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 ordetBasicföljt av din base64-kodadeusername: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 – felaktiga inloggningsuppgifter, slutpunkt nere, timeout – visas detta nu i konversationen: en röd “(funktionsnamn) misslyckades”-markör visas i tråden, både i agentens flik Testa och i riktiga konversationer i Chattar. Klicka på markören 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 (en 401 med ett “unauthorized”-meddelande betyder fel i autentiseringshuvudet, en timeout betyder att din slutpunkt tog längre tid än 30 sekunder).
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.
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_abc123Content-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.)
- 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. - Ge appen behörigheten read_orders, publicera en version och installera appen i butiken.
- Öppna appens Settings och lägg till butikens egen webbadress (till exempel
https://www.yourstore.com/) till de tillåtna omdirigeringsadresserna (redirect URLs). Spara. - Fortfarande under Settings, kopiera Client ID och Client secret.
- 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=12345Godkänn skärmen som visas. Webbläsaren hamnar på din omdirigeringsadress och adressfältet innehåller nucode=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. - 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 namnenclient_id,client_secretochcode, klicka sedan på Test, fyll i de tre värdena och kör det. Svaret innehålleraccess_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ättYOUR-STOREmed 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
-
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.
-
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.
-
Håll svarstiderna under 10 sekunder. Om ditt system tar längre tid, överväg att returnera en snabb bekräftelse först.
-
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.
-
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.
-
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.
-
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.
-
Använd en offentlig slutgiltig URL. Din funktions-URL måste vara en offentlig 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.
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ätverksproblem avbryter AI:n mitt i ett svar kan plattformen säkert försöka köra konversationssteget igen istället för att lämna kunden utan svar. Aktivera endast detta 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 kör den två gånger.
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).
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 själv när den ska använda varje verktyg baserat på vad som händer i konversationen och hur din agent (och dess kopplade kampanj) är konfigurerad. De flesta av dessa verktyg aktiveras automatiskt när den relaterade funktionen aktiveras (till exempel blir bokningsverktygen tillgängliga först 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 |
| Economy (föråldrad) | 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, eftersom Max körs på vår egen modell |
| Mini | 0,15 krediter | fortfarande 0,15 krediter, debiteras även med din egen nyckel ansluten, eftersom Mini körs på vår egen modell |
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 för kampanjen som är kopplad till 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 kampanjens 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 toppresultaten, så att boten kan svara på frågor utanför ditt eget innehåll. | När kunden frågar om något allmänt (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 för den kampanj som är kopplad till 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 | Utför 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. |
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 (eller kampanjens steg AI-förmågor, om du arbetar från en fortfarande klassisk kampanj):
- Bokningsverktyg aktiveras när du aktiverar bokningar och ansluter en kalender – detta förblir en inställning per kampanj tills vidare, med en länk direkt till kampanjens steg från agentens egen flik för 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 en egen växel på fliken FAQ & Kunskap
- Uppgiftsverktyg kan stängas av per agent med växeln Tillåt AI att skapa uppgifter (de är på som standard; den kontoomfattande uppgiftsväxeln 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
- Aviseringsverktyg ä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.