---
title: "Ügynöklépések és átadások"
description: "Ossza fel az ügynököt lépésekre saját utasításokkal, eszközökkel és gyűjtött értékekkel, és adja át a hívásokat az ügynökök között hívás közben."
---

Egyetlen prompt egyszerre adja meg a modellnek a teljes feladatot. A **Lépések** a hívás egy-egy szakaszát adják meg: minden lépésnek saját utasításai, saját eszközei, opcionális, szó szerint elmondandó mondata és a továbblépés előtt begyűjtendő értékei vannak. Az **Átadások** lehetővé teszik, hogy a szervezet egy másik ügynöke hívás közben átvegye a beszélgetést, a leirattal együtt, így a hívónak nem kell ismételnie magát.

Minden ügynök egyetlen promptként indul. Semmi sem változik rajta, amíg nem ad hozzá lépéseket vagy átadásokat.

## Lépések vagy egyetlen prompt?

| Használjon lépéseket, ha | Maradjon az egyetlen promptnál, ha |
| --- | --- |
| A hívásnak egymás után végrehajtandó szakaszai vannak: előbb ellenőrzés, majd foglalás. | A beszélgetés nyitott végű: GYIK, recepció, általános támogatás. |
| Az ügynöknek egy értéket kell rögzítenie a továbblépés előtt. | Semmit sem kell kötött sorrendben begyűjteni. |
| Egy szabályt soha nem szabad megszegni, például: „a 18 év alatti hívókat gondviselőhöz kell irányítani”. | A modell megítélése minden ághoz megfelelő. |
| Egy keresést a hívás meghatározott pontján kell futtatni. | Az eszközök bármikor meghívhatók, amikor a hívó kéri. |
| A hívás egy része egy másik ügynökhöz tartozik, saját prompttal és hanggal. | Egyetlen persona kezel mindent. |

A lépések nem előre megírt telefonos menürendszert alkotnak. Egy lépésen belül a modell ugyanúgy vezeti a beszélgetést, mint egyetlen prompttal. A lépés határozza meg, min dolgozik, mely eszközöket használhatja, és mire van szüksége, mielőtt továbbléphet.

## Hogyan épül fel egy lépéseket használó ügynök

Ha egy ügynöknek vannak lépései, a `prompt` tartalmazza a **megosztott utasításokat**: a minden lépésben érvényes personát és szabályokat. Minden lépés saját utasításokat ad ezekhez. Minden fordulóban a modell látja a megosztott utasításokat, az aktuális lépés nevét és utasításait, valamint az eddig begyűjtött értékeket.

A szerkesztőben váltson az ügynöknél az **Egyetlen prompt** beállításról a **Lépések** beállításra. Lépésenként kap egy kártyát a lépés nevével, utasításaival, kimondandó sorával, eszközeivel, begyűjtött értékeivel és átmeneteivel, egy átadásválasztót, valamint a lépések csak olvasható folyamatábráját. Az egyetlen promptra való visszaváltás egy összevont promptot kínál, amely egyesíti a megosztott utasításokat és az összes lépést.

Az API-n keresztül a `steps` és a `handoffs` az
[ügynök](/api-reference/agents) mezői. Mint minden ügynökmező, a `PATCH` ezeket
a vázlatban készíti elő; a `POST /v1/agents/{agent_id}/deploy` élesíti őket.
A `"steps": null` elküldése visszaváltja az ügynököt egyetlen promptra. A
teszthívások és a **Beszélgetés** a vázlatot használják.

<Tip>
  A [copilot](/hu/guides/ask-the-copilot) leírás alapján is létrehozhat lépéseket
  („adjon hozzá egy lépést, amely a foglalás előtt ellenőrzi a születési dátumot”),
  és egyetlen lépést is szerkeszthet a többi módosítása nélkül.
</Tip>

### Lépésmezők

| Mező | Jelentés |
| --- | --- |
| `id` | Kötelező. Kisbetűk, számjegyek és aláhúzásjelek használhatók, betűvel kezdődve, legfeljebb 40 karakter hosszban. Az ügynökön belül egyedi. |
| `name` | Kötelező megjelenítési név, 1–80 karakter. |
| `instructions` | Kötelező, legfeljebb 20 000 karakter. A `prompt` mezőhöz hasonlóan támogatja a `{{var}}` [hívásváltozókat](/hu/guides/call-variables). |
| `say` | Opcionális, a lépésbe belépéskor szó szerint kimondandó sor, legfeljebb 1 000 karakter. Támogatja a `{{var}}` változókat. |
| `tools` | A `null` a lépés számára az ügynökhöz kapcsolt összes eszközt elérhetővé teszi. Egy lista név alapján azokra az eszközökre korlátozza a lépést. A beépített műveletek, például az `end_call` és a `transfer_call`, minden lépésben az ügynök beállításait követik. |
| `collect` | A lépés legfeljebb 20 értéket gyűjt be. Mindegyikhez tartozik `name`, `type`, `description` és `required` mező (alapértelmezés szerint `true`). |
| `on_enter_tool` | Opcionális eszköznév, amely automatikusan meghívódik a lépésbe belépéskor. Lásd: [Webhooklépések](#webhook-steps). |
| `transitions` | A lépés lehetséges következő céljainak rendezett listája. Lásd: [Átmenetek](#transitions). |
| `global_when` | Opcionális. A lépést bármely lépésből elérhetővé teszi. Lásd: [Globális lépések](#global-steps). |
| `voice` | Opcionális hangazonosító ehhez a lépéshez. Figyelmen kívül marad, ha az ügynök egyéni hangkonfigurációt használ. |

Maga a gráf: `{"start_step": "<step id>", "steps": [...]}`. A hívás a
`start_step` lépésben kezdődik.

## Átmenetek

Minden átmenet rendelkezik `to` értékkel, egy lépésazonosítóval, valamint pontosan az alábbiak egyikével:

- **`when`**: természetes nyelvű feltétel, amelyről **a modell dönt**. Az ügynök egy
  beépített `go_to_step` eszközt kap, amely felsorolja azokat a lépéseket, amelyekre továbbléphet, és minden
  `when` annak indoklásaként szolgál, hogy miért válassza azt.
- **`condition`**: a begyűjtött értékekre vonatkozó szabály, amelyről **a kód dönt**. A modell
  nem hagyhatja ki, és nem kerülheti meg beszéddel.
- **`"always": true`**: továbblépés ellenőrzés nélkül. A kód dönt először: amint
  egy lépésbe belép, vagy amikor a kötelező értékei összegyűlnek, az első
  egyező `condition` vagy `always` átmenet érvényesül, mielőtt a modell `when` értéket választhatna. Ezért az
  `always` értéket a feltételek után helyezze el tartalékként, vagy önmagában,
  hogy egy lépést közvetlenül a következőhöz fűzzön. Az `always` értékkel rendelkező lépés soha
  nem vár `when` választásra.

A `condition` formátuma: `{"value": <collected name or dotted path>, "op": <op>, "target": <literal>}`:

| `op` | Akkor igaz, ha az érték |
| --- | --- |
| `eq`, `ne` | megegyezik a `target` értékkel, vagy nem egyezik meg vele |
| `lt`, `lte`, `gt`, `gte` | kisebb, legfeljebb akkora, nagyobb vagy legalább akkora, mint a `target` |
| `in`, `not_in` | szerepel, vagy nem szerepel a `target` listában lévő értékek között |
| `exists`, `missing` | be lett gyűjtve, vagy nem lett begyűjtve (nincs `target`) |

Az `eq`, `ne`, `in` és `not_in` a szöveget szóközök eltávolítása után,
kis- és nagybetűktől függetlenül hasonlítja össze. A számokat számként, a dátumokat pedig `YYYY-MM-DD` karakterláncként hasonlítja össze. Az
a érték, amelyet soha nem gyűjtöttek be, a `missing` kivételével minden operátor esetén hamis értéket eredményez.

A `when` és `global_when` értékeket feltételként írja meg, például „A hívó időpontot
szeretne foglalni”, ne pedig kimondandó szövegként. Az ügynök ezeket belső
útválasztási megjegyzésekként látja, és azt az utasítást kapja, hogy soha ne olvassa fel őket, illetve ne említse, hogy
lépést vált.

Amikor a modell meghívja a `go_to_step` eszközt:

1. A lépés minden `required` értékének jelen kell lennie. Ha valamelyik hiányzik, a
   modell megkapja, hogy melyik az, és elkéri a hívótól.
2. Az értékek tárolódnak.
3. A `condition` és `always` átmenetek ellenőrzése sorrendben történik. Az első egyezés
   érvényesül.
4. Ellenkező esetben az ügynök arra a lépésre lép, amelyet a modell választott.
5. Ha semmi nem egyezik, és a modell nem nevezett meg lépést, az ügynök a jelenlegi lépésben marad.

A [globális lépésre](#global-steps) való ugrás kivétel: a hívó témát váltott,
ezért az ugrás akkor is megtörténik, ha az aktuális lépésben még hiányoznak kötelező értékek,
és még az adott lépés feltételeinek ellenőrzése előtt.

A `condition` és `always` átmenetek ellenőrzése minden alkalommal megtörténik, amikor egy lépésbe belép,
így a kód által vezérelt lépések sorozata egy menetben lefut. A lánc leáll:

- annál a lépésnél, amelyet ezen futás során már felkeresett;
- 8 ugrás után;
- annál a lépésnél, amelyben még kötelező értékeket kell begyűjteni, kivéve, ha a lépés rendelkezik
  `on_enter_tool` eszközzel (egy webhooklépés mindig az eredménye alapján irányít tovább).

Csak annak a lépésnek a `say` sora hangzik el, ahol a lánc megáll.

Az átmenetek nélküli lépés **végponti**. Az ügynök ott befejezi, és a szokásos beépített műveleteivel
befejezi vagy átirányítja a hívást.

## Értékek begyűjtése

Sorolja fel a lépéshez szükséges adatokat a `collect` mezőben. A modell átadja az értékeket, amikor meghívja
a `go_to_step` eszközt, és azok a hívás hátralévő részében elérhetők maradnak.

| `type` | Tartalma |
| --- | --- |
| `string` | Bármilyen szöveg |
| `number` | Egy szám |
| `boolean` | `true` vagy `false` |
| `date` | Egy dátum `YYYY-MM-DD` formátumban |

A begyűjtött értékek a hívás tartalmának részét képezik. A hívásnál, az
átirat mellett jelennek meg, és ugyanazok a megőrzési, törlési és kitakarási szabályok vonatkoznak rájuk. Amikor
az ügynök hívásrögzítése ki van kapcsolva, a begyűjtött értékek sem tárolásra, sem webhookokba küldésre nem kerülnek; a lépés idővonala
azonban igen. Lásd:
[Hol látható ez egy hívásnál](#where-to-see-it-on-a-call).

## Kimondandó sorok

A `say` pontosan úgy hangzik el, ahogyan meg van írva, amikor az ügynök belép a lépésbe. A modell
ezután ugyanabban a válaszban folytatja az új lépésben, tudva, hogy a sor éppen elhangzott,
ezért nem ismétli meg. Használja a `say` mezőt üdvözlésekhez, kötelező tájékoztatásokhoz
és rögzített megfogalmazásokhoz, a válasz többi részét pedig bízza a modellre.

A kezdő lépés `say` mezője az ügynök nyitósora, amikor ő szólal meg először, bármilyen
hozzájárulási tájékoztatás után. Amikor a hívó szólal meg először, ez nyitja meg az ügynök
első, személynek szóló válaszát, soha nem IVR-nek vagy hangpostaköszöntőnek.

Egy lépés `say` mezője nem hangzik el újra, amikor a hívás a
`__previous__` vagy egy visszaadás révén tér vissza hozzá. Írja úgy, ahogyan hangzania kell:
írjon ki mindent, amit a hang félreolvashat. A kimondandó sorok támogatják a `{{var}}`
hívásváltozókat, de a begyűjtött értékeket nem.

## Webhooklépések

Állítsa az `on_enter_tool` értékét az ügynök egyik eszközére, és az a lépésbe való belépéskor
azonnal lefut, a modellre való várakozás nélkül. Az argumentumai azok a begyűjtött értékek,
amelyek neve megegyezik az eszköz paraméterneveivel. Az eredmény `<tool>_result` nevű
begyűjtött értékként tárolódik, 4 KB-ra csonkolva, és a lépés `condition` és `always`
átmeneteit azonnal ellenőrzi a rendszer, így a lekérdezés a saját eredménye alapján is
irányíthatja a hívást.

A tárolt érték két mezőt tartalmaz:

| Mező | Tartalma |
| --- | --- |
| `status` | Az Ön végpontja által visszaadott HTTP-állapotkód. |
| `response` | A válasz törzse. |

Egy törzsmező alapján a `lookup_account_result.response.<field>`, az
állapotkód alapján pedig a `lookup_account_result.status` használatával irányíthat.

A lekérdezés legfeljebb 8 másodpercig fut, illetve az eszköz saját időkorlátjáig, ha az
rövidebb. Ha 3 másodpercnél tovább tart, az ügynök mond egy rövid sort, hogy a hívó ne
maradjon csendben. Ha az Ön végpontja 400-as vagy magasabb állapotot ad vissza, vagy nem
válaszol időben, az ügynök közli a hívóval, hogy ezt most nem tudta ellenőrizni, és azzal
folytatja, amit meg tud tenni.

## Globális lépések

Egy `global_when` mezővel rendelkező lépés bármely lépésből elérhető, amikor az adott
leírás teljesül. A modell dönt erről, ugyanúgy, mint a `when` esetében. Használja olyan
témákhoz, amelyeket a hívó bármikor felhozhat: számlázási kérdésekhez, emberi munkatárs
kéréséhez, panaszhoz.

Egy globális lépés `"to": "__previous__"` értékű átmenete visszaviszi a hívást ahhoz a
lépéshez, amely előtte aktív volt, így a hívó ott folytathatja, ahol abbahagyta. A lépés
folytatódik: az `on_enter_tool` nem fut le újra, a `say` nem ismétlődik meg, és az ügynök
elölről kezdés nélkül folytatja.

## Átadások

A `handoffs` felsorolja a szervezetében lévő többi ügynököt, amelyek átvehetik a hívást:

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

Az ügynök beépített `hand_off` eszközt kap ezekkel az ügynökökkel és indokokkal. Az átmenetekhez hasonlóan minden `when` belső útválasztási megjegyzés, amelyet soha nem olvas fel.

Átadáskor az ügynök a saját hangján egy rövid mondattal tájékoztatja a hívót arról, hová kerül, például: „Rendben, átirányítom a számlázási csapatunkhoz.” Ezután a célügynök promptja, lépései, eszközei és hangja veszi át az irányítást, a hívás pedig ugyanazzal az átirattal folytatódik. Az új ügynök röviden bemutatkozik, és válaszol a hívó legutóbbi kérésére; nem jelenti be az átadást. Ettől kezdve a célügynök tudásbázisa érhető el.

Amikor egy hívás először ér el egy ügynököt, az adott ügynök `start_step` lépésében indul: a lépés `on_enter_tool` eszköze lefut, és a `say` szövege elhangzik. Amikor a hívást visszaadják egy már korábban meglátogatott ügynöknek, az ügynök ott folytatja, ahol korábban tartott, az `on_enter_tool` futtatása, a `say` ismétlése vagy újbóli bemutatkozás nélkül. Az összegyűjtött értékeket a hívás minden ügynöke megosztja.

- A célügynöknek ugyanahhoz a szervezethez kell tartoznia, és egy ügynök nem adhatja át a hívást saját magának.
- Minden hívásszintű beállítás annál az ügynöknél marad, amelyik fogadta a hívást: a termék, a nyelvek, hogy ki beszél először, a hangposta, a hozzájárulási tájékoztató és minden egyéb hívásbeállítás.
- A célügynökök további átadásokat is végezhetnek, akár visszafelé is. Egy hívás legfeljebb 8 ügynököt érhet el.
- Egy teszthívás a tesztelt ügynök piszkozatát futtatja. Azok az ügynökök, amelyeknek átadja a hívást, a telepített verziójukat futtatják.
- Ha két ügynöknek azonos nevű, de eltérő definíciójú eszköze van, csak az egyik marad meg a hívásban, és mindig a hívást fogadó ügynök eszköze élvez elsőbbséget. A szerkesztő mentéskor figyelmezteti Önt.
- Egy ügynök lépések nélkül is rendelkezhet átadásokkal. Ebben az esetben a teljes promptja változatlanul használatos.

A `go_to_step` és a `hand_off` név fenntartott a lépésekkel vagy átadásokkal rendelkező ügynökökön, ezért saját eszközei nem használhatják ezeket a neveket.

## Hol láthatja ezt egy hívásnál

Nyissa meg a hívást a **Híváselőzmények** menüpontban. Az átirat mellett megjelenő lépésidővonal mutatja, melyik lépésbe lépett be a hívás, és miért; az összegyűjtött értékek is itt szerepelnek.

A [hívásobjektum](/api-reference/calls#retrieve-a-call) és a hívásbefejezési webhook ([`telephony.complete` / `web.complete`](/hu/webhooks/call-complete)) ugyanazokat az adatokat tartalmazza `steps_trace` és `collected_values` formájában. Mindkettő hiányzik a lépések nélküli hívásoknál.

```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}
```

Az `agent` az `a` betűből és az ügynökazonosítóból áll. A `via` azt jelzi, mi léptette tovább a hívást:

| `via` | Jelentés |
| --- | --- |
| `start` | A hívás ebben a lépésben kezdődött. |
| `model` | A modell a `go_to_step`, egy `when` vagy egy `global_when` alapján választotta ki a lépést. |
| `condition` | Egy `condition` vagy `always` átmenet teljesült. |
| `on_enter` | Egy átmenet egy webhooklépés eredménye alapján teljesült. |
| `handoff` | Egy másik ügynök átvette a hívást. |

## Hol futnak a lépések

A lépések natívan futnak a **Spark**, **Bolt** és minden **Storm** terméken, bejövő, kimenő és kampányhívásoknál, teszthívásoknál, valamint webes és widgetes hívásoknál.

Minden más esetben az ügynök továbbra is működik, csak struktúra nélkül: egy összevont promptot futtat, amely sorrendben egyesíti a közös utasításokat és az összes lépést. Ez a következőkre terjed ki:

- a kísérleti Bolt termékekre;
- [Realtime](/hu/guides/use-with-openai-realtime) munkamenetekre, beleértve a mentett ügynökök munkameneteit is;
- egy [dinamikus híváskonfiguráció](/hu/guides/dynamic-call-config) webhook által visszaadott beágyazott konfigurációkra. Az `agent_id` értéket visszaadó webhook az adott ügynök lépéseit használja.

## Korlátok

| Korlát | Érték |
| --- | --- |
| Lépések száma ügynökönként | 100 |
| Begyűjtött értékek száma lépésenként | 20 |
| Átadási célok száma ügynökönként | 8 |
| Egy hívásban elérhető ügynökök száma | 8 |
| A `steps` JSON mérete | 200 KB |
| Lépésenkénti `instructions` | 20 000 karakter |
| `say` sor | 1 000 karakter |
| Tárolt `on_enter_tool` eredmény | 4 KB |

A szabályt sértő mentés `400` választ ad a hibás mező elérési útjával, például:
`steps.steps[2].transitions[0].to`. A `tools` és az `on_enter_tool`
eszközneveinek az ügynökhöz csatolt eszközöknek kell lenniük.

A lépésenkénti nyelvek, a modellt kihagyó szkriptelt lépések és a say sorokon
belüli begyűjtött értékek nem támogatottak.

## Importált ügynökök

A Retellből, Blandből, Vapiból vagy ElevenLabsból történő
[importálás](/hu/guides/import-agents) a több promptos ügynököket, folyamatokat,
útvonalakat és munkafolyamatokat lépésekként, a csapatokat és az ügynökátadásokat
pedig az importált ügynökök közötti átadásokként hozza át. Az ellenőrzési oldal
mindkettőt megjeleníti az importálás előtt.

## Példa: fogászati előzetes adatfelvétel

Három lépés sorrendben: üdvözlés, a páciens adatainak begyűjtése, foglalás.

```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": []
      }
    ]
  }
}
```

Állítsa be előkészítettként a `PATCH /v1/agents/{agent_id}` használatával,
próbálja ki a **Beszélgetés** funkcióval, majd telepítse.
A `details` lépés nem adhatja át a hívást a foglalásnak, amíg a név, a születési
dátum és az ok nincs begyűjtve; a `new_patient` nem kötelező.

## Példa: életkorhoz kötött elágazás

A modell bárkivel beszélhet, de a kód dönti el, ki kap foglalást. Gyűjtse be az
életkort, majd ez alapján irányítsa tovább a hívást, mielőtt a modell saját
választása érvényesülne.

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

A tizenötöt mondó hívó a `guardian` lépéshez kerül, függetlenül attól, hogy a
modell mit dönt. Mindenki más a `book` lépéshez kerül. Mindkettő a gráf más
pontján található normál lépés.

## Példa: fióklekérdezési webhooklépés

A hívó megad egy fiókszámot, a lekérdezés a következő lépésbe való belépéskor fut le,
és az eredménye választja ki az útvonalat. A rövidség kedvéért a `not_found`, `collections` és `support`
lépések nem szerepelnek.

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

A `lookup_account` megkapja az `account_number` értékét, mert a paraméterének ez
a neve. Ha a válasz törzse `"found": false` értéket tartalmaz, a hívás a
`not_found` lépésre kerül. Ha az `account_status` értéke `past_due` vagy `suspended`, a hívás a
`collections` lépésre kerül. Az aktív fiók a `lookup` lépésben marad, ahol a
modell segít, majd továbblép a `support` lépésre. Ha a sikertelen lekérdezést külön lépésre szeretné küldeni, először
adjon hozzá feltételeket az állapothoz: egy hibaválasz tárolja az állapotkódját, ezért
a `{"value": "lookup_account_result.status", "op": "gte", "target": 400}`
észleli ezt, az időtúllépés vagy válasz hiánya pedig `"error"` értéket tárol, ezért
a `{"value": "lookup_account_result.status", "op": "eq", "target": "error"}`
észleli azt.

## Példa: recepciótól számlázásig

Két ügynök. A recepció (a `412`-es ügynök) minden hívást fogad, és a számlázással
kapcsolatos kérdéseket egy saját utasításokkal, eszközökkel és hanggal rendelkező számlázási ügynöknek (a `413`-as ügynöknek) adja át.

A recepción:

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

A számlázási ügynökön, hogy vissza tudja adni a hívót:

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

A recepció egy rövid mondatot mond, például: „Átirányítom a számlázási
csapatunkhoz”, a számlázási ügynök pedig bemutatkozik, és ott folytatja a beszélgetést,
ahol a recepció abbahagyta. Amikor a számlázás visszaadja a hívást, a recepció
onnan folytatja, ahol tartott, anélkül hogy újra köszöntené a hívót. A hívás terméke,
nyelvei, hozzájárulási tájékoztatója és egyéb hívásbeállításai a recepciónál maradnak,
mert ő fogadta a hívást.

Ha a számlázásnak csak saját utasításokra van szüksége, külön ügynökre nem, használjon
inkább globális lépést a recepción. Amikor a kérdés megválaszolásra kerül, a hívás
visszatér ahhoz a lépéshez, amelyben a hívó korábban volt:

```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"
}
```

## Következő lépések

<CardGroup cols={2}>
  <Card title="Promptolási útmutató" icon="pen" href="/hu/guides/prompting">
    Írjon a telefonos használatban is jól működő közös utasításokat és lépésutasításokat.
  </Card>
  <Card title="Eszközintegráció létrehozása" icon="code" href="/hu/guides/build-tool-integration">
    Hozza létre azokat az eszközöket, amelyeket a lépései és webhooklépései meghívnak.
  </Card>
  <Card title="AI-ügynökei tesztelése" icon="flask" href="/hu/guides/test-agents">
    Telepítés előtt futtassa ugyanazokat a forgatókönyveket minden ágon.
  </Card>
  <Card title="Agents API" icon="robot" href="/api-reference/agents">
    Minden AI-ügynökmező, piszkozat és telepítés.
  </Card>
</CardGroup>
