Benutzerdefinierte Funktionen
Mit benutzerdefinierten Funktionen kann Ihr KI-Bot während Live-Gesprächen eine Verbindung zu anderen Systemen herstellen. Anstatt zu sagen: „Ich prüfe das und melde mich bei Ihnen“, kann der Bot einen Bestellstatus abrufen, den Lagerbestand prüfen oder einen Datensatz in Ihrem CRM (Customer Relationship Management-System – die Software, die Sie zur Nachverfolgung von Leads und Kunden verwenden, wie HubSpot oder Salesforce) erstellen – alles in Echtzeit, während der Kunde wartet.
Benutzerdefinierte Funktionen vs. Webhooks
Dies ist der häufigste Punkt für Verwirrung, daher lohnt es sich, dies zu klären, bevor Sie etwas entwickeln.
| Webhooks | Benutzerdefinierte Funktionen | |
|---|---|---|
| Richtung | Einseitig (Fire-and-Forget) | Zweiseitig (Aufruf und Warten) |
| Was der Bot tut | Sendet eine Benachrichtigung, wenn etwas passiert, und macht dann weiter. | Ruft auf, pausiert, wartet auf die Antwort und verwendet das Ergebnis, um die Unterhaltung fortzusetzen. |
| Sichtbarkeit für die Unterhaltung | Das nachgelagerte Ergebnis ist für den Bot unsichtbar – er erfährt nie, was passiert ist. | Die Antwort wird direkt in die KI zurückgespeist, sodass der Bot sie zitieren, analysieren und dem Kunden damit antworten kann. |
| Am besten geeignet für | Protokollierung von Ereignissen, Synchronisierung von Daten mit einem CRM, Auslösen externer Automatisierungen (Zapier, Make, n8n). | Alles, wofür der Bot eine Antwort benötigt, bevor er antworten kann – Live-Abfragen, Echtzeit-Preise, spontane Inhaltserstellung. |
Wann Sie was wählen sollten: Wenn Sie einem anderen System lediglich mitteilen müssen, dass etwas passiert ist, verwenden Sie einen Webhook – eine automatisierte Einwegnachricht, die an ein anderes System gesendet wird (siehe Einstellungen → Integrationen → Webhooks). Wenn der Bot etwas von einem anderen System lernen muss, bevor er das Gespräch fortsetzen kann, verwenden Sie eine benutzerdefinierte Funktion.
Beispiele dafür, was benutzerdefinierte Funktionen ermöglichen
Da die Antwort in die Unterhaltung zurückfließt, eröffnen benutzerdefinierte Funktionen Möglichkeiten, die Webhooks einfach nicht bieten können:
- Live-Lagerbestandsabfrage für Shopify oder WooCommerce – Bevor der Bot dem Kunden ein Angebot macht, prüft er den Bestand in Echtzeit und antwortet: „Ja, wir haben 12 Stück in Größe M“, anstatt „Ich prüfe das und melde mich bei Ihnen“.
- Dynamische Preisgestaltung aus einem Google Sheet – Ihr Vertriebsteam aktualisiert die Preise in einer Tabelle; der Bot liest die aktuelle Zeile mitten im Gespräch und nennt den aktuellen Preis, ohne dass jemand die KI-Konfiguration anfassen muss.
- Voice-KI-Rückruf-Agent – Wenn der Bot einen Lead qualifiziert, löst er einen Voice-Agenten aus (z. B. einen auf ElevenLabs basierenden Anrufer), der den Lead innerhalb von Minuten zurückruft, und bestätigt dem Kunden: „Großartig, erwarten Sie in den nächsten 5 Minuten einen Anruf“.
- Individuelles Angebots-PDF, generiert und versendet während des Chats – Der Bot sammelt die Anforderungen, ruft Ihren Angebots-Generator auf, erhält eine PDF-URL und sagt dem Kunden: „Ich habe Ihnen gerade Ihr Angebot per E-Mail gesendet – prüfen Sie Ihren Posteingang“.
Was können benutzerdefinierte Funktionen tun?
Betrachten Sie benutzerdefinierte Funktionen als Superkräfte für Ihren Bot, die über das bloße Chatten hinausgehen. Hier sind Beispiele aus der Praxis:
- Bestellverfolgung – Ein Kunde fragt: „Wo ist meine Bestellung?“, der Bot prüft Ihr E-Commerce-System und antwortet mit dem Versandstatus und dem Tracking-Link.
- Lagerbestandsprüfung – „Haben Sie das in Größe 10?“ Der Bot prüft Ihr Lagersystem und gibt eine Antwort in Echtzeit.
- CRM-Updates – Wenn der Bot einen Lead qualifiziert, erstellt oder aktualisiert er automatisch einen Datensatz in HubSpot, Salesforce oder einem anderen CRM.
- Angebotserstellung – Der Bot sammelt die Anforderungen des Kunden und generiert ein personalisiertes Angebot aus Ihrem Preissystem.
- Buchung – Der Bot erstellt einen Termin in Ihrem externen Buchungssystem.
- Rabattüberprüfung – „Ist dieser Gutscheincode gültig?“ Der Bot prüft dies und gibt eine Bestätigung.
- Kontoabfrage – Ein wiederkehrender Kunde wird automatisch erkannt und seine Kontodaten werden abgerufen.
Der Kunde sieht nie, was hinter den Kulissen passiert. Er erlebt einfach einen Bot, der seine Fragen mit echten, aktuellen Informationen beantworten kann.
Wie benutzerdefinierte Funktionen funktionieren (die einfache Version)
Hier ist, was passiert, wenn eine benutzerdefinierte Funktion während einer Unterhaltung ausgelöst wird:
- Der Kunde fragt etwas, das Echtzeitdaten erfordert (z. B. „Wo ist meine Bestellung?“)
- Der Bot erkennt, dass er eine benutzerdefinierte Funktion verwenden muss, um zu antworten
- Der Bot sammelt alle fehlenden Informationen vom Kunden (z. B. „Wie lautet Ihre Bestellnummer?“)
- Die Plattform sendet eine Anfrage an Ihr System (Ihre Website, Ihr CRM oder ein anderes Tool) mit den relevanten Details
- Ihr System antwortet mit den Daten (z. B. Bestellstatus, Sendungsverfolgungsnummer, Lieferdatum)
- Der Bot liest die Antwort und formuliert eine natürliche Antwort: „Ihre Bestellung ORD-4582 wurde versandt und sollte bis Freitag eintreffen!“
Was ein benutzerdefinierter Funktionsaufruf kostet
Jeder benutzerdefinierte Funktionsaufruf wird gemäß der KI-Qualitätsstufe Ihres Agenten abgerechnet:
| KI-Qualitätsstufe | Credits pro benutzerdefiniertem Funktionsaufruf | Mit verbundenem eigenen Anthropic-Schlüssel (BYOK) |
|---|---|---|
| Pro | 1 Credit | 0 Credits – läuft über Ihren Schlüssel |
| Economy (veraltet) | 0,5 Credits | 0 Credits – läuft über Ihren Schlüssel |
| Max | 0,25 Credits | weiterhin 0,25 Credits, wird auch bei verbundenem eigenen Schlüssel berechnet |
| Mini | 0,15 Credits | weiterhin 0,15 Credits, wird auch bei verbundenem eigenen Schlüssel berechnet |
Einrichten einer benutzerdefinierten Funktion (Schritt für Schritt)
- Klicken Sie in der Hauptseitenleiste unter AI Studio auf Custom Functions.
- Klicken Sie oben rechts auf die grüne Schaltfläche + Add Function (oder New function).
Die Liste der benutzerdefinierten Funktionen zeigt eine Tabelle mit den folgenden Spalten:
| Spalte | Was sie anzeigt |
|---|---|
| Name | Der Name der Funktion (z. B. check_order_status) |
| Beschreibung | Eine kurze Zusammenfassung der Funktion (in der Tabelle auf 50 Zeichen gekürzt) |
| Methode | Die verwendete HTTP-Methode, dargestellt als farbiger Badge: GET (blau), POST (grün), PUT (orange), DELETE (rot) |
| Erstellt | Das Datum, an dem die Funktion erstellt wurde |
Dies erleichtert es, Ihre Funktionen auf einen Blick zu erfassen und die benötigte zu finden.
Schritt 1: Vergeben Sie einen Namen und eine Beschreibung
| Feld | Was einzugeben ist | Beispiel |
|---|---|---|
| Name | Ein kurzer Name mit Buchstaben, Zahlen und Unterstrichen | check_order_status |
| Beschreibung | Erklären Sie, was diese Funktion tut (die KI liest dies, um zu entscheiden, wann sie verwendet werden soll) | „Sucht den aktuellen Status einer Kundenbestellung anhand der Bestellnummer“ |
| Zweck (KI-Aktion) | Sagen Sie der KI genau, wann und wie sie diese Funktion verwenden soll | „Verwenden Sie dies, wenn ein Kunde nach seinem Bestellstatus, Versand oder der Lieferung fragt. Fragen Sie zuerst nach der Bestellnummer.“ |
Tipp: Seien Sie in der Beschreibung und dem Zweck sehr präzise. Je klarer Sie definieren, wann die Funktion verwendet werden soll, desto zuverlässiger wird der Bot sie zum richtigen Zeitpunkt einsetzen.
Schritt 2: Einrichten der Verbindung
Sie müssen der App mitteilen, wohin die Anfrage gesendet werden soll:
| Feld | Was einzugeben ist | Beispiel |
|---|---|---|
| URL | Die Webadresse des Endpunkts Ihres Systems (die spezifische Adresse in Ihrem System, die die Anfrage empfängt und Daten zurücksendet) | https://api.yourstore.com/v1/orders/status |
| Methode | Die Art der zu sendenden Anfrage | Siehe Optionen unten |
Welche Methode soll gewählt werden:
| Methode | Wann zu verwenden |
|---|---|
| GET | Informationen abrufen (Bestellstatus, Inventar, Kontodetails) |
| POST | Neue Datensätze erstellen (Support-Tickets, Leads, Buchungen) oder komplexe Abfragen |
| PUT | Einen bestehenden Datensatz vollständig aktualisieren |
| PATCH | Einen Teil eines bestehenden Datensatzes aktualisieren |
| DELETE | Einen Datensatz entfernen |
Wenn Sie sich nicht sicher sind, welche Methode Sie verwenden sollen, fragen Sie Ihren Entwickler oder prüfen Sie die Dokumentation des Systems, mit dem Sie eine Verbindung herstellen. GET (für Abfragen) und POST (zum Erstellen von Datensätzen) sind am gebräuchlichsten.
Schritt 3: Authentifizierungs-Header hinzufügen
Die meisten Systeme erfordern eine Authentifizierung, um Anfragen zu akzeptieren. Fügen Sie alle erforderlichen Header hinzu:
| Header | Beispielwert |
|---|---|
Authorization |
Bearer your-api-key-here |
Content-Type |
application/json |
Werte von Headern, die einen Schlüssel oder ein Passwort enthalten, wie z. B. Authorization oder X-API-Key, werden nach der Eingabe als Punkte angezeigt. Klicken Sie auf das Auge neben dem Wert, um ihn anzuzeigen.
Sicherheitshinweis: Verwenden Sie einen dedizierten API-Schlüssel mit eingeschränkten Berechtigungen. Verwenden Sie keine Anmeldedaten auf Administratorebene.
Wo Sie API-Schlüssel finden: Überprüfen Sie die Einstellungen oder den Entwicklerbereich des Systems, mit dem Sie eine Verbindung herstellen (z. B. Ihr CRM, Ihre E-Commerce-Plattform oder Ihr Buchungstool).
Schritt 4: Eingabe definieren (Was der Bot sendet)
Eingabeparameter sind die Informationen, die der Bot aus dem Gespräch sammelt und an Ihr System sendet.
Für jeden Parameter geben Sie Folgendes an:
| Eigenschaft | Bedeutung |
|---|---|
| Name | Der Parametername (muss mit dem übereinstimmen, was Ihr System erwartet) |
| Typ | Die Art der Daten (Text, Zahl, wahr/falsch usw.) |
| Beschreibung | Sagen Sie der KI, was diese Information ist und wo sie im Gespräch zu finden ist |
| Erforderlich | Wenn auf „Ja“ gesetzt, fragt der Bot den Kunden nach dieser Information, bevor er fortfährt |
Verfügbare Parametertypen:
| Typ | Bedeutung |
|---|---|
| string | Text (Namen, Bestellnummern, Adressen) |
| number | Ein numerischer Wert (Menge, Preis) |
| boolean | Wahr oder falsch (Ja/Nein-Werte) |
| array | Eine Liste von Elementen. Wird als echte JSON-Liste gesendet – unter Run Test können Sie sie als [8624], ["a", "b"] oder einfach durch Kommas getrennt (8624, 8625) eingeben, und sie wird für Sie konvertiert. Wenn Ihre API strikt ist, was die Liste enthält – z. B. nur Zahlen –, legen Sie den optionalen Elementtyp neben dem Typ fest, und jeder Wert in der Liste wird in diesen konvertiert. |
| query_param | Text, der als URL-Parameter anstelle des Request-Bodys gesendet wird. Verwenden Sie dies, wenn Ihre API Daten in der URL erwartet (z. B. ?order_id=123). |
Jeder Parameter verfügt außerdem über ein optionales Feld Request body path. Normalerweise wird ein Parameter als Feld auf oberster Ebene im Request-Body (oder als Query-String-Wert für den Typ query_param) gesendet. Wenn Ihr Endpunkt stattdessen eine Verschachtelung erwartet – z. B. {"order": {"id": "ORD-123"}} –, setzen Sie den Pfad auf order.id, und die Plattform verschachtelt den Wert dort für Sie.
Beispiel: Für eine Abfrage des Bestellstatus könnten Sie Folgendes definieren:
- order_number (string, erforderlich): „Die Bestellnummer des Kunden. Beginnt normalerweise mit ORD- gefolgt von Ziffern. Fragen Sie den Kunden danach, falls er sie noch nicht genannt hat.“
- email (string, optional): „Die E-Mail-Adresse des Kunden zur zusätzlichen Verifizierung. Nur erforderlich, wenn die Bestellnummer allein keinen Treffer ergibt.“
Was Ihr System automatisch empfängt
Zusätzlich zu den von Ihnen definierten Eingabeparametern fügt die Plattform bei jeder Anfrage automatisch Systemdaten hinzu. Ihr Endpunkt empfängt diese in einem system-Feld:
| Systemfeld | Inhalt |
|---|---|
system.contactId |
Die Plattform-ID des Kontakts im Gespräch |
system.campaignId |
Identifiziert den KI-Agenten, der das Gespräch führt, in der Form agent:<agentId> (das Feld behält seinen alten Namen) |
system.userId |
Ihre Benutzer-ID |
system.channel |
Der Messaging-Kanal (z. B. "whatsapp", "instagram") |
system.contact |
Der vollständige Kontaktdatensatz (Name, Telefon, E-Mail, Tags usw.) |
system.campaign |
Die Einstellungen des KI-Agenten, der das Gespräch führt (das Feld behält seinen alten Namen) |
system.test |
true, wenn es sich um einen Testlauf handelt, false für Live-Gespräche |
system.callback_url |
Nur wenn Ergebnis kommt später aktiviert ist: der Link, an den das Ergebnis gesendet werden soll (siehe Langlaufende Jobs) |
system.callback_expires_at |
Nur wenn Ergebnis kommt später aktiviert ist: wann dieser Link abläuft |
Dies ist nützlich, wenn Ihr System den Kontakt identifizieren, prüfen muss, welcher Agent die Funktion aufgerufen hat, oder sich während des Testens anders verhalten soll.
Wenn eine Folgeprüfung Ihre Funktion aufruft (siehe Nur senden, wenn eine Prüfung erfolgreich ist), unterscheidet sich die Anfrage von einem Aufruf innerhalb einer Konversation: Sie hat keine Eingabeparameter und das Feld
systementhält nursystem.contact(mit seinemid) sowie einensystem.follow_up-Block (type,cycle_number,follow_up_number,reason,campaign_id,agent_id). Es ist keincampaign-Objekt darin enthalten. Systemdaten überspringen gilt auch für diesen Aufruf.
Benötigen Sie die Systemdaten nicht? Aktivieren Sie den Schalter Systemdaten überspringen im Funktions-Builder. Der Bot sendet dann nur die von Ihnen definierten Eingabeparameter — keine Kontakt- oder Agentendaten. Verwenden Sie dies, wenn Ihr Endpunkt unerwartete Felder ablehnt oder Sie einfach eine schlankere Nutzlast wünschen.
Schritt 5: Testen Sie die Funktion und lassen Sie den Bot die Antwort lesen
Normalerweise müssen Sie Antwortfelder überhaupt nicht zuordnen. Sobald Ihr Endpunkt antwortet, liest der Bot die gesamte JSON-Antwort und verwendet die Beschreibung und den Zweck (KI-Aktion) Ihrer Funktion – sowie die Beschreibung jedes Parameters –, um zu ermitteln, was wichtig ist, und dies natürlich darzustellen. Eine klare Beschreibung der Funktion selbst („Ruft den aktuellen Status einer Kundenbestellung einschließlich Versandinformationen und Sendungsverfolgung ab“) leistet hier mehr Arbeit als eine Feld-für-Feld-Zuordnung.
Wenn Ihr Endpunkt eine große Antwort zurückgibt und der Bot nur einige wenige spezifische Werte sehen soll, öffnen Sie den Bereich Response mapping (standardmäßig eingeklappt, direkt über „Test“). Jede Zeile wählt ein Feld auf oberster Ebene aus der Antwort aus: Response field ist der Feldname in der JSON-Antwort Ihrer API, und Output field ist der Name, unter dem der Bot ihn empfängt. Wenn mindestens eine Zeile ausgefüllt ist, erhält der Bot nur Ihre zugeordneten Werte anstelle des vollständigen Antwort-Bodys. Lassen Sie den Bereich leer, um das Standardverhalten mit vollständiger Antwort beizubehalten.
Bevor Sie speichern, verwenden Sie den Bereich Test unten im Builder, um die Anfrage genau wie konfiguriert auszuführen und die tatsächliche Antwort zu sehen, ohne die App zu verlassen:
Die Antwort, die Sie hier sehen, ist die unverarbeitete Antwort des Endpunkts. Wenn Sie oben ein Antwort-Mapping eingerichtet haben, erhält der Bot in einem echten Chat nur diese zugeordneten Felder – der Test zeigt jedoch immer die vollständige, unverarbeitete Antwort an, damit Sie sehen können, was für das Mapping verfügbar ist. Wenn etwas nicht korrekt aussieht (unerwartete Feldnamen, zusätzliche Verschachtelung), korrigieren Sie dies an Ihrem Endpunkt oder passen Sie Ihr Mapping an.
Zuweisen von Funktionen zu einem Agenten
Nachdem Sie eine benutzerdefinierte Funktion erstellt haben, müssen Sie jedem Agenten mitteilen, welche Funktionen er verwenden darf:
- Öffnen Sie den Agenten unter KI-Studio → KI-Agenten.
- Gehen Sie zum Tab KI-Fähigkeiten.
- Sie sehen eine Liste aller benutzerdefinierten Funktionen, die Sie erstellt haben. Aktivieren Sie jede Funktion, die der Bot dieses Agenten aufrufen können soll.
- Klicken Sie unten auf Änderungen speichern. Die Auswahl wird erst nach dem Speichern wirksam.
Nur zugewiesene Funktionen stehen dem Bot für diesen Agenten zur Verfügung. Dies verhindert, dass der Bot versehentlich Funktionen verwendet, die nicht relevant sind.
Testen Ihrer benutzerdefinierten Funktionen
Bevor Sie live gehen, testen Sie gründlich:
- Führen Sie den integrierten Test aus - Verwenden Sie den Bereich Test innerhalb des Funktions-Builders (siehe oben) für eine schnelle Überprüfung, ohne die App zu verlassen – geben Sie realistische Werte ein und klicken Sie auf Test ausführen.
- Testen Sie den Endpunkt Ihres Systems direkt - Für die vollständige Checkliste unten geht ein dediziertes Tool wie Postman (oder Ihr Entwickler) tiefer als ein einzelner Testlauf.
- Testen Sie im Bereich „Ausprobieren“ - Simulieren Sie ein Gespräch, in dem der Kunde etwas fragt, das die Funktion auslösen sollte.
- Überprüfen Sie die Antwort - Stellen Sie sicher, dass der Bot die Daten korrekt liest und präsentiert.
- Testen Sie Fehlerszenarien - Was passiert, wenn der Kunde eine ungültige Bestellnummer angibt? Was ist, wenn Ihr System vorübergehend nicht verfügbar ist?
Wenn der Test 401 oder 403 zurückgibt
Ein 401 oder 403 bedeutet, dass Ihr Endpunkt die Anfrage erhalten und abgelehnt hat. Der Hinweis darauf ist, dass nichts in Ihren eigenen Protokollen erscheint — die meisten Tools lehnen einen nicht autorisierten Aufruf ab, bevor sie den Workflow überhaupt starten. Daher gibt es auf Ihrer Seite nichts zu sehen und es sieht so aus, als wäre die Anfrage nie angekommen.
Fast immer handelt es sich um eine Diskrepanz bei der Authentifizierung: Ihr Endpunkt erwartet eine bestimmte Art von Anmeldeinformationen und die Funktion sendet eine andere. Überprüfen Sie, ob der Header, den Sie in Schritt 3 hinzugefügt haben, genau der ist, den Ihr System erwartet.
Die häufigste Variante hierfür ist ein Webhook, der mit Basic Auth geschützt ist (n8n, Make und die meisten selbst gehosteten Tools bieten dies als Kontrollkästchen direkt am Webhook an), während die Funktion einen benutzerdefinierten geheimen Header wie X-My-Secret sendet. Basic Auth akzeptiert nur einen Authorization-Header, daher wird ein benutzerdefinierter Header ignoriert und der Aufruf abgelehnt. Sie haben zwei Möglichkeiten:
- Deaktivieren Sie Basic Auth am Webhook und überprüfen Sie stattdessen Ihren benutzerdefinierten Header innerhalb des Workflows.
- Behalten Sie Basic Auth bei und fügen Sie der Funktion einen
Authorization-Header hinzu, dessen Wert das WortBasicgefolgt von Ihrem base64-kodiertenusername:passwordist.
Beide Varianten funktionieren – stellen Sie nur sicher, dass beide Seiten übereinstimmen.
Wenn der Test 404 zurückgibt
Die Endpunkt-URL ist falsch oder der Workflow ist nicht veröffentlicht. Speziell in n8n hat jeder Webhook eine separate Test-URL und Produktions-URL, und die Test-URL empfängt nur Daten, während der Editor geöffnet ist. Kopieren Sie die Produktions-URL und stellen Sie sicher, dass der Workflow aktiv ist.
Fehler in „Ausprobieren“ und „Chats“ anzeigen
Wenn die KI während eines Gesprächs eine benutzerdefinierte Funktion aufruft und der Aufruf fehlschlägt, beispielsweise aufgrund falscher Anmeldedaten, eines ausgefallenen Endpunkts oder einer Zeitüberschreitung, wird dies nun im Gespräch angezeigt: Eine rote Markierung “(Funktionsname) fehlgeschlagen” erscheint im Thread, sowohl im Testlauf-Tab des Agenten als auch in echten Gesprächen unter Chats. Klicken Sie auf die Markierung, um die Details zu erweitern: den Statuscode, den Ihr Endpunkt zurückgegeben hat, und dessen Antworttext. Dies reicht normalerweise aus, um genau zu erkennen, was behoben werden muss (ein 401 mit einer “unauthorized”-Meldung bedeutet, dass der Authentifizierungs-Header falsch ist; eine Zeitüberschreitung bedeutet, dass Ihr Endpunkt länger als 30 Sekunden benötigt hat; für einen Job, der länger dauert, siehe Langlaufende Jobs).
Erfolgreiche Aufrufe zeigen ebenfalls eine Markierung an – klicken Sie darauf, um zu sehen, was Ihr Endpunkt tatsächlich zurückgesendet hat. Dies ist der schnellste Weg, um eine Integration durchgängig zu debuggen: Führen Sie das Testgespräch unter „Ausprobieren“ durch und klicken Sie dann auf die Funktionsmarkierung, um das tatsächliche Ergebnis der Anfrage zu sehen, ohne die Seite verlassen zu müssen.
Wenn ein Tool in echten Unterhaltungen wiederholt fehlschlägt
Wenn dieselbe benutzerdefinierte Funktion innerhalb von 24 Stunden dreimal fehlschlägt, während Ihr KI-Agent chattet, erhalten Sie einmal täglich eine Benachrichtigung darüber: per E-Mail, unter dem Glockensymbol und als Push-Benachrichtigung, falls Sie diese aktiviert haben. Die Benachrichtigung nennt das Tool, zeigt den letzten Fehler an und verlinkt auf die betroffenen Chats, da der Agent diesen Kontakten mitgeteilt hat, dass ein technisches Problem aufgetreten ist. Die Zeile der Funktion unter Einstellungen zeigt einen Fehlgeschlagen-Status mit der Fehleranzahl und dem letzten Fehler an, bis das Tool wieder funktioniert; ein erfolgreicher Aufruf setzt diesen Status zurück. Sie können diese Benachrichtigungen unter Einstellungen → Benachrichtigungen → Tool-Fehler deaktivieren.
Vollständiges Beispiel: Abfrage des Bestellstatus
Hier ist ein vollständig konfiguriertes Beispiel, das Sie als Vorlage verwenden können:
Grundlegende Informationen:
- Name:
check_order_status - Beschreibung: “Ruft den aktuellen Status einer Kundenbestellung ab, einschließlich Versandinformationen und Sendungsverfolgung”
- KI-Aktion: “Rufen Sie diese Funktion auf, wenn ein Kunde nach seinem Bestellstatus fragt, wo sich sein Paket befindet oder wann es ankommen wird. Fragen Sie immer zuerst nach der Bestellnummer.”
Verbindung:
- URL:
https://api.mystore.com/orders/lookup - Methode: POST
Header:
Authorization:Bearer sk_live_abc123Content-Type:application/json
Eingabeparameter:
order_number(Text, erforderlich): “Die vom Kunden angegebene Bestellnummer”customer_email(Text, optional): “E-Mail-Adresse des Kunden zur zusätzlichen Verifizierung”
Keine Antwortzuordnung erforderlich – mit einer klaren Beschreibung und einer oben festgelegten KI-Aktion liest der Bot jedes JSON, das Ihr Endpunkt zurückgibt (Status, Tracking-Nummer, Lieferdatum, Artikel), und findet selbst heraus, wie er darüber sprechen soll.
So sieht das Gespräch aus:
Kunde: Hey, wo ist meine Bestellung?
Bot: Hallo! Ich helfe Ihnen gerne dabei, Ihre Bestellung zu überprüfen. Könnten Sie mir bitte Ihre Bestellnummer nennen?
Kunde: Sie lautet ORD-78234
Bot: Ich schaue kurz für Sie nach…
Ihre Bestellung ORD-78234 wurde versandt und ist auf dem Weg! Das voraussichtliche Lieferdatum ist der 10. März. Sie können Ihr Paket hier verfolgen: https://tracking.example.com/1Z999AA1
Kann ich Ihnen sonst noch bei etwas behilflich sein?
Vollständiges Beispiel: Shopify-Bestellstatus
Wenn der Shop auf Shopify läuft, benötigen Sie keinen Entwickler, um einen Lookup-Endpunkt zu erstellen – das eigene System von Shopify kann Bestellfragen direkt beantworten. (Für Produkt- und Lagerbestandsfragen in einem Shopify-Shop benötigen Sie überhaupt keine benutzerdefinierte Funktion: Verbinden Sie stattdessen den integrierten Server des Shops – siehe Verbinden eines Shopify-Shops.)
Erstellen Sie zuerst ein Zugriffstoken in Shopify. Shopify hat dies im Jahr 2026 geändert: Apps können nicht mehr innerhalb des Shopify-Adminbereichs erstellt werden, und der neue App-Bildschirm liefert Ihnen eine Client-ID und ein Client-Secret anstelle eines fertigen Tokens. Die folgenden Schritte wandeln diese in ein dauerhaftes Token um. Planen Sie etwa zehn Minuten ein, einmal pro Shop. (Wenn der Shop bereits eine ältere App hat, die auf die alte Weise erstellt wurde, funktioniert deren vorhandenes Token weiterhin – überspringen Sie diesen Teil und gehen Sie direkt zur benutzerdefinierten Funktion unten.)
- Gehen Sie zum Shopify Dev Dashboard unter dev.shopify.com, öffnen Sie Ihre Organisation und klicken Sie auf Apps → App erstellen. Geben Sie ihr einen Namen wie
Order lookup. - Geben Sie der App die Berechtigung read_orders, veröffentlichen Sie eine Version und installieren Sie die App im Shop.
- Öffnen Sie die Einstellungen der App und fügen Sie die Webadresse des Shops (zum Beispiel
https://www.yourstore.com/) zu den erlaubten Weiterleitungs-URLs hinzu. Speichern. - Kopieren Sie weiterhin in den Einstellungen die Client-ID und das Client-Geheimnis.
- Öffnen Sie in einem Browser, in dem Sie im Shopify-Adminbereich dieses Shops angemeldet sind, die unten stehende Adresse und ersetzen Sie den Shop-Namen, die Client-ID und die Weiterleitungsadresse durch Ihre eigenen:
https://YOUR-STORE.myshopify.com/admin/oauth/authorize?client_id=YOUR-CLIENT-ID&scope=read_orders&redirect_uri=https://www.yourstore.com/&state=12345Bestätigen Sie den erscheinenden Bildschirm. Der Browser landet auf Ihrer Weiterleitungsadresse und die Adressleiste enthält nuncode=gefolgt von einem langen Wert — kopieren Sie diesen Wert. Er ist nur für wenige Minuten gültig, gehen Sie also direkt zum nächsten Schritt. - Tauschen Sie diesen Code gegen das Token aus, was Sie innerhalb von Your AI Connector tun können. Setzen Sie im Builder für benutzerdefinierte Funktionen die Methode auf POST und die URL auf
https://YOUR-STORE.myshopify.com/admin/oauth/access_token, fügen Sie drei Texteingabeparameter namensclient_id,client_secretundcodehinzu, klicken Sie dann auf Test, geben Sie die drei Werte ein und führen Sie ihn aus. Die Antwort enthältaccess_token— das ist Ihr permanentes Token. Kopieren Sie es an einen sicheren Ort, leeren Sie dann den Builder und richten Sie die eigentliche Funktion unten ein.
Richten Sie dann die benutzerdefinierte Funktion ein:
Grundlegende Informationen:
- Name:
check_shopify_order - Beschreibung: “Sucht eine Bestellung im Shopify-System des Shops und gibt deren Status, Sendungsverfolgung und Artikel zurück”
- KI-Aktion: “Rufen Sie dies auf, wenn ein Kunde nach seinem Bestellstatus oder der Lieferung fragt. Fragen Sie immer zuerst nach der Bestellnummer.”
Verbindung:
- URL:
https://YOUR-STORE.myshopify.com/admin/api/2026-01/orders.json?status=any– ersetzen SieYOUR-STOREdurch den.myshopify.com-Namen des Shops (diese Adresse verwendet die technische Shopify-Domain, nicht die benutzerdefinierte Domain des Shops) - Methode: GET
Header:
X-Shopify-Access-Token:shpat_...(das Token von oben)
Eingabeparameter:
name(query_param, erforderlich): “Die Bestellnummer des Kunden genau so, wie sie in der Bestellbestätigung erscheint, einschließlich des #-Zeichens – zum Beispiel #1001. Fragen Sie den Kunden danach, falls er sie noch nicht genannt hat.”
Keine Antwortzuordnung erforderlich – der Bot liest die zurückgegebene Bestellung (Zahlungsstatus, Erfüllungsstatus, Sendungsverfolgung, Artikel) und antwortet natürlich.
Gut zu wissen: Ein auf diese Weise erstelltes Token kann Bestellungen der letzten 60 Tage einsehen – ausreichend für tägliche Support-Fragen, aber nicht für eine vollständige Bestellhistorie.
Vollständiges Beispiel: Termin buchen
Grundlegende Informationen:
- Name:
create_booking - Beschreibung: “Erstellt einen neuen Termin in unserem Buchungssystem”
- KI-Aktion: “Verwenden Sie dies, nachdem Datum, Uhrzeit und Kontaktdaten mit dem Kunden bestätigt wurden. Führen Sie den Aufruf erst aus, wenn der Kunde die Buchung ausdrücklich bestätigt hat.”
Verbindung:
- URL:
https://booking.mycompany.com/api/appointments - Methode: POST
Eingabeparameter:
date(Text, erforderlich): “Termindatum im Format YYYY-MM-DD”time(Text, erforderlich): “Terminuhrzeit im Format HH:MM”name(Text, erforderlich): “Vollständiger Name des Kunden”phone(Text, erforderlich): “Telefonnummer des Kunden”service_type(Text, erforderlich): “Art der zu buchenden Dienstleistung”
Vollständiges Beispiel: Newsletter-Abonnenten zum CRM hinzufügen
Ein sehr häufiges Muster: Der Bot beendet die Antwort, bietet Ihren Newsletter an, der Kontakt antwortet mit seiner E-Mail-Adresse und diese Adresse soll direkt in Ihrem E-Mail-Tool landen. Die meisten CRMs (FluentCRM, ActiveCampaign, MailerLite, Brevo und andere) akzeptieren für genau diesen Zweck einen einfachen POST-Request, sodass keine Automatisierungsplattform dazwischen erforderlich ist.
Dieses Beispiel verwendet FluentCRM auf WordPress. Der Aufbau ist derselbe für jedes andere Tool, das Ihnen einen „eingehenden Webhook“ oder einen Endpunkt zum „Erstellen eines Abonnenten“ bietet.
Holen Sie sich zuerst die URL aus Ihrem CRM. Öffnen Sie in WordPress FluentCRM → Einstellungen → Eingehende Webhooks und erstellen Sie einen Webhook. Wählen Sie die Liste, die Tags und den Abonnementstatus aus, die neue Kontakte erhalten sollen, und kopieren Sie dann die generierte Webhook-URL. Alles, was Sie hier festlegen, wird automatisch angewendet, sodass der Bot nur die E-Mail-Adresse senden muss.
Richten Sie dann die benutzerdefinierte Funktion ein:
Grundlegende Informationen:
- Name:
add_newsletter_subscriber - Beschreibung: „Fügt jemanden unserer Newsletter-Liste unter Verwendung der im Chat angegebenen E-Mail-Adresse hinzu“
- KI-Aktion: „Verwenden Sie dies in dem Moment, in dem der Kontakt dem Newsletter-Abonnement zustimmt und seine E-Mail-Adresse angibt. Rufen Sie es nicht auf, bevor die Adresse tatsächlich angegeben wurde, und rufen Sie es nicht zweimal für dieselbe Person auf.“
Verbindung:
- URL: die Webhook-URL, die Sie aus Ihrem CRM kopiert haben
- Methode: POST
Eingabeparameter:
email(Zeichenfolge, erforderlich): „Die E-Mail-Adresse, die der Kontakt im Gespräch angegeben hat“first_name(Zeichenfolge, optional): „Der Vorname des Kontakts, falls dieser genannt wurde“
Systemdaten überspringen: Schalten Sie dies ein. Ihr CRM benötigt nur die oben genannten Felder, und eine schlankere Payload vermeidet Fehler bei Tools, die unerwartete Felder ablehnen.
Antwort-Mapping: hier nicht erforderlich. Es muss nichts zurückkommen, damit der Bot fortfahren kann.
Vergessen Sie nicht, die Funktion für den Agenten zu aktivieren, der die Konversation führt (siehe Funktionen einem Agenten zuweisen). Dies ist der häufigste Grund, warum eine korrekt erstellte Funktion nie ausgelöst wird.
Tipp: Der Bot verfügt auch über ein integriertes Tool zum Aktualisieren der Kontakt-E-Mail, das die Adresse im Kontaktdatensatz innerhalb der Plattform speichert. Dies ist unabhängig von dieser Funktion und nützlich in Kombination damit – das integrierte Tool hält Ihren eigenen Kontaktdatensatz vollständig, die benutzerdefinierte Funktion überträgt die Adresse an Ihr CRM.
Tipps für zuverlässige benutzerdefinierte Funktionen
-
Stellen Sie sicher, dass wiederholte Anfragen sicher sind. Wenn dieselbe Anfrage versehentlich zweimal gesendet wird, sollten keine doppelten Datensätze erstellt werden. Netzwerkprobleme können dies gelegentlich verursachen.
-
Geben Sie klare Fehlermeldungen zurück. Wenn auf der Seite Ihres Systems etwas schiefgeht, geben Sie eine für Menschen lesbare Fehlermeldung zurück. Der Bot wird diese elegant an den Kunden weiterleiten.
-
Halten Sie Antwortzeiten unter 10 Sekunden. Wenn Ihr System länger benötigt, ziehen Sie in Betracht, zuerst eine kurze Bestätigung zurückzugeben.
-
Gehen Sie mit abgelaufenen oder ungültigen Anmeldedaten um. Wenn Ihr API-Schlüssel abläuft, stellen Sie sicher, dass die Fehlermeldung klar ist, damit der Bot weiß, dass er einen Menschen benachrichtigen muss, anstatt es erneut zu versuchen.
-
Schreiben Sie detaillierte Beschreibungen. Die KI verwendet Ihre Beschreibungen, um herauszufinden, wann die Funktion aufgerufen werden soll und wie die richtigen Informationen aus dem Gespräch extrahiert werden können. Vage Beschreibungen führen zu Fehlern.
-
Testen Sie mit echten Gesprächen. Der „Ausprobieren“-Modus ist großartig für erste Tests, aber überwachen Sie Ihre ersten Live-Gespräche, um sicherzustellen, dass alles mit echten Kundenanfragen funktioniert.
-
Führen Sie Protokolle auf Ihrer Seite. Bitten Sie Ihren Entwickler, die Anfragen der App zu protokollieren, damit Sie Probleme schnell beheben können.
-
Falls Ihre Firewall eine IP-Allowlist benötigt: Jeder Aufruf einer benutzerdefinierten Funktion (und jede Folgeprüfung) wird von einer festen IPv4-Adresse gesendet, derselben, die auch unsere Webhooks verwenden; keine Bereiche, kein IPv6, kein Wechsel. Kontaktieren Sie den Support, und wir geben Ihnen die Adresse. Aktivieren Sie Request-Signing und überprüfen Sie die Signatur als Ihre eigentliche Sicherheitsprüfung; betrachten Sie die IP lediglich als zusätzlichen Filter.
-
Verwenden Sie eine öffentliche finale URL. Ihre Funktions-URL muss eine öffentliche Webadresse (HTTP/HTTPS) sein. Interne Adressen, localhost und Adressen privater Netzwerke werden aus Sicherheitsgründen abgelehnt, und die Plattform folgt keinen Weiterleitungen – verweisen Sie die Funktion direkt auf die finale URL, nicht auf eine, die zu ihr weiterleitet.
Langlaufende Jobs: Ergebnis später erhalten
Normalerweise muss eine benutzerdefinierte Funktion innerhalb von 30 Sekunden antworten, während der Kontakt auf die Antwort wartet. Manche Jobs dauern länger: das Rendern eines Videos, die Durchführung einer Bonitätsprüfung oder das Warten auf die Genehmigung durch eine Person auf Ihrer Seite. Aktivieren Sie für diese Fälle Ergebnis kommt später (langlaufend). Der Aufruf der KI startet dann nur den Job. Ihr Dienst antwortet sofort, die KI teilt dem Kontakt mit, dass das Ergebnis unterwegs ist und setzt das Gespräch fort, und Ihr Dienst sendet das Ergebnis an einen Callback-Link, sobald er fertig ist.
Wann man es verwendet
Verwenden Sie es, wenn Ihr Dienst nicht zuverlässig innerhalb von 30 Sekunden antworten kann. Lassen Sie es für schnelle Abfragen (Bestellstatus, Lagerbestand, Preis) deaktiviert: Diese sind als normaler Aufruf einfacher, da die KI das Ergebnis direkt in derselben Antwort liefert.
Die Einstellungen im Editor
Sie finden diese im Editor für benutzerdefinierte Funktionen neben Systemdaten überspringen.
| Einstellung | Funktion |
|---|---|
| Ergebnis kommt später (langlaufend) | Wandelt die Funktion in ein Startsignal um. Ihr Dienst hat 30 Sekunden Zeit, um auf den ersten Aufruf zu antworten (jeder 2xx-Status, der Body wird ignoriert), und dann bis zu Warten bis zu, um das Ergebnis zu senden. |
| Wenn das Ergebnis eintrifft | Die KI schreibt die nächste Nachricht (Standard): Die KI liest das Ergebnis und schreibt die nächste Nachricht in ihrer eigenen Stimme, gemäß dem Zweck (KI-Aktion) der Funktion. Text unverändert senden: Der von Ihnen gepostete Text wird wortwörtlich an den Kontakt gesendet. |
| Warten bis zu | Wie lange der Callback-Link gültig bleibt, in Stunden, von 1 bis 168 (7 Tage). Der Standardwert ist 24. |
Was Ihr Dienst empfängt
Wenn die Option aktiviert ist, enthält jeder Aufruf zusätzlich zu den oben beschriebenen Informationen (Ihre Eingabeparameter, der system-Block und die Signatur-Header) den Callback-Link an drei Stellen:
| Ort | Inhalt |
|---|---|
Header X-Callback-Url |
Der Callback-Link. |
Body-Feld callback_url |
Derselbe Link für POST, PUT, PATCH und DELETE. Für GET und HEAD ist es stattdessen ein Abfrageparameter namens callback_url. |
system.callback_url und system.callback_expires_at |
Der Link und wann er abläuft (ein ISO 8601 Datum und Uhrzeit). Wird weggelassen, wenn Systemdaten überspringen aktiviert ist. |
Der Link ist für jeden Aufruf eindeutig, gehört zu diesem Kontakt und diesem Aufruf, funktioniert einmalig und läuft nach Warten bis zu ab. Sie benötigen keinen API-Schlüssel, um ihn zu verwenden: Der Link selbst ist die Berechtigung. Behandeln Sie ihn wie ein Passwort und schreiben Sie ihn niemals in ein öffentliches Protokoll.
Senden des Ergebnisses
Wenn der Job abgeschlossen ist, senden Sie einen POST an den Callback-Link:
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"
}
resultist das, was die KI liest. Es kann Text oder ein JSON-Objekt sein.messageist optional. Bei Text unverändert senden erhält der Kontaktmessage, wenn Sie eines senden, andernfallsresult, wenn es sich um Text handelt.media_urlist optional: einhttps-Link zu einer Datei (Bild, Video, Audio oder Dokument), die der Kontakt als echten Anhang erhält, nicht als Link. Siehe Senden einer Datei unten.- Sie können auch einen einfachen Textkörper mit
Content-Type: text/plainsenden. Dieser wird alsresultbehandelt. - Der Textkörper kann bis zu 64 KB groß sein.
Was der Callback-Link antwortet:
| Status | Body | Bedeutung |
|---|---|---|
202 |
{"ok":true,"received":true} |
Das Ergebnis wurde empfangen. |
200 |
{"ok":true,"duplicate":true} |
Dieser Link hat bereits ein Ergebnis erhalten. Ein zweites Mal passiert nichts, daher ist ein erneuter Versuch immer sicher. |
400 |
Der Body ist ungültig. | |
404 |
Der Link ist unbekannt. Überprüfen Sie, ob Sie den exakten Link aus der Anfrage verwendet haben. | |
410 |
Der Link ist abgelaufen. Der KI wurde bereits mitgeteilt, dass das Ergebnis nie eingetroffen ist. | |
413 |
Der Body ist größer als 64 KB. | |
429 |
Mehr als 20 Posts in einer Minute an denselben Link. Warten Sie und versuchen Sie es erneut. |
Ein vollständiges Beispiel: ein Video, das drei Minuten dauert
- Die KI ruft Ihre Funktion auf. Sie erhalten (gekürzt):
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"
}
}
- Ihr Dienst startet das Rendering und antwortet sofort:
{ "status": "started" }
- Die KI teilt dem Kontakt mit, dass das Video erstellt wird, und chattet weiter.
- Drei Minuten später postet Ihr Dienst das Ergebnis an den Callback-Link:
{ "result": { "video_url": "https://cdn.example.com/spring-offer.mp4", "duration_seconds": 42 } }
- Die KI schreibt die nächste Nachricht in ihren eigenen Worten, zum Beispiel “Ihr Video ist fertig: https://cdn.example.com/spring-offer.mp4”.
Verwenden Sie Zapier oder Make? Lassen Sie den Trigger-Webhook den Aufruf empfangen und machen Sie den letzten Schritt des Flows zu einem POST an callback_url aus den Trigger-Daten.
Was im Chat passiert
Das Ergebnis wird als Funktionseintrag im Gespräch gespeichert, sodass Sie es im Posteingang wie jeden anderen benutzerdefinierten Funktionsaufruf sehen. Je nach Einstellung unter Wenn das Ergebnis eintrifft, schreibt und sendet die KI die nächste Nachricht (dies kostet eine KI-Antwort, wie jede KI-Nachricht) oder Ihr Text wird unverändert gesendet. Bei Text unverändert senden wird das Feld message gesendet, wenn Sie eines einfügen, andernfalls result, wenn es sich um einfachen Text handelt; wenn Sie nur ein Objekt ohne Text posten, schreibt die KI stattdessen die Nachricht.
Wenn die KI für diesen Kontakt ausgeschaltet ist, wenn das Ergebnis eintrifft (ein Teammitglied hat übernommen, die KI wurde pausiert, der Agent ist abwesend oder hat keine Credits mehr), wird das Ergebnis zwar im Gespräch gespeichert, aber keine Nachricht gesendet. Es wird auch nicht später gesendet, wenn die KI wieder eingeschaltet wird. Das Teammitglied sieht das Ergebnis im Chat und kann es verwenden.
Im Ausprobieren-Tab des Agenten funktioniert der gesamte Ablauf ebenfalls: Das Ergebnis kommt im Test-Chat an.
Senden einer Datei (Video, Bild, PDF)
Ein Ergebnis, das eine Datei ist, zum Beispiel ein Video, das Ihr Dienst im Hintergrund gerendert hat, erreicht den Kontakt in beiden Modi als Anhang, den er im Chat öffnen kann. Die Plattform findet die Datei in Ihrem Callback wie folgt:
media_urlim Textkörper, wenn Sie einen senden.- Andernfalls ein Dateifeld im
result-Objekt:file_url,video_url,image_url,pdf_url,document_url,audio_url,attachment_urloderdownload_url. - Andernfalls der erste
https-Link im Text, der auf eine Dateiendung wie.mp4,.jpg,.pngoder.pdfendet.
Bei Die KI schreibt die nächste Nachricht schreibt die KI den Text und die Datei wird an diese Nachricht angehängt (der KI wird mitgeteilt, den Link nicht einzufügen). Bei Text unverändert senden ist Ihr message die Bildunterschrift des Anhangs.
{
"result": { "status": "done", "title": "Spring offer" },
"message": "Your video is ready.",
"media_url": "https://cdn.example.com/spring-offer.mp4"
}
Dateien können bis zu 16 MB groß sein und müssen über https erreichbar sein. Jeder Kanal unterstützt unterschiedliche Typen: E-Mail und WhatsApp-Kanäle akzeptieren beispielsweise Videos, Bilder, Audio und Dokumente, während SMS keine Dateien übertragen kann. Wenn ein Kanal die Datei nicht verarbeiten kann oder die Datei zu groß ist, erhält der Kontakt die Nachricht dennoch, wobei der Link zur Datei am Ende hinzugefügt wird.
Wenn das Ergebnis nie eintrifft
Wenn nichts gepostet wird, bevor die Zeit unter Warten bis zu abläuft, wird der KI mitgeteilt, dass das Ergebnis nie eingetroffen ist, damit sie den Kontakt informieren kann. Ein Eintrag mit dem Code APP-3103 erscheint unter Einstellungen → Fehlerprotokoll, und Sie erhalten eine Tool-Fehlerbenachrichtigung.
Grenzwerte auf einen Blick
- Ein Ergebnis pro Callback-Link. Spätere Posts an denselben Link werden als Duplikate beantwortet und ändern nichts.
- Bis zu 64 KB pro Ergebnis.
- Eine Datei pro Ergebnis, bis zu 16 MB, über
https. - Bis zu 20 Posts pro Minute an einen Link.
- Warten bis zu von 1 bis 168 Stunden.
- Ihr Dienst hat weiterhin 30 Sekunden Zeit, um auf den ersten Aufruf zu antworten.
Überprüfung, ob ein Aufruf tatsächlich von uns stammt
Jeder, der die URL Ihrer Funktion kennt, könnte eine gefälschte Anfrage senden. Ein langes Geheimnis in einem Authentifizierungs-Header hilft zwar, aber es ist bei jedem Aufruf derselbe Wert. Wer also einen Aufruf sieht (in einem Log oder Screenshot), kann ihn wiederverwenden. Request-Signing löst dieses Problem: Jeder Aufruf enthält eine Signatur, die nur jemand erzeugen kann, der Ihr Geheimnis besitzt, und die nach wenigen Minuten abläuft.
Das Signieren ist optional und standardmäßig deaktiviert. Es handelt sich um eine Einstellung für Ihr gesamtes Konto: Ein einziges Geheimnis signiert jede benutzerdefinierte Funktion.
Signierung aktivieren
- Öffnen Sie Custom Functions.
- Suchen Sie unter Ihrer Funktionsliste die Karte Request signing und klicken Sie auf Turn on signing.
- Klicken Sie auf Show, kopieren Sie das Geheimnis (es beginnt mit
whsec_) und speichern Sie es in dem System, das die Aufrufe empfängt. Behandeln Sie es wie ein Passwort.
Über dieselbe Karte können Sie das Geheimnis erneut kopieren, rotieren (das alte funktioniert sofort nicht mehr) oder das Signieren deaktivieren.
Was wir senden
Sobald das Signieren aktiviert ist, enthält jeder Aufruf einer benutzerdefinierten Funktion zwei zusätzliche Header: die Aufrufe der KI während eines Chats, Bedingungen für das Senden von Folgeanfragen und die Schaltfläche Run Test im Editor.
| Header | Bedeutung |
|---|---|
X-Webhook-Signature |
Die Signatur in der Form v1=<hex>. |
X-Webhook-Timestamp |
Zeitpunkt des Versands als Unix-Zeitstempel in Sekunden. |
Jeder Aufruf, ob signiert oder nicht, enthält außerdem User-Agent: Custom-Function/1.0, sofern Sie nicht Ihren eigenen User-Agent-Header festlegen.
Die Header und die Signatur funktionieren genau wie bei signierten Webhooks. Wenn Sie unsere Webhooks also bereits verifizieren, funktioniert derselbe Code auch hier. Nur das Geheimnis ist ein anderes.
Überprüfung
Die Signatur ist ein HMAC-SHA256 des Strings <timestamp>.<raw request body>, wobei Ihr Signatur-Geheimnis als Schlüssel verwendet wird. Überprüfen Sie sie anhand des rohen (raw) Bodys, also genau der Bytes, die Sie empfangen haben: Das Parsen des JSON und das anschließende Zurückwandeln in Text kann die Bytes verändern, wodurch die Signatur nicht mehr übereinstimmt.
Eine Funktion, die GET verwendet (oder einen POST ohne zu sendende Daten), hat keinen Body. Der signierte String ist also nur <timestamp>. mit einem leeren Body. Die Signatur beweist dann, dass der Aufruf von uns stammt und aktuell ist, deckt jedoch nicht den Query-String ab.
Node.js-Beispiel:
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-Beispiel:
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)
Testen Sie es mit Run Test im Editor: Sobald das Signieren aktiviert ist, wird der Testaufruf genau wie ein echter Aufruf signiert. Eine Funktion, die den Test besteht, wird also auch Ihre Prüfung während echter Chats bestehen.
Verwenden Sie die API? Dasselbe Geheimnis kann mit
GET,POSTundDELETEunter/v1/custom-functions/signing-secretgelesen, generiert, rotiert und entfernt werden.
Ausführungslimits
Jede benutzerdefinierte Funktion verfügt am unteren Rand des Editors über einen optionalen Bereich Ausführungslimits. Er steuert, wie oft die KI die Funktion ausführen darf und ob ein früheres Ergebnis wiederverwendet werden kann. Alle Einstellungen hier sind optional – lassen Sie alles leer, und die Funktion verhält sich genau wie zuvor.
Schreibgeschützte Funktion. Aktivieren Sie diese Option, wenn Ihre Funktion nur Daten liest – wie eine Aktienabfrage, eine Preisprüfung oder eine Suche nach dem Bestellstatus – und niemals etwas erstellt oder ändert. Wenn eine vorübergehende Netzwerkstörung die KI mitten in der Antwort unterbricht, kann die Plattform den Gesprächsverlauf sicher wiederholen, anstatt den Kunden ohne Antwort zu lassen. Aktivieren Sie dies nur, wenn die Funktion wirklich niemals Daten schreibt: Eine Funktion, die Datensätze erstellt, muss deaktiviert bleiben, damit ein erneuter Versuch sie nicht versehentlich zweimal ausführt. Funktionen, die die GET-Methode verwenden, werden automatisch als schreibgeschützt behandelt, da GET-Anfragen nur zum Abrufen von Daten gedacht sind; Funktionen mit POST, PUT, PATCH und DELETE benötigen diesen Schalter.
Zwischengespeichertes Ergebnis bei wiederholten Aufrufen bereitstellen. Wenn die KI die Funktion erneut mit denselben Eingaben aufruft (zum Beispiel, wenn der Kunde dieselbe Frage zweimal stellt), wird das vorherige Ergebnis wiederverwendet, anstatt Ihren Endpunkt erneut aufzurufen. Zwischengespeicherte Ergebnisse werden bis zu 24 Stunden lang aufbewahrt, und ein Aufruf mit anderen Eingaben geht immer frisch an Ihren Endpunkt.
Maximale Ausführungen pro Konversation. Eine feste Obergrenze dafür, wie oft die Funktion innerhalb einer Konversation ausgeführt werden kann. Setzen Sie dies auf 1 für Funktionen, die pro Chat nur einmal ausgelöst werden sollten – etwa das Erstellen eines Angebots, das Auslösen eines Rückrufs oder das Starten einer Automatisierung. Wenn das Limit erreicht ist, wird der KI mitgeteilt, dass die Funktion bereits ausgeführt wurde, und sie erhält das aktuellste Ergebnis, sodass sie dem Kunden weiterhin antworten kann, anstatt zu verstummen.
Maximale Ausführungen pro Zeitfenster. Ein Ratenlimit über die Zeit: zum Beispiel maximal 5 Ausführungen innerhalb von 60 Minuten. Nützlich für Funktionen, die kostenpflichtige Dienste von Drittanbietern aufrufen oder aufwendigere Automatisierungen auslösen. Beide Felder müssen zusammen ausgefüllt werden (eine Anzahl von Ausführungen und ein Zeitfenster in Minuten, bis zu 7 Tage).
Senden von Angeboten, Verträgen oder Rechnungen auf LinkedIn. Wenn die KI auf LinkedIn antwortet, schreibt sie aus dem eigenen Posteingang des Kontoinhabers. Daher sollte sie in dessen Namen keine Angebote, Verträge, Kostenvoranschläge, Rechnungen, Zahlungslinks oder Zugänge versenden, es sei denn, der Inhaber hat dies ausdrücklich erlaubt. Bei Automatisch (der Standardeinstellung) wird eine Funktion, deren Name oder Beschreibung darauf hindeutet, dass sie eines dieser Elemente sendet, auf LinkedIn nicht ausgeführt: Die KI erhält die Information, dass nichts gesendet wurde, und teilt der Person mit, dass sich der Inhaber darum kümmern wird. Wählen Sie Erlaubt, damit die Funktion auf LinkedIn dennoch ausgeführt wird, oder Nie auf LinkedIn, um eine Funktion zurückzuhalten, die bei der automatischen Prüfung übersehen werden könnte. Andere Kanäle sind davon nicht betroffen, und im Gegensatz zu den oben genannten Beschränkungen gilt diese Einstellung auch beim Ausprobieren (Try Out).
Ein paar Dinge, die Sie wissen sollten:
- Limits zählen nur erfolgreiche Ausführungen. Ein Aufruf, der auf der Seite Ihres Endpunkts fehlgeschlagen ist, verbraucht das Budget nicht.
- Wenn eine Ausführung durch ein Limit blockiert wird, wird der Kunde nie im Unklaren gelassen – der KI wird der Grund mitgeteilt und sie arbeitet mit den Informationen, die sie bereits hat.
- Limits gelten überall dort, wo die Funktion ausgeführt wird: reguläre Chats auf jedem Kanal und Funktionen, die von einer Automatisierung verwaltet werden. Testkonversationen unter ‘Ausprobieren’ werden nicht gezählt und nicht limitiert.
Integrierte Bot-Tools
Zusätzlich zu den benutzerdefinierten Funktionen, die Sie selbst erstellen, bietet die Plattform eine Bibliothek mit vorgefertigten Tools, die der KI-Bot während eines Gesprächs verwenden kann. Diese decken die häufigsten Aufgaben ab, die ein Bot erledigen muss – einen Teamkollegen benachrichtigen, einen Termin buchen, einen Kontakt markieren, Ihre Website durchsuchen, eine Nachverfolgung planen und mehr –, sodass Sie diese nicht von Grund auf neu einrichten müssen.
Der Bot entscheidet selbst, wann er welches Tool verwendet, basierend auf dem Gesprächsverlauf und der Konfiguration Ihres Agenten. Die meisten dieser Tools werden automatisch aktiviert, sobald die entsprechende Funktion eingeschaltet ist (zum Beispiel werden die Buchungstools erst verfügbar, wenn Sie einen Kalender verbinden und Buchungen aktivieren).
Credit-Kosten: Jeder Tool-Aufruf wird gemäß der KI-Qualitätsstufe Ihres Agenten abgerechnet, und selbst erstellte benutzerdefinierte Funktionen werden auf die gleiche Weise berechnet:
| KI-Qualitätsstufe | Credits pro Tool-Aufruf | Mit verbundenem eigenen Anthropic-Schlüssel (BYOK) |
|---|---|---|
| Pro | 1 Credit | 0 Credits – läuft über Ihren Schlüssel |
| Economy (veraltet) | 0,5 Credits | 0 Credits – läuft über Ihren Schlüssel |
| Max | 0,25 Credits | weiterhin 0,25 Credits, wird auch bei verbundenem eigenen Schlüssel berechnet |
| Mini | 0,15 Credits | weiterhin 0,15 Credits, wird auch bei verbundenem eigenen Schlüssel berechnet |
Team- & Aufgaben-Tools
| Werkzeug | Was es tut | Wann der Bot es verwendet |
|---|---|---|
| Teammitglied benachrichtigen | Pausiert den Bot für diesen Kontakt und sendet eine E-Mail an Ihr Team, dass ein Mensch benötigt wird. Der Chat wird markiert, damit ein Teamkollege ihn übernehmen kann. | Wenn der Kunde nach einem Menschen fragt, frustriert ist oder etwas fragt, das der Bot nicht beantworten darf oder kann. |
| Aufgabe erstellen | Erstellt eine neue Aufgabe auf Ihrem Aufgabenboard, optional verknüpft mit dem Kontakt und dem Gespräch. Der Bot antwortet weiterhin wie gewohnt – die Aufgabe ist lediglich eine Notiz für Ihr Team zur Nachverfolgung. | Für nicht dringende Angelegenheiten wie eine Funktionsanfrage, eine Upselling-Gelegenheit oder einen Rückruf, den das Team später bearbeiten sollte. |
| FAQ-Update vorschlagen | Wenn der Bot auf eine Frage stößt, die er nicht gut beantworten kann, erstellt er eine Aufgabe mit der Bitte an Ihr Team, eine Antwort zur Wissensdatenbank hinzuzufügen. | Wenn ein Kontakt etwas fragt, das nicht durch Ihre bestehenden FAQs abgedeckt ist – damit die Lücke für das nächste Mal geschlossen wird. |
| Kontext zu einem FAQ-Vorschlag hinzufügen | Wenn ein anderer Kontakt später eine ähnliche Frage aus einem anderen Blickwinkel stellt, fügt der Bot diesen Kontext dem bestehenden FAQ-Vorschlag hinzu, anstatt eine doppelte Aufgabe zu erstellen. | Automatisch – hält Ihre Aufgabenliste sauber, wenn mehrere Personen dieselbe Wissenslücke aufzeigen. |
Kontakt-Tools
| Tool | Was es tut | Wann der Bot es verwendet |
|---|---|---|
| Tagging | Läuft automatisch nach jeder Bot-Antwort – es ist kein Tool, das der kundenorientierte Bot selbst aufruft. Das System überprüft das aktuelle Gespräch und wendet relevante Tags an, wobei Ihre bestehenden Tags nach Möglichkeit wiederverwendet werden (und nur bei Bedarf ein neues erstellt wird). | Automatisch – wann immer das Gespräch etwas aufdeckt, das eine Segmentierung wert ist, wie z. B. Interesse, Absicht, Lead-Qualität oder Sprache. |
| Kontaktname aktualisieren | Speichert den Vor- und/oder Nachnamen des Kontakts, wenn dieser ihn mitteilt. | Wenn der Kunde sich vorstellt oder einen Namen korrigiert. |
| Kontakt-E-Mail aktualisieren | Speichert die E-Mail-Adresse des Kontakts, wenn dieser sie mitteilt. | Wenn der Kunde eine E-Mail-Adresse angibt – für Newsletter, Quittungen, Kontosuchen usw. |
Termin- & Buchungstools
Diese Tools sind nur verfügbar, wenn Buchungen für Ihren Agenten aktiviert sind und ein Kalender-Ereignistyp konfiguriert wurde.
| Tool | Funktion | Wann der Bot es verwendet |
|---|---|---|
| Verfügbare Zeitfenster prüfen | Sucht nach freien Zeiten in Ihrem verknüpften Kalender für ein bestimmtes Datum oder einen Zeitraum. | Wenn der Kunde buchen möchte und der Bot echte Verfügbarkeiten anbieten muss. |
| Termin buchen | Erstellt den Termin in Ihrem Kalender und bestätigt die Buchung gegenüber dem Kunden. | Nachdem der Kunde ein bestimmtes Datum und eine Uhrzeit bestätigt hat. |
| Termin verschieben | Verschiebt einen bestehenden Termin auf ein neues Datum und eine neue Uhrzeit. | Wenn der Kunde um eine Terminverschiebung bittet. |
| Termin stornieren | Storniert einen bestehenden Termin. | Wenn der Kunde um eine Stornierung bittet. |
| Termine nachschlagen | Ruft die bestehenden Termine eines Kontakts ab, damit der Bot weiß, was bereits gebucht ist. | Wenn der Kunde fragt „Wann ist mein Termin?“ oder bevor der Bot eine Verschiebung anbietet. |
Wissens- & Web-Tools
| Tool | Funktion | Wann der Bot es verwendet |
|---|---|---|
| Website durchsuchen | Scannt die URLs, die Sie zur Liste der dynamischen URLs des Agenten hinzugefügt haben, um Produktseiten, Artikel oder andere Inhalte zu finden, die die Frage des Kunden beantworten. Nur verfügbar, wenn KI-Websuche aktiviert ist und Sie mindestens eine dynamische URL hinzugefügt haben. Wenn die KI-Websuche deaktiviert ist, kann der Bot keine Seiten oder Links lesen — auch nicht solche, die der Kunde in den Chat einfügt. | Wenn der Kunde nach etwas fragt, das wahrscheinlich auf Ihrer Website zu finden ist — Produkte, Preise, Standorte, Richtlinien. |
| Link prüfen | Liest den Inhalt einer bestimmten URL, damit der Bot Fragen zu dieser Seite beantworten kann. Nur verfügbar, wenn KI-Websuche aktiviert ist und Sie mindestens eine dynamische URL hinzugefügt haben. Wenn die KI-Websuche deaktiviert ist, kann der Bot keine Seiten oder Links lesen — auch nicht solche, die der Kunde in den Chat einfügt. | Wenn der Kunde einen Link teilt oder nach einer bestimmten Seite auf Ihrer Website fragt. |
| Websuche | Führt eine öffentliche Google-Suche durch und liefert die Top-Ergebnisse, damit der Bot Fragen außerhalb Ihrer eigenen Inhalte beantworten kann. | Wenn der Kunde nach etwas Allgemeinem fragt (z. B. Wegbeschreibungen, öffentliche Informationen), das nicht in Ihrer Wissensdatenbank enthalten ist. Wird nur verwendet, wenn die Websuche aktiviert ist. |
Follow-up-Tools
Diese Tools erfordern, dass Follow-ups für Ihren Agenten aktiviert sind.
| Tool | Funktion | Wann der Bot es verwendet |
|---|---|---|
| Intelligentes Follow-up planen | Plant eine intelligente Follow-up-Nachricht unter Verwendung Ihrer Follow-up-Sequenz – wählt die richtige Vorlage und das richtige Timing basierend auf dem Gespräch aus. | Wenn der Kunde nicht mehr antwortet oder den Bot bittet, „später noch einmal nachzufragen“. |
| Follow-up planen | Plant ein einfaches Follow-up zu einem bestimmten Zeitpunkt. | Wenn der Bot das Gespräch zu einem definierten Zeitpunkt voranbringen muss. |
Ausführung benutzerdefinierter Funktionen
| Tool | Funktion | Wann der Bot es verwendet |
|---|---|---|
| Benutzerdefinierte Funktion ausführen | Führt eine der benutzerdefinierten Funktionen aus, die Sie erstellt und dem Agenten zugewiesen haben (siehe den Rest dieser Seite). | Wenn die Anfrage des Kunden dem Zweck einer Ihrer benutzerdefinierten Funktionen entspricht. |
| Datei aus einem Tool-Ergebnis senden | Sendet ein Bild, Video, eine Audiodatei oder ein Dokument, dessen Link von einer Ihrer benutzerdefinierten Funktionen oder MCP-Server zurückgegeben wurde, als echten Anhang, anstatt den Link einzufügen. Verfügbar, wenn der Agent über mindestens eine benutzerdefinierte Funktion oder einen MCP-Server verfügt. | Wenn ein Tool-Ergebnis eine Datei enthält, die der Kontakt sehen wollte. Siehe Dateien aus Ihren eigenen Tools. |
Restaurant-Buchungstools (Zenchef und Formitable)
Diese Tools sind nur verfügbar, wenn eine Zenchef- oder Formitable-Integration verbunden ist. Sie ermöglichen es dem Bot, Restaurantreservierungen von Anfang bis Ende zu verwalten.
| Tool | Funktion | Wann der Bot es verwendet |
|---|---|---|
| Restaurant-Verfügbarkeit prüfen | Sucht nach freien Reservierungsplätzen für ein bestimmtes Datum, eine Gruppengröße und (optional) einen Sitzbereich. | Wenn ein Gast einen Tisch buchen möchte. |
| Restaurant-Buchung erstellen | Erstellt eine neue Reservierung. | Nachdem der Gast einen bestimmten Platz bestätigt hat. |
| Restaurant-Buchung aktualisieren | Ändert Datum, Uhrzeit, Gruppengröße oder Notizen einer bestehenden Reservierung. | Wenn der Gast seine Buchung ändern möchte. |
| Buchungsstatus stornieren oder ändern | Storniert eine Reservierung oder aktualisiert deren Status (z. B. bestätigt, Nichterscheinen). | Wenn der Gast storniert oder der Bot eine Statusänderung markieren muss. |
| Buchungen suchen | Findet bestehende Reservierungen, die Kriterien wie Name, E-Mail oder Datum entsprechen. | Wenn ein wiederkehrender Gast nach einer bestehenden Reservierung fragt. |
| Gastprofil aktualisieren | Aktualisiert das Profil des Gastes im Restaurantsystem (Präferenzen, Notizen, Kontaktinformationen). | Wenn der Gast diätetische Vorlieben, eine neue Telefonnummer oder andere profilbezogene Informationen mitteilt. |
| Restaurant-Produkte auflisten | Ruft die Liste der Menüs, Menüfolgen oder Zusatzoptionen ab, die für die Buchung verfügbar sind. | Wenn der Gast fragt „Welche Menüs bieten Sie an?“ oder der Bot ein Menü an eine Reservierung anhängen muss. |
Tools ein- und ausschalten
Die meisten Tools werden über den Tab KI-Fähigkeiten des Agenten gesteuert:
- Buchungstools werden aktiviert, wenn Sie Buchungen aktivieren und einen Kalender verbinden (im Bereich Buchungen auf demselben Tab KI-Fähigkeiten)
- Follow-up-Tools werden aktiviert, wenn Sie Follow-ups aktivieren
- Restaurant-Tools werden aktiviert, wenn Sie ein Zenchef- oder Formitable-Konto verbinden
- Websuche hat einen eigenen Schalter auf dem Tab FAQs & Wissen
- Aufgaben-Tools können pro Agent mit dem Schalter KI das Erstellen von Aufgaben erlauben deaktiviert werden (sie sind standardmäßig aktiviert; der kontoweite Aufgaben-Schalter unter Einstellungen → Profil → Funktionen deaktiviert das gesamte Aufgabensystem überall)
- Kontakt-Update-Tools werden auf demselben Tab KI-Fähigkeiten gesteuert — ob die KI Kontakte umbenennen oder zusätzlich erfasste Informationen speichern darf
- Alarm-Tools sind immer verfügbar; Tagging erfolgt automatisch nach jeder Bot-Antwort (es ist kein Tool, das der Bot aktiv aufruft)
Wenn der Bot ein bestimmtes integriertes Tool nicht mehr verwenden soll, ist der sauberste Weg die Deaktivierung der zugrunde liegenden Funktion (deaktivieren Sie beispielsweise Buchungen, um alle Buchungstools zu deaktivieren).
Von einer Automatisierung verwaltete Funktionen
Einige Einträge auf Ihrer Seite für benutzerdefinierte Funktionen können mit dem Badge Von Automatisierung verwaltet versehen sein. Diese wurden nicht hier erstellt, sondern stammen von einer Automatisierung mit einem KI-Agenten-Funktions-Trigger. Dies verleiht Ihrem Agenten eine Fähigkeit, deren Schritte Sie visuell auf der Automatisierungs-Arbeitsfläche erstellen, anstatt auf eine externe Webadresse zu verweisen.
Eine verwaltete Funktion wird für Sie betreut: Ihr Name, ihre Beschreibung und ihre Felder richten sich immer nach den Einstellungen des Automatisierungsauslösers. Daher kann sie auf dieser Seite weder bearbeitet noch gelöscht werden – verwenden Sie stattdessen den Link Automatisierung öffnen, um die Automatisierung selbst zu ändern. Sie können jedoch wie gewohnt auswählen, welche Agenten über diese Funktion verfügen: Auf der Registerkarte KI-Fähigkeiten eines Agenten erscheint sie neben den anderen Fähigkeiten des Agenten mit einem regulären Ein-/Ausschalter (wenn die zugehörige Automatisierung pausiert ist, wird dies in der Zeile angezeigt – die Fähigkeit wird aktiv, sobald die Automatisierung eingeschaltet wird). Alles andere verhält sich wie bei jeder anderen benutzerdefinierten Funktion: Die KI entscheidet, wann sie aufgerufen wird, erfasst die von Ihnen definierten Details und kann die Antwort der Automatisierung im selben Gespräch verwenden.
Wenn Sie zwischen den beiden wählen müssen: Verwenden Sie eine reguläre benutzerdefinierte Funktion für ein System, das bereits über eine aufrufbare Adresse verfügt; erstellen Sie eine Automatisierung mit einem „AI Agent Function“-Trigger, wenn Sie die Arbeit lieber aus einzelnen Schritten zusammenstellen möchten – etwa das Nachschlagen in einer Tabelle oder Datenbank, das Verzweigen nach einer Bedingung oder das Erstellen von Datensätzen –, ohne einen eigenen Server betreiben zu müssen. Siehe Automatisierungen.
Plan-Anforderungen
Benutzerdefinierte Funktionen sind in Plänen verfügbar, die die Funktion für benutzerdefinierte Funktionen enthalten. Überprüfen Sie Ihr Abonnement, um die Verfügbarkeit zu bestätigen.
Nächste Schritte
- MCP-Server mit Ihrem Bot verbinden – ein fertiges Paket von Tools anstelle von jeweils einer Funktion.
- KI-Agenten – die Hauptseite der AI Studio-Gruppe, in der sich benutzerdefinierte Funktionen befinden und wo benutzerdefinierte Funktionen einem Bot zugewiesen werden.