---
title: "Používejte ThunderPhone s klienty OpenAI Realtime"
description: "Nasměrujte klienta serveru kompatibilního s OpenAI Realtime na ThunderPhone pomocí uloženého agenta nebo vložené konfigurace relace."
---

ThunderPhone implementuje zaměřenou podmnožinu modelu událostí OpenAI Realtime.
Stávající klient na straně serveru může zachovat svůj tok událostí WebSocketu, zvuku, relace a
odpovědí při použití hlasového agenta ThunderPhone.

## Než se připojíte

Potřebujete tajný klíč API organizace ThunderPhone a běhové prostředí serveru, které
dokáže otevřít WebSockety. Nepřipojujte se z kódu v prohlížeči ani klíč nevystavujte
prohlížeči. Chcete-li použít uloženého agenta, nejprve ho nasaďte a zkopírujte jeho číselné ID agenta.

Připojte se k:

```text
wss://api.thunderphone.com/v1/realtime
```

Ověřte upgrade WebSocketu ze svého serveru:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Ověřování pomocí parametrů v řetězci dotazu je k dispozici pro klienty, kteří nemohou nastavit hlavičky handshake,
ale adresy URL lze snáze zachytit v protokolech.

## Zvolte vlastníka konfigurace

| Režim | Připojení pomocí | Zdroj konfigurace |
| --- | --- | --- |
| Uložený agent | `?agent_id=12` | Nasazené pokyny, hlas, produkt, jazyky, znalosti a kompatibilní nástroje spouštěné na serveru |
| Vložený | Bez `agent_id` | První přijatý požadavek `session.update` od vašeho klienta |

### Uložený agent

Připojte se pomocí ID nasazeného agenta:

```text
wss://api.thunderphone.com/v1/realtime?agent_id=12
```

Agent se spustí během připojování soketu. Jeho pozdrav zůstává k dispozici,
ale Realtime vypne jeho mluvené kontroly ticha a vynechá `transfer_call`
a `send_keypad_input`. Ostatní kompatibilní nástroje běží na ThunderPhone. Pro tento režim
neodesílejte vložené pokyny ani nástroje spouštěné klientem.

Před spuštěním agenta nastavte zvuk na úrovni přenosu pomocí parametrů dotazu
`input_audio_format`, `output_audio_format`, `input_rate` a `output_rate`. Po připojení
nemůžete změnit uloženou konfiguraci ani formáty zvuku.

### Vložená relace

Bez `agent_id` počkejte na `session.created` a poté odešlete `session.update`:

```json
{
  "type": "session.update",
  "session": {
    "type": "realtime",
    "instructions": "Answer questions clearly and keep responses brief.",
    "audio": {
      "input": {
        "format": { "type": "audio/pcm", "rate": 24000 }
      },
      "output": {
        "format": { "type": "audio/pcm", "rate": 24000 },
        "voice": "olivia"
      }
    },
    "config": {
      "product": "bolt"
    }
  }
}
```

První přijatá aktualizace zřídí hovor. `session.updated` znamená, že
relace je aktivní. Pokyny, hlas, produkt, nástroje ani formáty zvuku nelze
po tomto okamžiku změnit.

Vložené relace nemají automatický pozdrav ani mluvené kontroly ticha. Chcete-li,
aby agent promluvil jako první, připojte systémovou nebo uživatelskou zprávu a odešlete
`response.create`. Zcela neaktivní relace se přesto ukončí při limitu platformy pro tiché hovory,
který je ve výchozím nastavení 600 sekund.

## Použití oficiálního SDK OpenAI

Předejte základní adresu URL WebSocketu končící na `/v1`; SDK připojí `/realtime`. Hodnota
`model` je název pro kompatibilitu a nevybírá produkt ThunderPhone.
Produkt vyberte v konfiguraci relace nebo uloženém agentovi.

Tato kontrola připojení vytvoří vloženou relaci Bolt, vypisuje události až do
první události `session.updated` a poté se uzavře. Pro streamování zvuku použijte [minimálního klienta
v Pythonu](/api-reference/realtime#minimal-python-client).

```python
import asyncio
import os

from openai import AsyncOpenAI


async def main():
    client = AsyncOpenAI(
        api_key=os.environ["THUNDERPHONE_API_KEY"],
        websocket_base_url="wss://api.thunderphone.com/v1",
    )

    async with client.realtime.connect(
        model="thunderphone-realtime"
    ) as connection:
        await connection.session.update(session={
            "type": "realtime",
            "instructions": "Listen to the caller and help them complete the call.",
            "config": {"product": "bolt"},
        })
        async for event in connection:
            print(event.type)
            if event.type == "session.updated":
                break


if __name__ == "__main__":
    asyncio.run(main())
```

Zachovejte stávající zpracování přidávání vstupního zvuku, zvukových delt odpovědí,
přerušení, volání funkcí, chyb a čistého uzavření socketu. Vložené vlastní
funkce se spouštějí ve vašem klientovi; jejich výsledky vracejte prostřednictvím protokolu
Realtime. Nástroje uloženého agenta se spouštějí v ThunderPhone.

## Životní cyklus relace a selhání

Jeden WebSocket představuje jeden hovor. Neplatné ID agenta nebo odmítnutá vložená
konfigurace vytvoří událost `error`. Před považováním relace za aktivní vyčkejte na `session.updated`. Určete skutečné vstupní a výstupní formáty a
vzorkovací frekvence: nesoulad frekvence PCM přehrává zvuk příliš rychle nebo příliš pomalu namísto
vytvoření chyby ověření.

Po spuštění relace čistě uzavřete socket, když vaše aplikace skončí.
Vložené relace mohou používat funkce spouštěné klientem. Relace uloženého agenta
používají kompatibilní nástroje spouštěné ThunderPhone a nenabízejí přepojení ani vstup z klávesnice.

## Testování integrace

Začněte s [minimálním klientem WAV v Pythonu](/api-reference/realtime#minimal-python-client)
a mono PCM16 WAV s deklarovanou frekvencí. Ověřte:

1. Server přijme konfiguraci a odešle `session.updated`.
2. Vstup vytváří události přepisu a zvukové odpovědi očekávanou rychlostí.
3. Přerušení a zrušení odpovědi zastaví zbývající výstupní zvuk.
4. Výsledky vložených funkcí nebo nástrojů uloženého agenta se vrátí do modelu.
5. Neplatný vstup vytvoří událost `error`, kterou váš klient zpracuje.
6. Váš klient uzavře socket a hovor se zobrazí v [historii
   hovorů](/cs/guides/review-calls).

[Referenční dokumentace WebSocketu Realtime](/api-reference/realtime) uvádí podporované
události, zvukové formáty, pole relace a kompletní příklady.

## Cena

Hovory Realtime používají běžnou minutovou sazbu vybraného produktu. Povolení živých
delt přepisu přidá minutový příplatek za celou relaci; sazbu najdete v [živých
přepisech](/api-reference/realtime#live-transcripts) a sazby produktů v
[ceníku](/cs/guides/pricing).

`POST /v1/realtime/sessions` je samostatná spravovaná cesta LiveKit. Vytvoří
místnost a token účastníka s omezeným rozsahem; pro přímé připojení WebSocketem není vyžadována.

Informace o integracích s frameworky najdete v [Použití ThunderPhone z Pipecat](/cs/guides/use-with-pipecat)
a [Použití ThunderPhone z LiveKit Agents](/cs/guides/use-with-livekit).
