---
title: "Kroki agenta i przekazywanie rozmów"
description: "Podziel agenta na kroki z własnymi instrukcjami, narzędziami i zebranymi wartościami oraz przekazuj połączenia między agentami w trakcie rozmowy."
---

Pojedynczy prompt przekazuje modelowi całe zadanie naraz. **Kroki** przekazują mu po jednej fazie rozmowy: każdy krok ma własne instrukcje, własne narzędzia, opcjonalną kwestię wypowiadaną słowo w słowo oraz wartości, które musi zebrać przed przejściem dalej. **Przekazania** pozwalają innemu agentowi w organizacji przejąć rozmowę w jej trakcie, z zachowaniem transkrypcji, dzięki czemu rozmówca nie musi się powtarzać.

Każdy agent zaczyna jako pojedynczy prompt. Nic się w nim nie zmienia, dopóki nie dodasz kroków lub przekazań.

## Kroki czy pojedynczy prompt?

| Użyj kroków, gdy | Zachowaj pojedynczy prompt, gdy |
| --- | --- |
| Rozmowa ma fazy, które muszą wystąpić w określonej kolejności: najpierw weryfikacja, potem rezerwacja. | Rozmowa jest otwarta: FAQ, recepcja, ogólne wsparcie. |
| Wartość musi zostać zebrana, zanim agent przejdzie dalej. | Nic nie musi zostać zebrane w ustalonej kolejności. |
| Reguła nigdy nie może zostać nagięta, na przykład „rozmówcy poniżej 18 roku życia są kierowani do opiekuna”. | Ocena modelu jest wystarczająco dobra dla każdego wariantu. |
| Wyszukiwanie musi zostać wykonane w określonym momencie rozmowy. | Narzędzia można wywołać zawsze, gdy rozmówca o to poprosi. |
| Część rozmowy należy do innego agenta, z własnym promptem i głosem. | Jedna persona obsługuje wszystko. |

Kroki nie są skryptowym drzewem telefonicznym. W ramach kroku model prowadzi
rozmowę tak samo jak przy pojedynczym prompcie. Krok określa, nad czym model
pracuje, jakich narzędzi może używać oraz czego potrzebuje, zanim będzie mógł go opuścić.

## Jak zbudowany jest agent z krokami

Gdy agent ma kroki, jego `prompt` zawiera **wspólne instrukcje**: personę i
reguły obowiązujące w każdym kroku. Każdy krok dodaje do nich własne
instrukcje. W każdej turze model widzi wspólne instrukcje, nazwę i instrukcje
bieżącego kroku oraz wartości zebrane do tej pory.

W kreatorze przełącz agenta z **Pojedynczy prompt** na **Kroki**. Otrzymasz
kartę dla każdego kroku z jego nazwą, instrukcjami, kwestią, narzędziami,
zebranymi wartościami i przejściami, selektor przekazań oraz graf przepływu
kroków tylko do odczytu. Przełączenie z powrotem na pojedynczy prompt oferuje
spłaszczony prompt, który łączy wspólne instrukcje i wszystkie kroki.

W interfejsie API `steps` i `handoffs` są polami
[agenta](/api-reference/agents). Tak jak każde pole agenta, żądanie `PATCH`
umieszcza je w wersji roboczej; `POST /v1/agents/{agent_id}/deploy` publikuje
je. Wysłanie `"steps": null` przełącza agenta z powrotem na pojedynczy prompt.
Połączenia testowe i **Rozmowa** działają na wersji roboczej.

<Tip>
  [Copilot](/pl/guides/ask-the-copilot) może utworzyć kroki na podstawie opisu
  („dodaj krok, który weryfikuje datę urodzenia przed rezerwacją”) i edytować jeden krok
  bez modyfikowania pozostałych.
</Tip>

### Pola kroku

| Pole | Znaczenie |
| --- | --- |
| `id` | Wymagane. Małe litery, cyfry i podkreślenia, zaczynające się od litery, maksymalnie 40 znaków. Unikalne w obrębie agenta. |
| `name` | Wymagana nazwa wyświetlana, od 1 do 80 znaków. |
| `instructions` | Wymagane, maksymalnie 20 000 znaków. Obsługuje [zmienne połączenia](/pl/guides/call-variables) `{{var}}`, tak jak `prompt`. |
| `say` | Opcjonalna kwestia wypowiadana słowo w słowo po wejściu do kroku, maksymalnie 1 000 znaków. Obsługuje `{{var}}`. |
| `tools` | `null` udostępnia krokowi każde narzędzie dołączone do agenta. Lista ogranicza krok do wskazanych narzędzi według nazwy. Wbudowane działania, takie jak `end_call` i `transfer_call`, stosują ustawienia agenta w każdym kroku. |
| `collect` | Maksymalnie 20 wartości zbieranych przez krok. Każda ma `name`, `type`, `description` i `required` (domyślnie `true`). |
| `on_enter_tool` | Opcjonalna nazwa narzędzia, wywoływanego automatycznie po wejściu do kroku. Zobacz [Kroki webhooka](#webhook-steps). |
| `transitions` | Uporządkowana lista miejsc, do których krok może przejść dalej. Zobacz [Przejścia](#transitions). |
| `global_when` | Opcjonalne. Umożliwia osiągnięcie kroku z dowolnego kroku. Zobacz [Kroki globalne](#global-steps). |
| `voice` | Opcjonalny identyfikator głosu dla tego kroku. Ignorowany, gdy agent używa niestandardowej konfiguracji głosu. |

Sam graf ma postać `{"start_step": "<step id>", "steps": [...]}`. Rozmowa
rozpoczyna się w `start_step`.

## Przejścia

Każde przejście ma `to`, identyfikator kroku, oraz dokładnie jedno z poniższych:

- **`when`**: opis prostym językiem, a **model podejmuje decyzję**. Agent otrzymuje
  wbudowane narzędzie `go_to_step` z listą kroków, do których może przejść, przy czym każde
  `when` stanowi powód jego wyboru.
- **`condition`**: regułę dotyczącą zebranych wartości, a **kod podejmuje decyzję**. Model
  nie może go pominąć ani obejść rozmową.
- **`"always": true`**: przejdź dalej bez sprawdzania. Kod podejmuje decyzję jako pierwszy: gdy tylko
  krok zostanie otwarty lub po zebraniu jego wymaganych wartości, pierwsze
  pasujące przejście `condition` albo `always` zostaje wybrane, zanim model może wybrać
  `when`. Dlatego umieść `always` po warunkach jako opcję zapasową albo użyj go samodzielnie,
  aby połączyć krok bezpośrednio z następnym. Krok z `always` nigdy
  nie czeka na wybór `when`.

`condition` ma postać `{"value": <collected name or dotted path>, "op": <op>, "target": <literal>}`:

| `op` | Prawda, gdy wartość |
| --- | --- |
| `eq`, `ne` | jest równa albo nie jest równa `target` |
| `lt`, `lte`, `gt`, `gte` | jest mniejsza niż, nie większa niż, większa niż albo co najmniej równa `target` |
| `in`, `not_in` | jest albo nie jest jedną z wartości na liście `target` |
| `exists`, `missing` | została albo nie została zebrana (bez `target`) |

`eq`, `ne`, `in` i `not_in` porównują tekst bez rozróżniania wielkości liter, po usunięciu
spacji. Liczby są porównywane jako liczby, a daty jako ciągi `YYYY-MM-DD`. Wartość,
która nigdy nie została zebrana, powoduje, że każdy op zwraca fałsz z wyjątkiem `missing`.

Zapisuj `when` i `global_when` jako warunek, na przykład „Rozmówca chce
umówić wizytę”, a nie jako coś do powiedzenia. Agent widzi je jako wewnętrzne
notatki routingu i otrzymuje instrukcję, aby nigdy ich nie odczytywać ani nie wspominać, że
zmienia kroki.

Gdy model wywołuje `go_to_step`:

1. Każda wartość `required` w kroku musi być obecna. Jeśli którejś brakuje,
   model otrzymuje informację, której, i pyta o nią rozmówcę.
2. Wartości są zapisywane.
3. Przejścia `condition` i `always` są sprawdzane po kolei. Pierwsze pasujące
   zostaje wybrane.
4. W przeciwnym razie agent przechodzi do kroku wybranego przez model.
5. Jeśli nic nie pasuje, a model nie wskazał kroku, agent pozostaje w bieżącym miejscu.

Przejście do [kroku globalnego](#global-steps) jest wyjątkiem: rozmówca zmienił
temat, więc następuje ono nawet wtedy, gdy w bieżącym kroku nadal brakuje wymaganych wartości,
oraz przed sprawdzeniem warunków tego kroku.

Przejścia `condition` i `always` są również sprawdzane za każdym razem, gdy krok jest
otwierany, więc sekwencja kroków, o których decyduje kod, jest wykonywana za jednym razem. Łańcuch kończy się:

- na kroku, który został już odwiedzony w tym przebiegu;
- po 8 przejściach;
- na kroku, w którym nadal trzeba zebrać wymagane wartości, chyba że krok ma
  `on_enter_tool` (krok webhooka zawsze kieruje na podstawie swojego wyniku).

Wypowiadana jest tylko linia `say` kroku, na którym kończy się łańcuch.

Krok bez przejść jest **końcowy**. Agent kończy w nim działanie i kończy
lub przekazuje połączenie przy użyciu swoich standardowych wbudowanych działań.

## Zbieranie wartości

Wymień w `collect`, czego potrzebuje krok. Model przekazuje wartości podczas wywołania
`go_to_step`, a one pozostają dostępne przez resztę połączenia.

| `type` | Przechowuje |
| --- | --- |
| `string` | Dowolny tekst |
| `number` | Liczbę |
| `boolean` | `true` albo `false` |
| `date` | Datę jako `YYYY-MM-DD` |

Zebrane wartości są treścią połączenia. Pojawiają się przy transkrypcji
połączenia i podlegają tym samym zasadom przechowywania, usuwania i anonimizacji. Gdy
nagrywanie połączeń agenta jest wyłączone, zebrane wartości nie są ani zapisywane,
ani wysyłane w webhookach; oś czasu kroków nadal jest dostępna. Zobacz
[Gdzie zobaczyć to w połączeniu](#where-to-see-it-on-a-call).

## Wypowiadane kwestie

`say` jest wypowiadane dokładnie tak, jak zostało zapisane, gdy agent przechodzi do kroku. Model następnie kontynuuje w nowym kroku w tej samej odpowiedzi, wiedząc, że kwestia została właśnie wypowiedziana, więc jej nie powtarza. Używaj `say` do powitań, wymaganych informacji i stałego brzmienia, a resztę odpowiedzi pozostaw modelowi.

`say` kroku początkowego to otwierająca kwestia agenta, gdy mówi on jako pierwszy, po ewentualnym komunikacie o zgodzie. Gdy rozmówca mówi jako pierwszy, otwiera ono pierwszą odpowiedź agenta dla osoby, nigdy dla IVR ani powitania poczty głosowej.

`say` kroku nie jest wypowiadane ponownie, gdy połączenie wraca do niego przez `__previous__` lub przekazanie z powrotem. Zapisz je tak, jak powinno brzmieć: przeliteruj wszystko, co głos może błędnie odczytać. Wypowiadane kwestie obsługują zmienne połączenia `{{var}}`, ale nie zebrane wartości.

## Kroki webhooków

Ustaw `on_enter_tool` na jedno z narzędzi agenta, a uruchomi się ono natychmiast po wejściu do kroku, bez oczekiwania na model. Jego argumentami są zebrane wartości, których nazwy odpowiadają nazwom parametrów narzędzia. Wynik jest przechowywany jako zebrana wartość o nazwie `<tool>_result`, skrócona do 4 KB, a przejścia `condition` i `always` kroku są sprawdzane od razu, dzięki czemu wyszukiwanie może samodzielnie skierować połączenie na podstawie własnego wyniku.

Przechowywana wartość ma dwa pola:

| Pole | Zawiera |
| --- | --- |
| `status` | Kod stanu HTTP zwrócony przez punkt końcowy. |
| `response` | Treść odpowiedzi. |

Kieruj na podstawie pola treści za pomocą `lookup_account_result.response.<field>`, a na podstawie kodu stanu za pomocą `lookup_account_result.status`.

Wyszukiwanie działa maksymalnie przez 8 sekund lub przez krótszy limit czasu własnego narzędzia. Jeśli trwa dłużej niż 3 sekundy, agent wypowiada krótką kwestię, aby rozmówca nie pozostawał w ciszy. Jeśli punkt końcowy zwróci stan 400 lub wyższy albo nie odpowie na czas, agent informuje rozmówcę, że nie może teraz tego sprawdzić, i kontynuuje to, co może zrobić.

## Kroki globalne

Krok z `global_when` można osiągnąć z dowolnego kroku, gdy opisany warunek jest spełniony. Model decyduje o tym, podobnie jak w przypadku `when`. Używaj tego dla tematów, które rozmówca może poruszyć w dowolnym momencie: pytań dotyczących rozliczeń, prośby o człowieka, skargi.

Przejście z `"to": "__previous__"` w kroku globalnym zwraca połączenie do kroku, który był aktywny wcześniej, dzięki czemu rozmówca kontynuuje od miejsca, w którym przerwał. Krok jest wznawiany: jego `on_enter_tool` nie uruchamia się ponownie, jego `say` nie jest powtarzane, a agent kontynuuje go bez rozpoczynania od nowa.

## Przekazania

`handoffs` zawiera listę innych agentów w Twojej organizacji, którzy mogą przejąć połączenie:

```json
[{"agent_id": 413, "when": "The caller asks about billing or a refund"}]
```

Agent otrzymuje wbudowane narzędzie `hand_off` z tymi agentami i powodami. Podobnie jak w przypadku przejść, każde `when` jest wewnętrzną notatką dotyczącą routingu i nigdy nie jest odczytywane na głos.

Gdy przekazuje połączenie, agent wypowiada jednym krótkim zdaniem, dokąd trafia rozmówca, na przykład „Oczywiście, przełączę Cię do naszego zespołu rozliczeń”, własnym głosem. Następnie prompt, kroki, narzędzia i głos agenta docelowego przejmują połączenie, które jest kontynuowane z tym samym transkryptem. Nowy agent krótko się przedstawia i odpowiada na ostatnią prośbę rozmówcy; nie informuje o przekazaniu połączenia. Od tego momentu dostępna jest baza wiedzy agenta docelowego.

Gdy połączenie po raz pierwszy trafia do agenta, rozpoczyna się w `start_step` tego agenta: uruchamiane jest `on_enter_tool` kroku, a jego `say` jest wypowiadane. Gdy połączenie zostanie przekazane z powrotem do agenta, którego już odwiedziło, agent wznawia krok, na którym się znajdował, bez uruchamiania `on_enter_tool`, ponownego wypowiadania swojego `say` ani ponownego przedstawiania się. Zebrane wartości są współdzielone przez wszystkich agentów w połączeniu.

- Agent docelowy musi należeć do tej samej organizacji, a agent nie może przekazać połączenia samemu sobie.
- Wszystko na poziomie połączenia pozostaje przy agencie, który odebrał: produkt, języki, kto mówi pierwszy, poczta głosowa, komunikat o zgodzie i każde inne ustawienie połączenia.
- Agenci docelowi mogą przekazywać połączenie dalej, również z powrotem. Jedno połączenie może trafić maksymalnie do 8 agentów.
- Połączenie testowe uruchamia wersję roboczą testowanego agenta. Agenci, do których przekazuje on połączenie, uruchamiają swoje wdrożone wersje.
- Jeśli dwóch agentów ma narzędzie o tej samej nazwie, ale różnych definicjach, dla połączenia zachowywane jest tylko jedno, a narzędzie agenta odbierającego zawsze ma pierwszeństwo. Kreator ostrzega o tym podczas zapisywania.
- Agent może mieć przekazania bez kroków. Cały jego prompt jest używany bez zmian.

`go_to_step` i `hand_off` są zarezerwowane dla agentów z krokami lub przekazaniami, dlatego własne narzędzia nie mogą używać tych nazw.

## Gdzie zobaczyć to w połączeniu

Otwórz połączenie w **Historii połączeń**. Oś czasu kroków obok transkryptu pokazuje każdy krok, do którego trafiło połączenie, oraz powód, a razem z nią wyświetlane są zebrane wartości.

[Obiekt połączenia](/api-reference/calls#retrieve-a-call) i webhook ukończenia połączenia ([`telephony.complete` / `web.complete`](/pl/webhooks/call-complete)) zawierają te same dane jako `steps_trace` i `collected_values`. Oba są nieobecne w połączeniach bez kroków.

```json
"steps_trace": [
  {"t_ms": 0, "agent": "a412", "step": "greet", "via": "start"},
  {"t_ms": 51230, "agent": "a412", "step": "verify", "via": "model"},
  {"t_ms": 98410, "agent": "a412", "step": "minor", "via": "condition"}
],
"collected_values": {"full_name": "Dana Reyes", "dob": "2010-04-02", "age": 15}
```

`agent` to `a`, po którym występuje identyfikator agenta. `via` wskazuje, co przeniosło połączenie:

| `via` | Znaczenie |
| --- | --- |
| `start` | Połączenie rozpoczęło się w tym kroku. |
| `model` | Model wybrał krok za pomocą `go_to_step`, `when` lub `global_when`. |
| `condition` | Dopasowano przejście `condition` lub `always`. |
| `on_enter` | Dopasowano przejście na podstawie wyniku kroku webhooka. |
| `handoff` | Inny agent przejął połączenie. |

## Gdzie działają kroki

Kroki działają natywnie w **Spark**, **Bolt** i każdym produkcie **Storm**, dla połączeń przychodzących, wychodzących i kampanii, połączeń testowych oraz połączeń internetowych i widżetów.

Wszędzie indziej agent nadal działa, tylko bez struktury: uruchamia spłaszczony prompt, który kolejno łączy wspólne instrukcje i każdy krok. Obejmuje to:

- eksperymentalne produkty Bolt;
- sesje [Realtime](/pl/guides/use-with-openai-realtime), w tym sesje dla zapisanego agenta;
- konfiguracje inline zwracane przez webhook [dynamicznej konfiguracji połączenia](/pl/guides/dynamic-call-config). Webhook zwracający `agent_id` używa kroków tego agenta.

## Limity

| Limit | Wartość |
| --- | --- |
| Kroki na agenta | 100 |
| Zebrane wartości na krok | 20 |
| Cele przekazania na agenta | 8 |
| Agenci osiągalni w jednym połączeniu | 8 |
| Rozmiar JSON `steps` | 200 KB |
| `instructions` kroku | 20 000 znaków |
| Linia `say` | 1 000 znaków |
| Zapisany wynik `on_enter_tool` | 4 KB |

Zapis naruszający regułę zwraca `400` ze ścieżką nieprawidłowego pola, na
przykład `steps.steps[2].transitions[0].to`. Nazwy narzędzi w `tools` i
`on_enter_tool` muszą być narzędziami dołączonymi do agenta.

Języki przypisane do poszczególnych kroków, skryptowe kroki pomijające model
oraz zebrane wartości wewnątrz linii say nie są obsługiwane.

## Importowani agenci

[Importowanie](/pl/guides/import-agents) z Retell, Bland, Vapi lub ElevenLabs
przenosi agentów z wieloma promptami, przepływy, ścieżki i procesy jako kroki,
a zespoły i transfery agentów jako przekazania między zaimportowanymi agentami.
Strona przeglądu pokazuje oba elementy przed importem.

## Przykład: rejestracja pacjenta dentystycznego

Trzy kroki w kolejności: powitanie, zebranie danych pacjenta, rezerwacja.

```json
{
  "prompt": "You are Ava, the front desk assistant at Acme Dental. Be warm and brief. Ask one question at a time.",
  "steps": {
    "start_step": "greet",
    "steps": [
      {
        "id": "greet",
        "name": "Greeting",
        "instructions": "Greet the caller and ask how you can help.",
        "say": "Thanks for calling Acme Dental, this is Ava. How can I help you today?",
        "tools": null,
        "collect": [],
        "transitions": [
          {"to": "details", "when": "The caller wants to book an appointment"}
        ]
      },
      {
        "id": "details",
        "name": "Patient details",
        "instructions": "Ask for the caller's full name, date of birth and the reason for the visit. Read the date of birth back and ask the caller to confirm it.",
        "tools": null,
        "collect": [
          {"name": "full_name", "type": "string", "description": "Caller's full name", "required": true},
          {"name": "dob", "type": "date", "description": "Date of birth", "required": true},
          {"name": "reason", "type": "string", "description": "Reason for the visit", "required": true},
          {"name": "new_patient", "type": "boolean", "description": "First visit to the practice", "required": false}
        ],
        "transitions": [
          {"to": "book", "when": "The caller has confirmed their details"}
        ]
      },
      {
        "id": "book",
        "name": "Book",
        "instructions": "Offer the two earliest open slots from book_slot and book the one the caller picks. Confirm the date and time, then say goodbye and end the call.",
        "tools": ["book_slot"],
        "collect": [],
        "transitions": []
      }
    ]
  }
}
```

Przygotuj je za pomocą `PATCH /v1/agents/{agent_id}`, przetestuj w **Rozmowie**, a następnie wdroż.
Krok `details` nie może przekazać do rezerwacji, dopóki nie zostaną zebrane imię i nazwisko, data urodzenia
oraz powód wizyty; `new_patient` jest opcjonalne.

## Przykład: gałąź z ograniczeniem wiekowym

Model może rozmawiać z każdym, ale kod decyduje, kto otrzyma rezerwację. Zbierz
wiek, a następnie przekieruj na jego podstawie, zanim zostanie uwzględniony własny wybór modelu.

```json
{
  "id": "verify",
  "name": "Verify age",
  "instructions": "Ask for the caller's age.",
  "tools": null,
  "collect": [
    {"name": "age", "type": "number", "description": "Caller's age in years", "required": true}
  ],
  "transitions": [
    {"to": "guardian", "condition": {"value": "age", "op": "lt", "target": 18}},
    {"to": "book", "when": "The caller has given their age"}
  ]
}
```

Rozmówca, który powie piętnaście, trafia do `guardian`, niezależnie od decyzji modelu.
Wszyscy pozostali trafiają do `book`. Oba są zwykłymi krokami w innym miejscu grafu.

## Przykład: krok webhooka wyszukiwania konta

Rozmówca podaje numer konta, wyszukiwanie uruchamia się po wejściu do następnego kroku,
a jego wynik wybiera trasę. Kroki `not_found`, `collections` i `support`
pominięto dla zwięzłości.

```json
[
  {
    "id": "identify",
    "name": "Identify",
    "instructions": "Ask for the caller's account number and read it back digit by digit.",
    "tools": null,
    "collect": [
      {"name": "account_number", "type": "string", "description": "Account number", "required": true}
    ],
    "transitions": [
      {"to": "lookup", "when": "The caller has confirmed their account number"}
    ]
  },
  {
    "id": "lookup",
    "name": "Look up account",
    "instructions": "Tell the caller what you found on their account and ask how you can help.",
    "tools": ["lookup_account"],
    "collect": [],
    "on_enter_tool": "lookup_account",
    "transitions": [
      {"to": "not_found", "condition": {"value": "lookup_account_result.response.found", "op": "eq", "target": false}},
      {"to": "collections", "condition": {"value": "lookup_account_result.response.account_status", "op": "in", "target": ["past_due", "suspended"]}},
      {"to": "support", "when": "The caller needs help with an active account"}
    ]
  }
]
```

`lookup_account` otrzymuje `account_number`, ponieważ jego parametr ma taką
nazwę. Jeśli treść odpowiedzi zawiera `"found": false`, połączenie przechodzi do
`not_found`. Jeśli `account_status` ma wartość `past_due` lub `suspended`, przechodzi do
`collections`. Aktywne konto pozostaje w `lookup`, gdzie model pomaga, a następnie
przechodzi do `support`. Aby wysłać nieudane wyszukiwanie do osobnego kroku, najpierw dodaj
warunki dotyczące statusu: odpowiedź z błędem zapisuje kod statusu, więc
`{"value": "lookup_account_result.status", "op": "gte", "target": 400}`
ją przechwytuje, a przekroczenie limitu czasu lub brak odpowiedzi zapisuje `"error"`, więc
`{"value": "lookup_account_result.status", "op": "eq", "target": "error"}`
przechwytuje ten przypadek.

## Przykład: recepcja i rozliczenia

Dwóch agentów. Recepcja (agent `412`) odbiera każde połączenie i przekazuje pytania
dotyczące rozliczeń do agenta rozliczeń (agent `413`) z własnym promptem, narzędziami i głosem.

W recepcji:

```json
{
  "handoffs": [
    {"agent_id": 413, "when": "The caller asks about a bill, a payment or a refund"}
  ]
}
```

U agenta rozliczeń, aby mógł przekazać rozmówcę z powrotem:

```json
{
  "handoffs": [
    {"agent_id": 412, "when": "The billing question is resolved and the caller needs something else"}
  ]
}
```

Recepcja mówi krótkie zdanie, takie jak „Połączę Cię z naszym zespołem
rozliczeń”, a agent rozliczeń przedstawia się i kontynuuje rozmowę
od miejsca, w którym zakończyła ją recepcja. Gdy rozliczenia przekazują rozmowę z powrotem, recepcja wznawia ją
od miejsca, w którym była, bez ponownego witania rozmówcy. Produkt połączenia,
języki, komunikat o zgodzie i inne ustawienia połączenia pozostają przy recepcji,
ponieważ to ona odebrała połączenie.

Jeśli rozliczenia potrzebują tylko własnych instrukcji, a nie własnego agenta,
zamiast tego użyj globalnego kroku w recepcji. Gdy pytanie otrzyma odpowiedź,
połączenie wraca do kroku, w którym znajdował się rozmówca:

```json
{
  "id": "billing",
  "name": "Billing questions",
  "instructions": "Answer questions about bills and payments. Offer to send a payment link by email.",
  "tools": null,
  "collect": [],
  "transitions": [
    {"to": "__previous__", "when": "The billing question is answered"}
  ],
  "global_when": "The caller asks about a bill or payment at any point"
}
```

## Kolejne kroki

<CardGroup cols={2}>
  <Card title="Przewodnik po promptowaniu" icon="pen" href="/pl/guides/prompting">
    Twórz wspólne instrukcje i instrukcje kroków, które sprawdzają się w rozmowach telefonicznych.
  </Card>
  <Card title="Utwórz integrację narzędzia" icon="code" href="/pl/guides/build-tool-integration">
    Utwórz narzędzia wywoływane przez kroki i kroki webhooków.
  </Card>
  <Card title="Testuj swoich agentów" icon="flask" href="/pl/guides/test-agents">
    Uruchom te same scenariusze dla każdej gałęzi przed wdrożeniem.
  </Card>
  <Card title="API agentów" icon="robot" href="/api-reference/agents">
    Każde pole agenta, wersja robocza i wdrożenie.
  </Card>
</CardGroup>
