> ## Documentation Index
> Fetch the complete documentation index at: https://docs.itellico.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Template-Syntax

> Jinja2-Template-Syntax für personalisierte Agent-Prompts mit dynamischen Daten

## Wie Variablen funktionieren

Variablen helfen dir dabei, den Prompt deines Agenten mit dynamischen Daten zu personalisieren. itellicoAI verwendet [Jinja2](https://jinja.palletsprojects.com/en/stable/templates/) für Templates - in der offiziellen Doku findest du die vollständige Sprachreferenz.

***

## Variablenquellen

### Eingebaute Kontaktvariablen

Wenn ein Kontakt in deinem itellicoAI-Account existiert, sind diese 5 Felder automatisch verfügbar:

```jinja wrap theme={null}
{{ contact.first_name }}
{{ contact.last_name }}
{{ contact.full_name }}
{{ contact.email }}
{{ contact.phone_number }}
```

**Beispiel:**

```jinja wrap theme={null}
Hello {{ contact.first_name }}!
Your email is {{ contact.email }}.
```

✅ Kein Setup nötig - funktioniert automatisch, wenn der Kontakt existiert

***

### Alles andere: Dynamic Context API

**Alle anderen Daten** müssen aus deiner Dynamic-Context-Verbindung stammen (von deinem Entwicklungsteam eingerichtet) und stehen dir als direkt nutzbare Variablen zur Verfügung. Siehe [Dynamic Context API](/de/build/advanced/dynamic-context).

Du kannst beliebige Felder zurückgeben. Zum Beispiel:

```jinja wrap theme={null}
{{ language }}
{{ account_tier }}
{{ company_name }}
{{ order_id }}
{{ customer_since }}
{{ any_field_you_need }}
```

**Beispiel - Deine API liefert:**

```json theme={null}
{
  "language": "de",
  "account_tier": "premium",
  "company_name": "Acme Corp"
}
```

**Dann kann dein Agent Folgendes verwenden:**

```jinja wrap theme={null}
{% if language == "de" %}
Guten Tag! Sie arbeiten für {{ company_name }}.
{% endif %}

{% if account_tier == "premium" %}
Priority support available.
{% endif %}
```

⚙️ Erfordert Setup - siehe [Dynamic Context API](/de/build/advanced/dynamic-context)

***

## Verfügbare Variablen

### Eingebaute Kontaktvariablen

Diese Variablen sind automatisch aus deinen itellicoAI-Kontakten verfügbar:

```jinja wrap theme={null}
{{ contact.first_name }}
{{ contact.last_name }}
{{ contact.full_name }}
{{ contact.email }}
{{ contact.phone_number }}
```

**Beispielverwendung:**

```text wrap theme={null}
You are speaking with {{ contact.first_name }} {{ contact.last_name }}.
Their email is {{ contact.email | default("not provided") }}.
Their phone number is {{ contact.phone_number }}.

```

<Note>
  **Custom fields** liegen NICHT unter `contact.` - das sind Variablen, die du direkt verwenden kannst, etwa `{{ language }}` oder `{{ account_tier }}`. Du musst sie über deine Dynamic-Context-Verbindung bereitstellen (von deinem Entwicklungsteam eingerichtet). Siehe [Dynamic Context API](/de/build/advanced/dynamic-context).
</Note>

### Dynamic-Context-Variablen

Alle benutzerdefinierten Daten, die du über deine Dynamic-Context-Verbindung bereitstellst (von deinem Entwicklungsteam eingerichtet), werden als direkt nutzbare Variablen verfügbar:

```jinja wrap theme={null}
{{ account_tier }}
{{ language }}
{{ company_name }}
{{ preferred_contact_method }}
```

**Beispiel mit benutzerdefinierten Variablen:**

```jinja wrap theme={null}
{% if account_tier == "premium" %}
As a premium customer, you have priority support.
{% endif %}

{% if language == "de" %}
Sprechen Sie Deutsch.
{% endif %}

Company: {{ company_name | default("valued customer") }}

```

<Tip>
  Richte eine Dynamic-Context-Verbindung ein (erfordert Developer-Setup), um benutzerdefinierte Variablen bereitzustellen. Alle JSON-Felder, die du zurückgibst, werden zu direkt nutzbaren Variablen (z. B. `{"language": "de"}` -> `{{ language }}`).
</Tip>

### Datum & Uhrzeit

Das aktuelle Datum und die Uhrzeit sind automatisch als `current_datetime` in **Begrüßungen und Prompts** verfügbar:

```jinja wrap theme={null}
{{ current_datetime }}                      # Aktueller Zeitstempel
{{ current_datetime.hour }}                 # Aktuelle Stunde (0-23)
{{ current_datetime | datetime("%H:%M") }}  # Mit datetime-Filter formatieren
{{ current_datetime | datetime("%A") }}     # Wochentag (Monday, Tuesday usw.)
```

**Beispielverwendung:**

```jinja wrap theme={null}
{% if current_datetime.hour < 12 %}
Good morning, {{ contact.first_name }}!
{% elif current_datetime.hour < 17 %}
Good afternoon, {{ contact.first_name }}!
{% else %}
Good evening, {{ contact.first_name }}!
{% endif %}
```

<Tip>
  Nutze `current_datetime` für fortgeschrittene zeitbasierte Logik wie Business-Hours-Routing, Tageszeit-Begrüßungen oder Scheduling-Constraints, ohne externe Datenquellen zu benötigen.
</Tip>

<Note>
  Nutze den `datetime`-Filter zur Formatierung. Direkte Datumsformatierungs-Methoden sind nicht verfügbar. Verwende stattdessen den oben gezeigten datetime-Filter.
</Note>

***

## Bedingte Logik

### If-Statement

```jinja wrap theme={null}
{% if condition %}
  This shows if condition is true
{% endif %}
```

### If-Else

```jinja wrap theme={null}
{% if account_tier == "VIP" %}
  Provide VIP service
{% else %}
  Provide standard service
{% endif %}
```

### If-Elif-Else

```jinja wrap theme={null}
{% if account_value > 10000 %}
  Enterprise tier customer
{% elif account_value > 1000 %}
  Professional tier customer
{% else %}
  Standard tier customer
{% endif %}
```

### Praxisbeispiel

```jinja wrap theme={null}
{% if language == "es" %}
Respond in Spanish. Use formal addressing (usted).
{% elif language == "fr" %}
Respond in French. Use formal addressing (vous).
{% elif language == "de" %}
Respond in German. Use formal addressing (Sie).
{% else %}
Respond in English. Use friendly, conversational tone.
{% endif %}
```

***

## Filter

Filter transformieren Variablenwerte.

### Häufige Filter

**default:** Fallback-Wert bereitstellen

```jinja wrap theme={null}
{{ contact.first_name | default("there") }}
```

**upper:** In Großbuchstaben umwandeln

```jinja wrap theme={null}
{{ contact.last_name | upper }}
```

**lower:** In Kleinbuchstaben umwandeln

```jinja wrap theme={null}
{{ contact.email | lower }}
```

**title:** Title Case

```jinja wrap theme={null}
{{ contact.first_name | title }}
```

**length:** Länge ermitteln

```jinja wrap theme={null}
{% if contact.phone_number | length > 10 %}
  International number detected
{% endif %}
```

**datetime:** Datetime-Objekte formatieren

```jinja wrap theme={null}
{{ current_datetime | datetime("%H:%M") }}         # 14:30
{{ current_datetime | datetime("%d.%m.%Y") }}      # 24.01.2025
{{ current_datetime | datetime("%A, %B %d") }}     # Monday, January 24
```

### Filter verketten

```jinja wrap theme={null}
{{ contact.first_name | default("Friend") | title }}
```

***

## Schleifen

Über Listen iterieren (fortgeschrittener Anwendungsfall):

```jinja wrap theme={null}
{% for item in list_variable %}
  Process {{ item }}
{% endfor %}
```

***

## Praktische Beispiele

### Beispiel 1: Personalisierte Begrüßung

```jinja wrap theme={null}
{% if contact.first_name %}
Hello {{ contact.first_name }}, great to hear from you!
{% else %}
Hello! Thanks for calling!
{% endif %}

{% if contact.email %}
I have your contact information on file, so I can send you a confirmation after our call.
{% endif %}
```

### Beispiel 2: Benutzerdefinierte Geschäftslogik (erfordert Dynamic Context API)

```jinja wrap theme={null}
{% if contact.first_name %}
Hello {{ contact.first_name }}, thanks for calling {{ company_name }}!
{% else %}
Hello! Thanks for calling {{ company_name }}!
{% endif %}

{% if account_tier == "premium" %}
As a premium customer, you have priority support. How can I help you today?
{% else %}
How can I help you today?
{% endif %}
```

<Note>
  Variablen wie `company_name` und `account_tier` müssen von deiner Dynamic-Context-Verbindung bereitgestellt werden (von deinem Entwicklungsteam eingerichtet). Siehe [Dynamic Context API](/de/build/advanced/dynamic-context).
</Note>

### Beispiel 3: Zeitbasierte Prompt-Logik

```jinja wrap theme={null}
Current time: {{ current_datetime | datetime("%H:%M") }}

{% if current_datetime.hour >= 17 or current_datetime.hour < 9 %}
Outside normal business hours. If customer needs immediate assistance:
"Our regular support hours are 9 AM to 5 PM. For urgent issues, I can take your information and have someone call you first thing in the morning, or you can reach our emergency line at [number]."
{% else %}
Within business hours. Full support available.
{% endif %}
```

### Beispiel 4: Mehrsprachige Unterstützung (erfordert Dynamic Context API)

```jinja wrap theme={null}
Customer's preferred language: {{ language | default("en") }}

{% if language == "es" %}
Language: Spanish
Greeting: "¡Hola!"
Tone: Formal (use "usted")
Knowledge collection: "FAQ Español"
{% elif language == "de" %}
Language: German
Greeting: "Guten Tag!"
Tone: Formal (use "Sie")
Knowledge collection: "FAQ Deutsch"
{% else %}
Language: English
Greeting: "Hello!"
Tone: Friendly and conversational
Knowledge collection: "FAQ English"
{% endif %}
```

### Beispiel 5: Account-Tier-Logik

```jinja wrap theme={null}
Account value: ${{ account_value | default(0) }}

{% if account_value >= 50000 %}
ENTERPRISE CUSTOMER
- Offer white-glove service
- Direct access to account manager
- Priority response times
- Custom solutions available
{% elif account_value >= 10000 %}
PROFESSIONAL CUSTOMER
- Premium support tier
- Dedicated support team
- Priority queue
{% else %}
STANDARD CUSTOMER
- Standard support
- Knowledge base first
- Transfer for complex issues
{% endif %}
```

***

## Variablen testen

### Mit verschiedenen Daten testen

1. Öffne das **Agent testen**-Menü des Agenten und wähle **Chat**, ein browserbasiertes Gespräch oder **Telefonanruf**
2. Teste Szenarien mit verschiedenen Kontaktdaten:
   * Mit Vorname und ohne
   * VIP- vs. Standardkunde
   * Verschiedene Sprachen
   * Verschiedene Zeitzonen

### Häufige Probleme

| Problem                      | Ursache                      | Lösung                                         |
| ---------------------------- | ---------------------------- | ---------------------------------------------- |
| Variable wird leer angezeigt | Kein Default angegeben       | `\| default("Fallback")` hinzufügen            |
| Syntaxfehler                 | Tippfehler im Variablennamen | Schreibweise gegen verfügbare Variablen prüfen |
| Bedingung funktioniert nicht | Falscher Vergleichsoperator  | `==` statt `=` verwenden                       |
| Filter wird nicht angewendet | Filter existiert nicht       | Filternamen-Schreibweise prüfen                |

***

## Best Practices

<AccordionGroup>
  <Accordion title="Immer Defaults verwenden" icon="shield">
    Nimm niemals an, dass eine Variable einen Wert hat. Verwende immer Defaults.

    ❌ **Schlecht:**

    ```jinja theme={null}
    Hello {{ contact.first_name }}!
    ```

    ✅ **Gut:**

    ```jinja theme={null}
    Hello {{ contact.first_name | default("there") }}!
    ```
  </Accordion>

  <Accordion title="Logik einfach halten" icon="lightbulb">
    Komplexe verschachtelte Bedingungen sind schwer zu debuggen. Halte es einfach.

    ❌ **Zu komplex:**

    ```jinja theme={null}
    {% if account_tier == "VIP" and account_value > 10000 and region == "US" %}
    ```

    ✅ **Einfacher:**

    ```jinja theme={null}
    {% if account_tier == "VIP" %}
    ```
  </Accordion>

  <Accordion title="Edge Cases testen" icon="vial">
    Teste mit:

    * Fehlenden Daten (alle Felder leer)
    * Unerwarteten Werten
    * Sehr langen Strings
    * Sonderzeichen
  </Accordion>
</AccordionGroup>

***

## Nächste Schritte

<CardGroup cols={2}>
  <Card title="Prompt-Leitfaden" icon="book" href="/de/build/conversation/prompt-engineering-guide">
    Variablen in vollständigen Beispielen in Aktion sehen
  </Card>

  <Card title="Agent testen" icon="vial" href="/de/test/web-simulator">
    Prüfen, ob deine Variablen korrekt funktionieren
  </Card>
</CardGroup>
