---
title: "Upotrebljavajte ThunderPhone s klijentima OpenAI Realtime"
description: "Usmjerite klijent poslužitelja kompatibilan s OpenAI Realtimeom na ThunderPhone, koristeći spremljenog agenta ili ugrađenu konfiguraciju sesije."
---

ThunderPhone implementira fokusirani podskup modela događaja OpenAI Realtime.
Postojeći klijent na poslužiteljskoj strani može zadržati svoj tijek događaja za WebSocket, zvuk, sesiju i
odgovore dok upotrebljava glasovnog agenta ThunderPhone.

## Prije povezivanja

Potreban Vam je tajni API ključ organizacije ThunderPhone i poslužiteljsko izvršno okruženje koje
može otvoriti WebSocket veze. Nemojte se povezivati iz koda preglednika niti izlagati ključ
pregledniku. Da biste upotrebljavali spremljenog agenta, najprije ga implementirajte i kopirajte njegov numerički ID agenta.

Povežite se s:

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

Autorizirajte nadogradnju WebSocket veze sa svojeg poslužitelja:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Autentifikacija putem niza upita dostupna je za klijente koji ne mogu postaviti zaglavlja
rukovanja, ali URL-ovi lakše mogu dospjeti u zapisnike.

## Odaberite tko upravlja konfiguracijom

| Način | Povežite se s | Izvor konfiguracije |
| --- | --- | --- |
| Spremljeni agent | `?agent_id=12` | Implementirani prompt, glas, proizvod, jezici, znanje i kompatibilni alati koji se izvršavaju na poslužitelju |
| Ugrađeno | Bez `agent_id` | Prvi prihvaćeni `session.update` od Vašeg klijenta |

### Spremljeni agent

Povežite se s ID-jem implementiranog agenta:

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

Agent se pokreće tijekom povezivanja utičnice. Njegova uvodna poruka ostaje dostupna,
ali Realtime onemogućuje njegove glasovne provjere tijekom tišine te izostavlja `transfer_call`
i `send_keypad_input`. Ostali kompatibilni alati izvršavaju se na ThunderPhoneu. Nemojte
slati ugrađene upute ni alate koje izvršava klijent za ovaj način rada.

Postavite format zvuka u prijenosu prije pokretanja agenta pomoću parametara upita
`input_audio_format`, `output_audio_format`, `input_rate` i `output_rate`. Nakon povezivanja
ne možete promijeniti spremljenu konfiguraciju ni formate zvuka.

### Ugrađena sesija

Bez `agent_id`, pričekajte `session.created`, a zatim pošaljite `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"
    }
  }
}
```

Prvo prihvaćeno ažuriranje inicijalizira poziv. `session.updated` znači da je
sesija aktivna. Upute, glas, proizvod, alati i formati zvuka nakon toga se ne mogu
mijenjati.

Ugrađene sesije nemaju automatsku uvodnu poruku ni glasovne provjere tijekom tišine. Da bi
agent prvi progovorio, dodajte poruku sustava ili korisnika i pošaljite
`response.create`. Potpuno neaktivna sesija i dalje završava pri ograničenju platforme za
tihi poziv, koje prema zadanim postavkama iznosi 600 sekundi.

## Upotrijebite službeni OpenAI SDK

Proslijedite osnovni URL za WebSocket koji završava s `/v1`; SDK dodaje `/realtime`. Vrijednost
`model` naziv je za kompatibilnost i ne odabire proizvod ThunderPhone.
Odaberite proizvod u konfiguraciji sesije ili spremljenom agentu.

Ova provjera veze stvara ugrađenu Bolt sesiju, ispisuje događaje do prvog
`session.updated` i zatvara se. Upotrijebite [minimalni Python
klijent](/api-reference/realtime#minimal-python-client) za strujanje zvuka.

```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())
```

Zadržite postojeću obradu za dodavanje ulaznog zvuka, delta promjene zvuka odgovora,
prekide, pozive funkcija, pogreške i pravilno zatvaranje utičnice. Ugrađene prilagođene
funkcije izvršavaju se u vašem klijentu; njihove rezultate vratite putem protokola Realtime.
Alati spremljenog agenta izvršavaju se na ThunderPhoneu.

## Životni ciklus sesije i neuspjesi

Jedan WebSocket predstavlja jedan poziv. Nevažeći ID agenta ili odbijena ugrađena
konfiguracija proizvodi događaj `error`. Pričekajte `session.updated` prije nego što
sesiju smatrate aktivnom. Navedite stvarne ulazne i izlazne formate te frekvencije
uzorkovanja: nepodudaranje PCM frekvencije reproducira zvuk prebrzo ili presporo umjesto
da proizvede pogrešku provjere valjanosti.

Nakon pokretanja sesije pravilno zatvorite utičnicu kada vaša aplikacija završi.
Ugrađene sesije mogu upotrebljavati funkcije koje izvršava klijent. Sesije spremljenog
agenta upotrebljavaju kompatibilne alate koje pokreće ThunderPhone i ne nude prijenos
poziva ni unos putem tipkovnice.

## Testirajte integraciju

Počnite s [minimalnim Python WAV klijentom](/api-reference/realtime#minimal-python-client)
i mono PCM16 WAV datotekom pri deklariranoj frekvenciji. Provjerite:

1. Poslužitelj prihvaća konfiguraciju i šalje `session.updated`.
2. Ulaz proizvodi događaje prijepisa i zvuka odgovora očekivanom brzinom.
3. Prekid i otkazivanje odgovora zaustavljaju preostali izlazni zvuk.
4. Rezultati ugrađene funkcije ili rezultati alata spremljenog agenta vraćaju se modelu.
5. Nevažeći unos proizvodi događaj `error` koji vaš klijent obrađuje.
6. Vaš klijent zatvara utičnicu, a poziv se pojavljuje u [Povijesti
   poziva](/hr/guides/review-calls).

[Referenca za Realtime WebSocket](/api-reference/realtime) navodi prihvaćene
događaje, formate zvuka, polja sesije i potpune primjere.

## Cijena

Realtime pozivi upotrebljavaju standardnu cijenu odabranog proizvoda po minuti. Omogućavanje
delta promjena prijepisa uživo dodaje naknadu po minuti za cijelu sesiju; pogledajte [Prijepise
uživo](/api-reference/realtime#live-transcripts) za cijenu i [Cjenik](/hr/guides/pricing)
za cijene proizvoda.

`POST /v1/realtime/sessions` zaseban je upravljani LiveKit put. Stvara sobu i token
s ograničenim opsegom za sudionika; nije potreban za izravnu WebSocket vezu.

Za integracije s okvirima pogledajte [Upotreba ThunderPhonea iz Pipecata](/hr/guides/use-with-pipecat)
i [Upotreba ThunderPhonea s LiveKit Agents](/hr/guides/use-with-livekit).
