Zur Navigation springen

Dynamische Variablen

Übergeben Sie Laufzeitwerte, um das Verhalten Ihres Agenten zu personalisieren.

Dynamische Variablen ermöglichen es Ihnen, Laufzeitwerte in die Nachrichten, System-Prompts und Tools Ihres Agenten einzufügen. So können Sie jede Unterhaltung mit nutzerspezifischen Daten personalisieren, ohne mehrere Agenten zu erstellen.

Übersicht

Dynamische Variablen lassen sich in mehrere Bereiche Ihres Agenten integrieren:

  • System-Prompts, um Verhalten und Kontext anzupassen
  • Erste Nachrichten, um Begrüßungen zu personalisieren
  • Tool-Parameter und Header, um nutzerspezifische Daten zu übergeben

Hier sind einige Beispiele, bei denen dynamische Variablen nützlich sind:

  • Begrüßungen personalisieren mit Nutzernamen
  • Kontodetails einbeziehen in Antworten
  • Daten übergeben an Tool-Aufrufe
  • Verhalten anpassen anhand von Abonnementstufen
  • Auf Systeminformationen zugreifen wie Unterhaltungs-ID oder Anrufdauer

Dynamische Variablen unterstützen drei Werttypen:

String
Textwerte
Number
Numerische Werte
Boolean
Wahr-/Falsch-Werte

Dynamische Systemvariablen

Ihr Agent hat in jeder Unterhaltung ohne Laufzeitkonfiguration Zugriff auf integrierte system__*-Variablen. Diese Variablen haben den reservierten Namespace-Präfix system__ und werden im Verlauf der Unterhaltung automatisch aktualisiert. Benutzerdefinierte dynamische Variablen dürfen das Präfix system__ nicht verwenden oder Systemvariablen überschreiben.

Mit † markierte Variablen ändern sich zwischen Gesprächsrunden. Wenn Sie sie in Prompt-Text platzieren, kann dies das Prompt-Caching verhindern. Alternativen finden Sie unter Best Practices.

Agenten- und Unterhaltungsidentität

VariableTypBeschreibungBeispiel
system__agent_idstringEindeutige Kennung des Agenten, der die Unterhaltung gestartet hat. Ändert sich während einer Unterhaltung nie."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__current_agent_idstringEindeutige Kennung des aktuell aktiven Agenten. Wird aktualisiert, wenn die Unterhaltung an einen anderen Agenten übergeben wird."agent_8401kp8bt0jdf14rzzcv5veq94yg"
system__conversation_idstringEindeutige Unterhaltungskennung von ElevenLabs."conv_1801kp8qtb2begztn7zyf446v4jk"
system__user_idstring | nullVom Client bereitgestellte Nutzer-ID für Tracking und Analysen. Darf nicht für die Authentifizierung verwendet werden."G6yhJW8MktQdhUquvXD1iKpPHql2"
system__initiator_idstring | nullKennung entsprechend der Authentifizierungsmethode, mit der die Unterhaltung gestartet wurde."user_1801kp8qtb2begztn7zyf446v4jk"
system__channelstringKanalquelle, über die die Unterhaltung gestartet wurde."slack_integration"
system__is_text_onlybooleantrue, wenn die Unterhaltung im reinen Textmodus (Chat) läuft; false für Sprachanrufe.true
system__environmentstringUmgebung, in der die Unterhaltung läuft und die zum Auflösen von Umgebungsvariablen verwendet wird."production"

Zeit und Zeitzone

VariableTypBeschreibungBeispiel
system__timezonestring | nullKonfigurierte Zeitzone (conversation_config.agent.prompt.timezone) oder vom Anrufer bereitgestellte IANA-Zeitzone. Standardmäßig UTC, wenn nicht festgelegt."America/New_York"
system__time †stringAktuelles Datum und aktuelle Uhrzeit in der konfigurierten Zeitzone (%A, %H:%M %d %B %Y). Wird bei jeder Gesprächsrunde neu ausgewertet (ändert sich einmal pro Minute)."Friday, 12:33 12 December 2025"
system__time_utc †stringAktueller UTC-Zeitstempel im ISO-8601-Format. Wird bei jeder Gesprächsrunde neu ausgewertet."2025-12-12T12:33:45.123456+00:00"
system__time_datestringAktuelles Datum in der konfigurierten Zeitzone (oder UTC, wenn keine festgelegt ist) (%A, %d %B %Y). Ändert sich einmal täglich."Friday, 12 December 2025"
system__time_hourintegerAktuelle Stunde (0–23) in der konfigurierten Zeitzone (oder UTC, wenn keine festgelegt ist). Ändert sich höchstens einmal pro Stunde.12
system__time_minute †integerAktuelle Minute (0–59) in der konfigurierten Zeitzone (oder UTC, wenn keine festgelegt ist). Ändert sich einmal pro Minute.33
system__time_second †integerAktuelle Sekunde (0–59) in der konfigurierten Zeitzone (oder UTC, wenn keine festgelegt ist). Ändert sich bei jeder Gesprächsrunde.45

Telefonie und Messaging

Diese Variablen werden für Telefonie- und Messaging-Kanäle ausgefüllt, wenn sie zutreffen:

VariableTypBeschreibungBeispiel
system__caller_idstring | nullTelefonnummer des Anrufers (Voice/SMS/WhatsApp/Amazon Connect)."+14155552671"
system__called_numberstring | nullAngerufene Zieltelefonnummer."+18005551234"
system__call_sidstring | nullTwilio Call SID (nur Twilio-Anrufe)."CA3498076234a8bbf65c8f09fb8ad7ac1b"
system__call_idstring | nullSIP Call-ID (nur SIP-Trunk-Anrufe)."757f72cf-e80f-44f7-87d6-a961ffbf5b3d"

Unterhaltungsstatus pro Gesprächsrunde

VariableTypBeschreibungBeispiel
system__call_duration_secs †integerVergangene Unterhaltungszeit in Sekunden. Wird bei jeder Gesprächsrunde neu ausgewertet.142
system__agent_turns †integerGesamtzahl der bisherigen Agenten-Gesprächsrunden in der Unterhaltung. Erhöht sich bei jeder Gesprächsrunde.5
system__current_agent_turns †integerAnzahl der Agenten-Gesprächsrunden für den aktuellen Agenten; wird nach einer Agentenübergabe auf 0 zurückgesetzt.3
system__current_subagent_turns †integerAnzahl der Agenten-Gesprächsrunden im aktuellen Workflow-Knoten; wird bei einem Knotenwechsel auf 0 zurückgesetzt.2
system__conversation_history †stringJSON-serialisiertes Unterhaltungsprotokoll bis zur aktuellen Gesprächsrunde ({"entries": [{"role": "user", "message": "..."}]}). Siehe Format des Unterhaltungsverlaufs.'{"entries": [...]}'

Format des Unterhaltungsverlaufs

Die Variable system__conversation_history enthält ein JSON-Objekt mit der folgenden Struktur:

{
"x-elevenlabs-history": true,
"entries": [
{ "role": "user", "message": "Hello" },
{ "role": "agent", "message": "Hi, how can I help?" },
{
"role": "agent",
"tool_requests": [{ "tool_name": "lookup_order", "params_as_json": { "order_id": "123" } }]
},
{
"role": "tool",
"tool_results": [{ "tool_name": "lookup_order", "result_value": "{\"status\": \"shipped\"}" }]
}
]
}

Jeder Eintrag enthält eine role ("user", "agent" oder "tool") und eines der folgenden Elemente:

  • message: Der Textinhalt der Gesprächsrunde
  • tool_requests: Ein Array von Tool-Aufrufen des Agenten mit aufgelösten Parameterwerten
  • tool_results: Ein Array von Tool-Antworten

Wenn ein Tool-Ergebnis oder Parameter einen verschachtelten Unterhaltungsverlauf enthält, wird er durch einen Platzhalter ersetzt (z. B. [conversation_history (5 turns)]), um eine unbegrenzte rekursive Erweiterung zu vermeiden.

Diese Variable ist nützlich, um Unterhaltungskontext an Tools weiterzugeben (z. B. Webhooks oder benutzerdefinierte LLMs) oder um während Übergaben Unterhaltungsverläufe in Subagent-Prompts einzubeziehen.

Geheime dynamische Variablen

Geheime dynamische Variablen werden auf dieselbe Weise wie normale dynamische Variablen ausgefüllt, signalisieren ElevenAgents jedoch, dass sie nur in Headern dynamischer Variablen verwendet und niemals als Teil des System-Prompts oder der ersten Nachricht eines Agenten an einen LLM-Anbieter gesendet werden dürfen.

Verwenden Sie geheime dynamische Variablen für Authentifizierungstokens oder private IDs, die nicht an ein LLM gesendet werden sollen. Um eine geheime dynamische Variable zu erstellen, stellen Sie der dynamischen Variable secret__ voran.

Geheime Werte werden maskiert gespeichert, daher gibt die Conversations API sie als <REDACTED> zurück. Webhooks für Transkriptionen nach dem Anruf liefern die ursprünglichen Werte. Stellen Sie daher sicher, dass Ihr Webhook-Endpunkt sie als Geheimnisse behandelt. Verwenden Sie das Präfix secret__ nicht für Werte, die Sie über die Conversations API wieder abrufen müssen. Übergeben Sie diese als reguläre dynamische Variablen oder übergeben Sie eine nicht sensible Kennung und rufen Sie den sensiblen Wert in Ihrem eigenen System ab.

Dynamische Variablen über Tools aktualisieren

Tool-Aufrufe können dynamische Variablen erstellen oder aktualisieren, wenn sie ein gültiges JSON-Objekt zurückgeben. Um festzulegen, was extrahiert werden soll, setzen Sie die Objektpfade mit Punktnotation. Wenn das Feld oder der Pfad nicht existiert, wird nichts aktualisiert.

Beispiel für ein Antwortobjekt und Punktnotation:

  • Status entspricht dem Pfad: response.status
  • Die E-Mail-Adresse des ersten Nutzers im Nutzer-Array entspricht dem Pfad: response.users.0.email
JSON
{
"response": {
"status": 200,
"message": "Successfully found 5 users",
"users": [
"user_1": {
"user_name": "test_user_1",
"email": "test_user_1@email.com"
}
]
}
}

Um eine dynamische Variable auf die E-Mail-Adresse des ersten Nutzers zu aktualisieren, legen Sie die Zuweisung wie folgt fest.

Abfrageparameter

Zuweisungen werden für jedes Webhook-Tool konfiguriert. Siehe Tool-Zuweisungen in der API-Referenz.

Anleitung

Voraussetzungen:

1

Dynamische Variablen in Prompts definieren

Fügen Sie Variablen mit doppelten geschweiften Klammern {{variable_name}} hinzu in:

  • System-Prompts
  • Ersten Nachrichten
  • Tool-Parametern

Dynamische Variablen in Nachrichten

Dynamische Variablen in Nachrichten

2

Dynamische Variablen in Tools definieren

Sie können dynamische Variablen auch in der Tool-Konfiguration definieren. Um eine neue dynamische Variable zu erstellen, setzen Sie den Werttyp auf Dynamische Variable und klicken Sie auf die Schaltfläche +.

Platzhalter festlegen

Platzhalter festlegen

3

Platzhalter festlegen

Konfigurieren Sie Standardwerte zum Testen, ohne Variablen zur Laufzeit zu übergeben.

Legen Sie im Dashboard des Agenten Standardwerte für jede dynamische Variable fest.

Platzhalter festlegen

4

Variablen zur Laufzeit übergeben

Geben Sie beim Starten einer Unterhaltung die dynamischen Variablen in Ihrem Code an:

Stellen Sie sicher, dass Sie das aktuelle SDK installiert haben.

import os
import signal
from elevenlabs.client import ElevenLabs
from elevenlabs.conversational_ai.conversation import Conversation, ConversationInitiationData
from elevenlabs.conversational_ai.default_audio_interface import DefaultAudioInterface
agent_id = os.getenv("AGENT_ID")
api_key = os.getenv("ELEVENLABS_API_KEY")
elevenlabs = ElevenLabs(api_key=api_key)
dynamic_vars = {
"user_name": "Angelo",
}
config = ConversationInitiationData(
dynamic_variables=dynamic_vars
)
conversation = Conversation(
elevenlabs,
agent_id,
config=config,
# Assume auth is required when API_KEY is set.
requires_auth=bool(api_key),
# Use the default audio interface.
audio_interface=DefaultAudioInterface(),
# Callbacks that print the conversation to the console.
callback_agent_response=lambda response: print(f"Agent: {response}"),
callback_agent_response_correction=lambda original, corrected: print(f"Agent: {original} -> {corrected}"),
callback_user_transcript=lambda transcript: print(f"User: {transcript}"),
# Uncomment the below if you want to see latency measurements.
# callback_latency_measurement=lambda latency: print(f"Latency: {latency}ms"),
)
conversation.start_session()
signal.signal(signal.SIGINT, lambda sig, frame: conversation.end_session())

Integration der öffentlichen Talk-to-Seite

Die öffentliche Talk-to-Seite unterstützt dynamische Variablen über URL-Parameter. So können Sie Unterhaltungen personalisieren, wenn Sie Agenten-Links teilen. Das ist besonders nützlich, um personalisierte Agenten in Websites, E-Mails oder Marketingkampagnen einzubetten.

Methoden für URL-Parameter

Es gibt zwei Methoden, um dynamische Variablen an die öffentliche Talk-to-Seite zu übergeben:

Methode 1: Base64-kodiertes JSON

Übergeben Sie Variablen als Base64-kodiertes JSON-Objekt über den Parameter vars:

https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&vars=eyJ1c2VyX25hbWUiOiJKb2huIiwiYWNjb3VudF90eXBlIjoicHJlbWl1bSJ9

Der Parameter vars enthält Base64-kodiertes JSON:

{ "user_name": "John", "account_type": "premium" }

Methode 2: Einzelne Abfrageparameter

Übergeben Sie Variablen mit Abfrageparametern mit dem Präfix var_:

https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&var_user_name=John&var_account_type=premium

Parameterpriorität

Wenn beide Methoden gleichzeitig verwendet werden, haben einzelne var_-Parameter Vorrang vor den Base64-kodierten Variablen, um Konflikte zu vermeiden:

https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&vars=eyJ1c2VyX25hbWUiOiJKYW5lIn0=&var_user_name=John

In diesem Beispiel ist user_name "John" (aus var_user_name) statt "Jane" (aus dem Base64-kodierten vars).

Implementierungsbeispiele

// Method 1: Base64-encoded JSON
function generateTalkToURL(agentId, variables) {
const baseURL = 'https://elevenlabs.io/app/talk-to';
const encodedVars = btoa(JSON.stringify(variables));
return `${baseURL}?agent_id=${agentId}&vars=${encodedVars}`;
}
// Method 2: Individual parameters
function generateTalkToURLWithParams(agentId, variables) {
const baseURL = 'https://elevenlabs.io/app/talk-to';
const params = new URLSearchParams({ agent_id: agentId });
Object.entries(variables).forEach(([key, value]) => {
params.append(`var_${key}`, encodeURIComponent(value));
});
return `${baseURL}?${params.toString()}`;
}
// Usage
const variables = {
user_name: "John Doe",
account_type: "premium",
session_id: "sess_123"
};
const urlMethod1 = generateTalkToURL("agent_7101k5zvyjhmfg983brhmhkd98n6", variables);
const urlMethod2 = generateTalkToURLWithParams("agent_7101k5zvyjhmfg983brhmhkd98n6", variables);

Best Practices

Variablen im System-Prompt, in Workflow-Knoten und Prozeduren werden bei jeder Gesprächsrunde aufgelöst. Wenn sich ein Wert zwischen Gesprächsrunden ändert, kann der Prompt nicht zwischengespeichert werden. Das erhöht Kosten und Latenz. {{system__time_utc}} und {{system__time_second}} ändern sich bei jeder Gesprächsrunde; {{system__time}} und {{system__time_minute}} ändern sich jede Minute.

Um dem Agenten das aktuelle Datum und die aktuelle Uhrzeit bereitzustellen, legen Sie über die Zeitzonen-Schaltfläche im System-Prompt-Editor eine Zeitzone fest (conversation_config.agent.prompt.timezone), statt {{system__time}} oder {{system__time_utc}} in den Prompt-Text einzufügen. Wenn eine Zeitzone festgelegt ist, fügt die Plattform das aktuelle Datum und die aktuelle Uhrzeit außerhalb des zwischengespeicherten Prompt-Präfixes hinzu. So bleibt Ihr System-Prompt über Gesprächsrunden hinweg zwischengespeichert. Ohne Zeitzone erhält der Agent weder das aktuelle Datum noch die aktuelle Uhrzeit.

Wenn Ihr Prompt das Datum oder die Stunde inline benötigt, kombinieren Sie {{system__time_date}}, {{system__time_hour}} und {{system__timezone}} (zum Beispiel Today is {{system__time_date}}, hour {{system__time_hour}} ({{system__timezone}})). Diese ändern sich höchstens einmal pro Stunde.

Wenn ein Tool einen mit † markierten Wert benötigt, binden Sie ihn an den Tool-Parameter oder Header, statt ihn im Prompt zu platzieren. Tool-Parameter werden erst aufgelöst, wenn das Tool aufgerufen wird, und beeinflussen daher das Prompt-Caching nicht. Das LLM sieht die Unterhaltung bereits, daher wird {{system__conversation_history}} in Prompts nur selten benötigt.

Wenn Ihr Prompt Rundenzähler wie {{system__agent_turns}} prüft, erwägen Sie diese Alternativen. Verwenden Sie first_message für statische Begrüßungen oder Hinweise zu Beginn.

Für das Verhalten bei der ersten Antwort können Sie die Anweisung anhand des Unterhaltungsverlaufs formulieren (zum Beispiel “Bei Ihrer ersten Antwort, wenn Sie den Anrufer noch nicht begrüßt haben …”). Dies setzt voraus, dass das LLM der Anweisung folgt. Testen Sie es daher mit Ihrem Modell und behalten Sie den Rundenzähler bei, wenn die Ergebnisse weniger zuverlässig sind.

Wenn der Zähler nur entscheidet, wann verzweigt oder eskaliert werden soll, kann eine Bedingung für eine Workflow-Kantenexpression oder eine If-Schrittexpression in einer strukturierten Prozedur (z. B. system__agent_turns >= 5) dies außerhalb des Prompts übernehmen. Dies deckt keine Fälle ab, in denen das LLM den Wert selbst benötigt.

Stellen Sie Authentifizierungstokens und API-Schlüsseln secret__ voran, damit sie nur an Tool-Header gebunden und niemals an das LLM gesendet werden können. Da secret__-Werte in der Conversations API als <REDACTED> maskiert werden (Webhooks für Transkriptionen nach dem Anruf erhalten weiterhin die ursprünglichen Werte), übergeben Sie Werte, die Sie über die Conversations API wieder abrufen müssen, als reguläre dynamische Variablen. Alternativ können Sie eine nicht sensible Kennung übergeben und den sensiblen Wert in Ihrem eigenen System abrufen.

system__user_id wird vom Client für Tracking und Analysen bereitgestellt und nicht von ElevenAgents verifiziert. Überprüfen Sie die Identität des Anrufers über einen Webhook zur Initiierung von Unterhaltungen, ein signiertes Token in einer Header-Variable mit secret__ oder einen Verifizierungs-Tool-Aufruf, bevor Sie Kontodaten offenlegen.

Legen Sie für jede benutzerdefinierte Variable, die Sie in Ihren Prompts, ersten Nachrichten und Tools verwenden, Standardwerte in dynamic_variable_placeholders fest. Vorschauunterhaltungen im Dashboard und Simulationstests führen keine Webhooks zur Initiierung von Unterhaltungen aus. Nicht festgelegte Variablen bleiben daher beim Testen als wörtliche Platzhalter {{variable_name}} erhalten.

Fehlerbehebung

Überprüfen Sie Folgendes:

  • Variablennamen stimmen exakt überein (Groß- und Kleinschreibung beachten)
  • Variablen verwenden doppelte geschweifte Klammern: {{variable_name}}
  • Variablen sind in Ihrem dynamic_variables-Objekt enthalten

Stellen Sie Folgendes sicher:

  • Variablenwerte entsprechen dem erwarteten Typ
  • Werte sind ausschließlich Strings, Zahlen oder Boolesche Werte