---
title: "Uporabite ThunderPhone z odjemalci OpenAI Realtime"
description: "Odjemalca strežnika, združljivega z OpenAI Realtime, usmerite na ThunderPhone z uporabo shranjenega agenta ali vdelane konfiguracije seje."
---

ThunderPhone izvaja osredotočeno podmnožico dogodkovnega modela OpenAI Realtime.
Obstoječi odjemalec na strani strežnika lahko ohrani tok dogodkov WebSocket, zvoka, seje in
odzivov ter uporablja glasovnega agenta ThunderPhone.

## Preden se povežete

Potrebujete tajni ključ API organizacije ThunderPhone in izvajalno okolje strežnika,
ki lahko odpre povezave WebSocket. Ne povezujte se iz kode brskalnika in ključa ne
izpostavljajte brskalniku. Če želite uporabiti shranjenega agenta, ga najprej uvedite
in kopirajte njegov številčni ID agenta.

Povežite se z:

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

Nadgradnjo povezave WebSocket preverite z avtentikacijo iz strežnika:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Preverjanje pristnosti s poizvedbenim nizom je na voljo za odjemalce, ki ne morejo nastaviti
glav med rokovanjem, vendar se URL-ji lažje razkrijejo v dnevnikih.

## Izberite, kdo upravlja konfiguracijo

| Način | Povezava z | Vir konfiguracije |
| --- | --- | --- |
| Shranjeni agent | `?agent_id=12` | Uvedeni poziv, glas, produkt, jeziki, znanje in združljiva orodja, ki se izvajajo na strežniku |
| V vrstici | Brez `agent_id` | Prvi sprejeti `session.update` vašega odjemalca |

### Shranjeni agent

Povežite se z ID-jem uvedenega agenta:

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

Agent se zažene med povezovanjem vtičnice. Njegov pozdrav ostane na voljo,
vendar Realtime onemogoči njegova govorna preverjanja med tišino in izpusti `transfer_call`
ter `send_keypad_input`. Druga združljiva orodja se izvajajo v ThunderPhone. Za ta način ne
pošiljajte navodil v vrstici ali orodij, ki jih izvaja odjemalec.

Pred zagonom agenta nastavite zvok na povezavi s parametri poizvedbe `input_audio_format`,
`output_audio_format`, `input_rate` in `output_rate`. Po povezavi ne morete spremeniti
shranjene konfiguracije ali zvočnih formatov.

### Seja v vrstici

Brez `agent_id` počakajte na `session.created`, nato pošljite `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"
    }
  }
}
```

Prva sprejeta posodobitev pripravi klic. `session.updated` pomeni, da je seja
aktivna. Navodil, glasu, produkta, orodij in zvočnih formatov po tej točki ni mogoče
spremeniti.

Seje v vrstici nimajo samodejnega pozdrava ali govornih preverjanj med tišino. Če želite,
da agent spregovori prvi, dodajte sistemsko ali uporabniško sporočilo in pošljite
`response.create`. Popolnoma nedejavna seja se še vedno konča ob omejitvi platforme za
tihe klice, ki je privzeto 600 sekund.

## Uporabite uradni SDK za OpenAI

Posredujte osnovni URL za WebSocket, ki se konča z `/v1`; SDK doda `/realtime`. Vrednost
`model` je ime za združljivost in ne izbere izdelka ThunderPhone.
Izdelek izberite v konfiguraciji seje ali shranjenem agentu.

To preverjanje povezave ustvari vstavljeno sejo Bolt, izpisuje dogodke do prvega
`session.updated` in nato povezavo zapre. Za pretakanje zvoka uporabite [minimalni odjemalec
Python](/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())
```

Ohranite obstoječe obravnavanje dodajanja vhodnega zvoka, razlik odzivnega zvoka,
prekinitev, klicev funkcij, napak in čistega zapiranja vtičnice. Vstavljene funkcije po meri
se izvajajo v vašem odjemalcu; njihove rezultate vrnite prek protokola Realtime.
Orodja shranjenega agenta se izvajajo v ThunderPhone.

## Življenjski cikel seje in napake

En WebSocket predstavlja en klic. Neveljaven ID agenta ali zavrnjena vstavljena
konfiguracija povzroči dogodek `error`. Preden sejo obravnavate kot aktivno, počakajte na
`session.updated`. Navedite dejanske vhodne in izhodne formate ter vzorčne frekvence:
neujemanje frekvence PCM predvaja zvok prehitro ali prepočasi, namesto da bi povzročilo
napako preverjanja veljavnosti.

Ko se seja začne, vtičnico čisto zaprite, ko aplikacija konča delo. Vstavljene seje lahko
uporabljajo funkcije, ki se izvajajo v odjemalcu. Seje shranjenega agenta uporabljajo
združljiva orodja, ki jih izvaja ThunderPhone, in ne omogočajo prenosa ali vnosa s tipkovnico.

## Preizkusite integracijo

Začnite z [minimalnim odjemalcem Python WAV](/api-reference/realtime#minimal-python-client)
in mono PCM16 WAV pri navedeni frekvenci. Preverite:

1. Strežnik sprejme konfiguracijo in pošlje `session.updated`.
2. Vhod ustvari dogodke prepisa in odzivnega zvoka s pričakovano hitrostjo.
3. Prekinitev in preklic odziva ustavita preostali izhodni zvok.
4. Rezultati vstavljenih funkcij ali orodij shranjenega agenta se vrnejo modelu.
5. Neveljaven vnos ustvari dogodek `error`, ki ga vaš odjemalec obravnava.
6. Vaš odjemalec zapre vtičnico in klic se prikaže v [Zgodovini
   klicev](/sl/guides/review-calls).

[Vodnik za Realtime WebSocket](/api-reference/realtime) navaja sprejete
dogodke, zvočne formate, polja seje in popolne primere.

## Cena

Klici Realtime uporabljajo običajno ceno izbranega izdelka na minuto. Omogočanje sprotnih
razlik prepisov doda doplačilo na minuto za celotno sejo; za ceno glejte [Sprotni
prepisi](/api-reference/realtime#live-transcripts), za cene izdelkov pa
[Cenik](/sl/guides/pricing).

`POST /v1/realtime/sessions` je ločena upravljana pot LiveKit. Ustvari
sobo in žeton udeleženca z omejenim obsegom; ni potrebna za neposredno povezavo WebSocket.

Za integracije z ogrodji glejte [Uporabite ThunderPhone iz Pipecat](/sl/guides/use-with-pipecat)
in [Uporabite ThunderPhone iz LiveKit Agents](/sl/guides/use-with-livekit).
