> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt.

# Zmienne dynamiczne

**Zmienne dynamiczne** pozwalają wstawiać wartości z czasu działania do wiadomości, promptów systemowych i narzędzi agenta. Dzięki temu możesz personalizować każdą rozmowę danymi użytkownika bez tworzenia wielu agentów.

## Omówienie

Zmienne dynamiczne można wykorzystać w wielu elementach agenta:

* **Promptach systemowych**, by dostosować zachowanie i kontekst
* **Pierwszych wiadomościach**, by personalizować powitania
* **Parametrach i nagłówkach narzędzi**, by przekazywać dane użytkownika

Oto kilka przykładów, gdy zmienne dynamiczne są przydatne:

* **Personalizowanie powitań** imionami użytkowników
* **Uwzględnianie danych konta** w odpowiedziach
* **Przekazywanie danych** do wywołań narzędzi
* **Dostosowywanie zachowania** zależnie od pakietu subskrypcji
* **Dostęp do informacji systemowych**, takich jak ID rozmowy czy czas trwania połączenia

Zmienne dynamiczne obsługują trzy typy wartości:

#### String

Wartości tekstowe

#### Number

Wartości liczbowe

#### Boolean

Wartości prawda/fałsz

## Systemowe zmienne dynamiczne

Twój agent ma dostęp do wbudowanych zmiennych `system__*` w każdej rozmowie bez konfiguracji w czasie działania. Zmienne te mają zarezerwowany prefiks przestrzeni nazw `system__` i aktualizują się automatycznie w trakcie rozmowy. Niestandardowe zmienne dynamiczne nie mogą używać prefiksu `system__` ani zastępować zmiennych systemowych.

Zmienne oznaczone † zmieniają się między turami. Umieszczenie ich w tekście promptu może uniemożliwić cache'owanie promptu; alternatywy znajdziesz w sekcji [Dobre praktyki](#best-practices).

### Tożsamość agenta i rozmowy

| Zmienna                    | Typ              | Opis                                                                                                                                              | Przykład                               |
| -------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| `system__agent_id`         | `string`         | Unikalny identyfikator agenta, który rozpoczął rozmowę. Nigdy nie zmienia się w trakcie rozmowy.                                                  | `"agent_8401kp8bt0jdf14rzzcv5veq94yg"` |
| `system__current_agent_id` | `string`         | Unikalny identyfikator obecnie aktywnego agenta. Aktualizuje się, gdy rozmowa zostanie przekazana innemu agentowi.                                | `"agent_8401kp8bt0jdf14rzzcv5veq94yg"` |
| `system__conversation_id`  | `string`         | Unikalny identyfikator rozmowy ElevenLabs.                                                                                                        | `"conv_1801kp8qtb2begztn7zyf446v4jk"`  |
| `system__user_id`          | `string \| null` | ID użytkownika podane przez klienta do śledzenia i analiz. Nie należy go uznawać za wiarygodne przy uwierzytelnianiu.                             | `"G6yhJW8MktQdhUquvXD1iKpPHql2"`       |
| `system__initiator_id`     | `string \| null` | Identyfikator odpowiadający metodzie uwierzytelniania użytej do rozpoczęcia rozmowy.                                                              | `"user_1801kp8qtb2begztn7zyf446v4jk"`  |
| `system__channel`          | `string`         | Kanał, przez który rozpoczęto rozmowę.                                                                                                            | `"slack_integration"`                  |
| `system__is_text_only`     | `boolean`        | `true`, gdy rozmowa działa w trybie tylko tekstowym (czat); `false` dla rozmów głosowych.                                                         | `true`                                 |
| `system__environment`      | `string`         | Środowisko, w którym działa rozmowa, używane do rozwiązywania [zmiennych środowiskowych](/docs/pl/eleven-agents/integrate/environment-variables). | `"production"`                         |

### Czas i strefa czasowa

| Zmienna                 | Typ              | Opis                                                                                                                                                 | Przykład                             |
| ----------------------- | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| `system__timezone`      | `string \| null` | Skonfigurowana strefa czasowa (`conversation_config.agent.prompt.timezone`) lub strefa IANA podana przez rozmówcę. Domyślnie UTC, gdy nie ustawiono. | `"America/New_York"`                 |
| `system__time` †        | `string`         | Bieżąca data i godzina w skonfigurowanej strefie czasowej (`%A, %H:%M %d %B %Y`). Ponownie wyliczana w każdej turze (zmienia się raz na minutę).     | `"Friday, 12:33 12 December 2025"`   |
| `system__time_utc` †    | `string`         | Bieżący znacznik czasu UTC w formacie ISO 8601. Ponownie wyliczany w każdej turze.                                                                   | `"2025-12-12T12:33:45.123456+00:00"` |
| `system__time_date`     | `string`         | Bieżąca data w skonfigurowanej strefie czasowej (lub UTC, jeśli nie ustawiono) (`%A, %d %B %Y`). Zmienia się raz dziennie.                           | `"Friday, 12 December 2025"`         |
| `system__time_hour`     | `integer`        | Bieżąca godzina (`0`–`23`) w skonfigurowanej strefie czasowej (lub UTC, jeśli nie ustawiono). Zmienia się najwyżej raz na godzinę.                   | `12`                                 |
| `system__time_minute` † | `integer`        | Bieżąca minuta (`0`–`59`) w skonfigurowanej strefie czasowej (lub UTC, jeśli nie ustawiono). Zmienia się raz na minutę.                              | `33`                                 |
| `system__time_second` † | `integer`        | Bieżąca sekunda (`0`–`59`) w skonfigurowanej strefie czasowej (lub UTC, jeśli nie ustawiono). Zmienia się w każdej turze.                            | `45`                                 |

### Telefonia i wiadomości

Te zmienne są wypełniane, gdy mają zastosowanie w kanałach telefonicznych i wiadomości:

| Zmienna                 | Typ              | Opis                                                           | Przykład                                 |
| ----------------------- | ---------------- | -------------------------------------------------------------- | ---------------------------------------- |
| `system__caller_id`     | `string \| null` | Numer telefonu dzwoniącego (głos/SMS/WhatsApp/Amazon Connect). | `"+14155552671"`                         |
| `system__called_number` | `string \| null` | Numer telefonu, na który wykonano połączenie.                  | `"+18005551234"`                         |
| `system__call_sid`      | `string \| null` | SID połączenia Twilio (tylko połączenia Twilio).               | `"CA3498076234a8bbf65c8f09fb8ad7ac1b"`   |
| `system__call_id`       | `string \| null` | Call-ID SIP (tylko połączenia przez trunk SIP).                | `"757f72cf-e80f-44f7-87d6-a961ffbf5b3d"` |

### Stan rozmowy na turę

| Zmienna                            | Typ       | Opis                                                                                                                                                                               | Przykład               |
| ---------------------------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `system__call_duration_secs` †     | `integer` | Czas rozmowy, który upłynął, w sekundach. Ponownie wyliczany w każdej turze.                                                                                                       | `142`                  |
| `system__agent_turns` †            | `integer` | Łączna liczba tur agenta w rozmowie do tej pory. Zwiększa się w każdej turze.                                                                                                      | `5`                    |
| `system__current_agent_turns` †    | `integer` | Liczba tur bieżącego agenta; resetuje się do `0` po przekazaniu agenta.                                                                                                            | `3`                    |
| `system__current_subagent_turns` † | `integer` | Liczba tur agenta w bieżącym węźle workflow; resetuje się do `0` przy przejściu do innego węzła.                                                                                   | `2`                    |
| `system__conversation_history` †   | `string`  | Transkrypcja rozmowy zserializowana w JSON do bieżącej tury (`{"entries": [{"role": "user", "message": "..."}]}`). Zobacz [Format historii rozmowy](#conversation-history-format). | `'{"entries": [...]}'` |

### Format historii rozmowy

Zmienna `system__conversation_history` zawiera obiekt JSON o następującej strukturze:

```json
{
  "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\"}" }]
    }
  ]
}
```

Każdy wpis zawiera `role` (`"user"`, `"agent"` lub `"tool"`) oraz jedno z poniższych:

* `message`: Treść tekstowa tury
* `tool_requests`: Tablica wywołań narzędzi wykonanych przez agenta wraz z rozstrzygniętymi wartościami parametrów
* `tool_results`: Tablica odpowiedzi narzędzi

Jeśli wynik narzędzia lub parametr zawiera zagnieżdżoną historię rozmowy, zostaje zastąpiony symbolem zastępczym (np. `[conversation_history (5 turns)]`), aby uniknąć nieograniczonego rekurencyjnego rozwijania.

Ta zmienna przydaje się do przekazywania kontekstu rozmowy do narzędzi (np. webhooków lub niestandardowych LLM-ów) albo do uwzględniania historii rozmowy w promptach podagentów podczas przekazywania rozmowy.

## Sekretne zmienne dynamiczne

Sekretne zmienne dynamiczne są wypełniane tak samo jak zwykłe zmienne dynamiczne, ale wskazują ElevenAgents, że powinny być używane wyłącznie w nagłówkach zmiennych dynamicznych i nigdy nie mogą być wysyłane do dostawcy LLM jako część promptu systemowego lub pierwszej wiadomości agenta.

Używaj sekretnych zmiennych dynamicznych do tokenów autoryzacji lub prywatnych ID, których nie należy wysyłać do LLM. Aby utworzyć sekretną zmienną dynamiczną, dodaj przed nią prefiks `secret__`.

> **Warning**
>
> Sekretne wartości są przechowywane po redakcji, więc API rozmów zwraca je jako `<REDACTED>`.
> Webhooki transkrypcji po połączeniu dostarczają oryginalne wartości, więc upewnij się, że endpoint webhooka
> obsługuje je jako sekrety. Nie używaj prefiksu `secret__` dla wartości, które musisz odczytać z powrotem z
> API rozmów. Przekaż je jako zwykłe zmienne dynamiczne albo przekaż niewrażliwy identyfikator i
> odszukaj wrażliwą wartość we własnym systemie.

## Aktualizowanie zmiennych dynamicznych z narzędzi

[Wywołania narzędzi](/docs/pl/eleven-agents/customization/tools) mogą tworzyć lub aktualizować zmienne dynamiczne, jeśli zwracają prawidłowy obiekt JSON. Aby określić, co należy wyodrębnić, ustaw ścieżki obiektów za pomocą notacji kropkowej. Jeśli pole lub ścieżka nie istnieje, nic nie zostanie zaktualizowane.

Przykład obiektu odpowiedzi i notacji kropkowej:

* Status odpowiada ścieżce: `response.status`
* E-mail pierwszego użytkownika w tablicy users odpowiada ścieżce: `response.users.0.email`

**`JSON`**

```JSON title="JSON"
{
  "response": {
    "status": 200,
    "message": "Successfully found 5 users",
    "users": [
      "user_1": {
        "user_name": "test_user_1",
        "email": "test_user_1@email.com"
      }
    ]
  }
}
```

Aby zaktualizować zmienną dynamiczną na e-mail pierwszego użytkownika, ustaw przypisanie w ten sposób.

![Parametry zapytania](/docs/_fern-img/95ff0cae8613eafa8bc4312e7cafa39ac0eab34d2fd2b21f0894a30775366110.webp)

Przypisania konfigurujesz w każdym narzędziu webhooka; zobacz [przypisania narzędzi](/docs/pl/eleven-agents/api-reference/tools/create#response.body.tool_config.SystemToolConfig.assignments) w dokumentacji API.

## Przewodnik

Wymagania wstępne:

* [Konto ElevenLabs](https://elevenlabs.io)
* Skonfigurowany agent ElevenAgents (aby go utworzyć, skorzystaj z [krótkiego przewodnika](/docs/pl/eleven-agents/quickstart))

#### Zdefiniuj zmienne dynamiczne w promptach

Dodaj zmienne, używając podwójnych nawiasów klamrowych `{{variable_name}}` w:

* Promptach systemowych
* Pierwszych wiadomościach
* Parametrach narzędzi

![Zmienne dynamiczne w wiadomościach](/docs/_fern-img/84a9870018a436215fe8d6563a47f42b1b45e005c56dffff3b37dbfe8a25adf3.webp)

![Zmienne dynamiczne w wiadomościach](/docs/_fern-img/052ab733ff3ecb2512218c70d82a4337764577b0082cdc4b2fb4415d273d2cbe.webp)

#### Zdefiniuj zmienne dynamiczne w narzędziach

Możesz też zdefiniować zmienne dynamiczne w konfiguracji narzędzia.
Aby utworzyć nową zmienną dynamiczną, ustaw typ wartości na Dynamic variable i kliknij przycisk `+`.

![Ustawianie symboli zastępczych](/docs/_fern-img/7da35479f409f1505dc528e78d782d74e226fa51b2a5d3b6ede3929359be8ddd.webp)

![Ustawianie symboli zastępczych](/docs/_fern-img/21856929c95fe77b274dc1a849668c144554719cd468a225d110295ae94c7713.webp)

#### Ustaw symbole zastępcze

Skonfiguruj wartości domyślne do testowania bez przekazywania zmiennych w czasie działania.

#### Aktualizacja w panelu

Ustaw wartości domyślne dla każdej zmiennej dynamicznej w panelu agenta.

![Ustawianie symboli zastępczych](/docs/_fern-img/dbea803919e315240202a3cb355ef7f62f25a5182d9aa99d0916177349c70ae4.webp)

#### Aktualizacja przez CLI

#### Pobierz konfigurację agenta

```bash
elevenlabs agents pull --agent "<agent-name>"
```

#### Edytuj \`agent_configs/\<agent-name>.json\`

Ustaw `conversation_config.agent.dynamic_variables.dynamic_variable_placeholders`. Każdy klucz to nazwa zmiennej, a wartość to symbol zastępczy używany podczas testów:

```json
{
  "conversation_config": {
    "agent": {
      "dynamic_variables": {
        "dynamic_variable_placeholders": {
          "user_name": "Angelo",
          "account_type": "premium"
        }
      }
    }
  }
}
```

#### Wyślij zmiany

```bash
elevenlabs agents push --agent "<agent-name>"
```

#### Aktualizacja przez API

```python
from elevenlabs import ElevenLabs

elevenlabs = ElevenLabs()

elevenlabs.conversational_ai.agents.update(
    agent_id="agent_7101k5zvyjhmfg983brhmhkd98n6",
    conversation_config={
        "agent": {
            "dynamic_variables": {
                "dynamic_variable_placeholders": {
                    "user_name": "Angelo",
                    "account_type": "premium",
                }
            }
        },
    },
)
```

```typescript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

const elevenlabs = new ElevenLabsClient();

await elevenlabs.conversationalAi.agents.update("agent_7101k5zvyjhmfg983brhmhkd98n6", {
  conversationConfig: {
    agent: {
      dynamicVariables: {
        dynamicVariablePlaceholders: {
          user_name: "Angelo",
          account_type: "premium",
        },
      },
    },
  },
});
```

#### Przekaż zmienne w czasie działania

Podczas rozpoczynania rozmowy podaj zmienne dynamiczne w swoim kodzie:

> **Tip**
>
> Upewnij się, że masz zainstalowane najnowsze [SDK](/docs/pl/eleven-agents/libraries/python).

**`Python`**

```python title="Python" focus={10-23} maxLines=25
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())
```

**`JavaScript`**

```javascript title="JavaScript" focus={7-20} maxLines=25
import { Conversation } from '@elevenlabs/client';

class VoiceAgent {
  ...

  async startConversation() {
    try {
        // Request microphone access
        await navigator.mediaDevices.getUserMedia({ audio: true });

        this.conversation = await Conversation.startSession({
            agentId: 'agent_7101k5zvyjhmfg983brhmhkd98n6',

            dynamicVariables: {
                user_name: 'Angelo'
            },

            ... add some callbacks here
        });
    } catch (error) {
        console.error('Failed to start conversation:', error);
        alert('Failed to start conversation. Please ensure microphone access is granted.');
    }
  }
}
```

**`Swift`**

```swift title="Swift"
let dynamicVars: [String: DynamicVariableValue] = [
  "customer_name": .string("John Doe"),
  "account_balance": .number(5000.50),
  "user_id": .int(12345),
  "is_premium": .boolean(true)
]

// Create session config with dynamic variables
let config = SessionConfig(
    agentId: "agent_7101k5zvyjhmfg983brhmhkd98n6",
    dynamicVariables: dynamicVars
)

// Start the conversation
let conversation = try await Conversation.startSession(
    config: config
)
```

**`Widget`**

```html title="Widget"
<elevenlabs-convai
  agent-id="agent_7101k5zvyjhmfg983brhmhkd98n6"
  dynamic-variables='{"user_name": "John", "account_type": "premium"}'
></elevenlabs-convai>
```

## Integracja z publiczną stroną rozmowy

Publiczna strona rozmowy obsługuje zmienne dynamiczne przez parametry URL, dzięki czemu możesz personalizować rozmowy podczas udostępniania linków do agentów. Jest to szczególnie przydatne przy osadzaniu spersonalizowanych agentów na stronach, w e-mailach lub kampaniach marketingowych.

### Metody parametrów URL

Istnieją dwie metody przekazywania zmiennych dynamicznych do publicznej strony rozmowy:

#### Metoda 1: JSON zakodowany w Base64

Przekaż zmienne jako obiekt JSON zakodowany w Base64 za pomocą parametru `vars`:

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

Parametr `vars` zawiera JSON zakodowany w Base64:

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

#### Metoda 2: Pojedyncze parametry zapytania

Przekaż zmienne za pomocą parametrów zapytania z prefiksem `var_`:

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

### Priorytet parametrów

Gdy obie metody są używane jednocześnie, pojedyncze parametry `var_` mają pierwszeństwo przed zmiennymi zakodowanymi w Base64, aby uniknąć konfliktów:

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

W tym przykładzie `user_name` będzie mieć wartość `"John"` (z `var_user_name`) zamiast `"Jane"` (z `vars` zakodowanego w Base64).

### Przykłady implementacji

#### Generowanie URL w JavaScript

```javascript
// 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);
```

#### Generowanie URL w Pythonie

```python
import base64
import json
from urllib.parse import urlencode, quote

def generate_talk_to_url(agent_id, variables):
    """Generate URL with base64-encoded variables"""
    base_url = "https://elevenlabs.io/app/talk-to"
    encoded_vars = base64.b64encode(json.dumps(variables).encode()).decode()
    return f"{base_url}?agent_id={agent_id}&vars={encoded_vars}"

def generate_talk_to_url_with_params(agent_id, variables):
    """Generate URL with individual var_ parameters"""
    base_url = "https://elevenlabs.io/app/talk-to"
    params = {"agent_id": agent_id}

    for key, value in variables.items():
        params[f"var_{key}"] = value

    return f"{base_url}?{urlencode(params)}"

# Usage
variables = {
    "user_name": "John Doe",
    "account_type": "premium",
    "session_id": "sess_123"
}

url_method1 = generate_talk_to_url("agent_7101k5zvyjhmfg983brhmhkd98n6", variables)
url_method2 = generate_talk_to_url_with_params("agent_7101k5zvyjhmfg983brhmhkd98n6", variables)
```

#### Ręczne tworzenie URL

```
# Base64-encoded method
1. Create JSON: {"user_name": "John", "account_type": "premium"}
2. Encode to base64: eyJ1c2VyX25hbWUiOiJKb2huIiwiYWNjb3VudF90eXBlIjoicHJlbWl1bSJ9
3. Add to URL: https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&vars=eyJ1c2VyX25hbWUiOiJKb2huIiwiYWNjb3VudF90eXBlIjoicHJlbWl1bSJ9

# Individual parameters method
1. Add each variable with var_ prefix
2. URL encode values if needed
3. Final URL: https://elevenlabs.io/app/talk-to?agent_id=agent_7101k5zvyjhmfg983brhmhkd98n6&var_user_name=John&var_account_type=premium
```

## Dobre praktyki

#### Ustaw strefę czasową zamiast umieszczać bieżący czas w promptach

Zmienne w prompcie systemowym, węzłach [workflow](/docs/pl/eleven-agents/customization/agent-workflows) i [procedurach](/docs/pl/eleven-agents/customization/procedures) są rozwiązywane w każdej turze. Jeśli wartość zmienia się między turami, prompt nie może być cache'owany, co zwiększa koszt i opóźnienie. `{{system__time_utc}}` i `{{system__time_second}}` zmieniają się w każdej turze; `{{system__time}}` i `{{system__time_minute}}` zmieniają się co minutę.

Aby podać agentowi bieżącą datę i godzinę, ustaw strefę czasową przyciskiem strefy czasowej w edytorze System Prompt (`conversation_config.agent.prompt.timezone`) zamiast umieszczać `{{system__time}}` lub `{{system__time_utc}}` w tekście promptu. Po ustawieniu strefy czasowej platforma dodaje bieżącą datę i godzinę poza cache'owanym prefiksem promptu, więc prompt systemowy pozostaje cache'owany między turami. Bez strefy czasowej agent nie otrzyma bieżącej daty i godziny.

Jeśli prompt wymaga daty lub godziny w tekście, połącz `{{system__time_date}}`, `{{system__time_hour}}` i `{{system__timezone}}` (na przykład `Today is {{system__time_date}}, hour {{system__time_hour}} ({{system__timezone}})`). Zmieniają się one najwyżej raz na godzinę.

#### Powiąż zmienne stanu na żywo z parametrami i nagłówkami narzędzi

Jeśli narzędzie potrzebuje wartości oznaczonej †, powiąż ją z parametrem lub nagłówkiem narzędzia zamiast umieszczać ją w prompcie. Parametry narzędzia są rozwiązywane tylko podczas wywołania narzędzia, więc nie wpływają na cache'owanie promptu. LLM widzi już rozmowę, dlatego `{{system__conversation_history}}` rzadko jest potrzebne w promptach.

#### Rozważ alternatywy dla liczników tur w promptach

Jeśli prompt sprawdza liczniki tur, takie jak `{{system__agent_turns}}`, rozważ poniższe alternatywy. Używaj `first_message` do statycznych powitań lub informacji na początku.

W przypadku zachowania przy pierwszej odpowiedzi możesz sformułować instrukcję wokół historii rozmowy (na przykład *"On your first reply, when you have not yet greeted the caller..."*). Polega to na tym, że LLM wykona instrukcję, więc przetestuj to z wybranym modelem i zachowaj licznik tur, jeśli wyniki są mniej niezawodne.

Jeśli licznik decyduje tylko o tym, kiedy rozgałęzić lub eskalować, [warunek wyrażenia krawędzi workflow](/docs/pl/eleven-agents/customization/agent-workflows#edges-and-flow-control) albo krok [wyrażenia If w procedurze strukturalnej](/docs/pl/eleven-agents/customization/procedures/structured-procedures#if-else-if-and-else) (np. `system__agent_turns >= 5`) może obsłużyć to poza promptem. Nie dotyczy to przypadków, w których LLM potrzebuje samej wartości.

#### Używaj secret\_\_ tylko dla wartości, które pozostają w nagłówkach narzędzi

Dodaj prefiks `secret__` do tokenów autoryzacji i kluczy API, aby można było powiązać je tylko z nagłówkami narzędzi i nigdy nie były wysyłane do LLM. Ponieważ wartości `secret__` są redagowane jako `<REDACTED>` w API rozmów (webhooki transkrypcji po połączeniu nadal otrzymują oryginalne wartości), przekazuj wartości, które musisz odczytać z API rozmów, jako zwykłe zmienne dynamiczne albo przekaż niewrażliwy identyfikator i odszukaj wrażliwą wartość we własnym systemie.

#### Nie polegaj na system\_\_user_id przy uwierzytelnianiu

`system__user_id` jest przekazywane przez klienta do śledzenia i analiz oraz nie jest weryfikowane przez ElevenAgents. Zweryfikuj tożsamość rozmówcy przez [webhook rozpoczęcia rozmowy](/docs/pl/eleven-agents/customization/personalization#conversation-initiation-webhooks), podpisany token w zmiennej nagłówka `secret__` albo wywołanie narzędzia weryfikacyjnego, zanim ujawnisz dane konta.

#### Skonfiguruj symbole zastępcze do testów i podglądów

Ustaw wartości domyślne w `dynamic_variable_placeholders` dla każdej niestandardowej zmiennej użytej w promptach, pierwszych wiadomościach i narzędziach. Podglądy rozmów w panelu i [testy symulacyjne](/docs/pl/eleven-agents/customization/agent-testing) nie uruchamiają webhooków rozpoczęcia rozmowy, więc nieustawione zmienne podczas testów pozostają dosłownymi symbolami zastępczymi `{{variable_name}}`.

## Rozwiązywanie problemów

#### Zmienne nie są zastępowane

Sprawdź, czy:

* Nazwy zmiennych są identyczne (wielkość liter ma znaczenie)
* Zmienne używają podwójnych nawiasów klamrowych: `{{variable_name}}`
* Zmienne są uwzględnione w obiekcie `dynamic_variables`

#### Błędy typu

Upewnij się, że:

* Wartości zmiennych mają oczekiwany typ
* Wartości to wyłącznie ciągi znaków, liczby lub wartości logiczne