Skip to main content
Mit benutzerdefinierten Variablen schreibst du einen Assistenten einmal und personalisierst trotzdem jeden Anruf. Statt einen Namen, einen Termin oder eine Kontonummer fest in den System-Prompt zu schreiben, referenzierst du einen Platzhalter wie {{customer_name}} und lieferst den Wert pro Anruf – aus deiner API-Anfrage, einem Kampagnen-Lead, einem eingehenden Anreicherungs-Webhook oder dem eingebauten Systemkontext der Plattform.

Referenzsyntax

Referenziere eine Variable mit doppelten geschweiften Klammern – das ist die bevorzugte, JSON-sichere Form:
Die alte Form mit einfachen Klammern {customer_name} wird ebenfalls aufgelöst, allerdings nur für Schlüssel, die tatsächlich bekannt sind (eine definierte Variable oder eine Systemvariable). So bleiben literale Klammern – zum Beispiel JSON im Body eines Tools – unangetastet. Jeder Platzhalter mit unbekanntem Schlüssel bleibt unverändert stehen.

Variablen für einen Assistenten definieren

Jeder Assistent hat eine Liste von Variablendefinitionen. Eine Definition besteht aus:
Schlüssel werden beim Speichern validiert: Ein ungültiges Format, eine Kollision mit einer reservierten Systemvariable, ein doppelter Schlüssel oder ein fehlendes Label werden allesamt abgelehnt.

Wo Variablen ersetzt werden

Werte werden beim Start des Anrufs ersetzt, bevor Modell oder Flow laufen – und zwar in diesen Feldern:
  • System-Prompt des Assistenten
  • Erste Nachricht des Assistenten (Begrüßung)
  • Flow-Node start.greeting
  • Flow-Node agent.instructions
  • URL und Header-Werte der Anfrage im Flow-Tool-Node
So kann ein Tool-Node https://app.famulor.de/api/user/orders/{{order_id}} aufrufen oder Authorization: Bearer {{api_token}} mit Werten pro Anruf senden.

Wertquellen und Priorität

Ein Wert kann aus mehreren Quellen kommen. Beim Start des Anrufs löst der Worker jeden Schlüssel nach dieser Priorität auf, höchste zuerst:
  1. Explizit – Werte, die direkt mit dem Anruf übergeben werden: über variables im API-Aufruf make-call, oder die benutzerdefinierten Felder eines Kampagnen-Leads, die auf passende Schlüssel gemappt werden.
  2. Eingehender Variablen-Webhook – Anreicherung, die beim Start des Anrufs abgerufen wird (siehe unten).
  3. Systemvariablen – von der Plattform aus dem Anrufkontext befüllt.
  4. Standardwert – der default_value aus der Definition.
Ein Platzhalter, der auf keiner Ebene einen Wert bekommt, bleibt unverändert.

Explizite Werte über die API

Kampagnen-Leads → Variablen

In einer Kampagne hat jeder Lead frei definierbare benutzerdefinierte Felder (leads.custom_fields). Beim Wählen wird das benutzerdefinierte Feld eines Leads auf eine Variable mit dem gleichen Schlüssel gemappt. So wird aus einer CSV-Spalte eine Variable:
Hier befüllen die Spalten customer_name und appointment_date bei jedem Anruf {{customer_name}} und {{appointment_date}}. Gib einer Lead-basierten Variable source: "lead", um die Absicht zu dokumentieren.

Systemvariablen

Diese Schlüssel sind immer verfügbar und werden vom Worker beim Start des Anrufs befüllt. Sie sind reserviert – du kannst keine benutzerdefinierte Variable mit einem dieser Schlüssel anlegen.

Eingehender Variablen-Webhook

Bei eingehenden Anrufen kennst du den Anrufer oft nicht im Voraus. Konfiguriere einen Variablen-Webhook am Assistenten (variable_webhook_url + variable_webhook_secret) – der Worker ruft ihn beim Start des Anrufs auf, um Variablen anzureichern, zum Beispiel um einen Kunden anhand seiner Anrufernummer nachzuschlagen.

Anfrage

Der Worker sendet einen POST mit JSON-Body:
Der rohe Request-Body wird mit HMAC-SHA256 signiert, unter Verwendung des variable_webhook_secret des Assistenten, und im Header mitgesendet:

Antwort

Gib die zu mergenden Variablen zurück:
Diese Werte werden über Systemvariablen und Standardwerten gemergt, aber unter allen expliziten Dispatch-Werten. Der Aufruf hat ein Timeout von ca. 5 Sekunden; ein Fehlschlag ist nicht kritisch – der Worker protokolliert ihn und macht mit den bereits vorhandenen Werten weiter.

Native Automation (Alternative)

Statt einer eigenen variable_webhook_url kannst du auch eine Automation mit dem Trigger Eingabevariablen einspeisen (call.variables) anlegen, die an den Assistenten gebunden ist. Beim Start des Anrufs führt der Worker diese Automation synchron aus und erwartet eine Variablen zurückgeben-Aktion (im gleichen { variables: {…} }-Format). Existiert keine passende aktive Automation, wird als Fallback die klassische Webhook-URL verwendet.

Signatur verifizieren

Berechne den HMAC immer über die rohen Bytes des Request-Bodys, nicht über ein neu serialisiertes Objekt – eine erneute Serialisierung kann Whitespace oder die Key-Reihenfolge verändern und damit die Signatur brechen. Verwende einen zeitkonstanten Vergleich.

Beispielanfrage

API & MCP

  • GET /v1/assistants/{id}/variables – liest die Variablendefinitionen des Assistenten; Scope assistants:read.
  • PATCH /v1/assistants/{id}/variables – ersetzt die Variablendefinitionen; Scope assistants:write.
  • MCP-Tools: get_assistant_variables, set_assistant_variables.
Die vollständige REST-Referenz findest du unter docs.famulor.io. Nutze {{key}} überall dort, wo du einen Wert pro Anruf brauchst, halte Schlüssel in snake_case und gib jeder Variable einen sinnvollen default_value, damit Anrufe sauber degradieren, wenn eine Quelle fehlt.