---
title: "Kasuta ThunderPhone'i koos OpenAI Realtime'i klientidega"
description: "Suuna OpenAI Realtime'iga ühilduv serveriklient ThunderPhone'i, kasutades kas salvestatud agenti või seansisisest konfiguratsiooni."
---

ThunderPhone rakendab OpenAI Realtime’i sündmusmudeli sihipärast alamhulka.
Olemasolev serveripoolne klient saab säilitada oma WebSocketi, heli-, sessiooni- ja
vastussündmuste voo, kasutades samal ajal ThunderPhone’i häälagenti.

## Enne ühendamist

Vajad ThunderPhone’i organisatsiooni salajast API-võtit ja serverikeskkonda,
mis saab avada WebSocketi ühendusi. Ära ühenda brauserikoodist ega avalda võtit
brauserile. Salvestatud agendi kasutamiseks juuruta see esmalt ja kopeeri selle numbriline agendi ID.

Ühendu aadressiga:

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

Autendi WebSocketi ühenduse loomine oma serverist:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Päringustringi kaudu autentimine on olemas klientidele, mis ei saa ühenduse loomise
päiseid määrata, kuid URL-id satuvad logidesse kergemini.

## Vali, kellele konfiguratsioon kuulub

| Režiim | Ühendu järgmisega | Konfiguratsiooniallikas |
| --- | --- | --- |
| Salvestatud agent | `?agent_id=12` | Juurutatud juhised, hääl, toode, keeled, teadmised ja ühilduvad serveris käitatavad tööriistad |
| Sisemine | Puudub `agent_id` | Esimene sinu kliendi aktsepteeritud `session.update` |

### Salvestatud agent

Ühendu juurutatud agendi ID-ga:

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

Agent käivitub pesa ühendamisel. Selle tervitus jääb kättesaadavaks,
kuid Realtime keelab selle räägitud vaikusekontrollid ning jätab välja `transfer_call`
ja `send_keypad_input`. Muud ühilduvad tööriistad töötavad ThunderPhone’is. Ära
saada selles režiimis sisemisi juhiseid ega kliendis käitatavaid tööriistu.

Määra edastusheli enne agendi käivitumist päringuparameetritega `input_audio_format`,
`output_audio_format`, `input_rate` ja `output_rate`. Pärast ühenduse loomist
ei saa salvestatud konfiguratsiooni ega helivorminguid muuta.

### Sisemine sessioon

Ilma `agent_id`-ta oota sündmust `session.created`, seejärel saada `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"
    }
  }
}
```

Esimene aktsepteeritud värskendus valmistab kõne ette. `session.updated` tähendab,
et sessioon on aktiivne. Juhiseid, häält, toodet, tööriistu ega helivorminguid ei saa
pärast seda muuta.

Sisemistel sessioonidel puuduvad automaatne tervitus ja räägitud vaikusekontrollid. Et
agent räägiks esimesena, lisa süsteemi- või kasutajasõnum ja saada
`response.create`. Täiesti jõudeolev sessioon lõpeb siiski platvormi
vaikse kõne limiidi juures, mis on vaikimisi 600 sekundit.

## Kasuta ametlikku OpenAI SDK-d

Edasta `/v1`-ga lõppev WebSocketi baas-URL; SDK lisab `/realtime`. Väärtus
`model` on ühilduvusnimi ega vali ThunderPhone'i toodet. Vali toode seansi
konfiguratsioonis või salvestatud agendis.

See ühenduse kontroll loob sisemise Bolt-seansi, prindib sündmusi kuni esimese
`session.updated` sündmuseni ja sulgeb ühenduse. Heli voogedastuseks kasuta
[minimaalset Pythoni klienti](/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())
```

Säilita olemasolev sisendheli lisamise, vastuse heli deltade, katkestuste,
funktsioonikutsete, vigade ja socketi korrektse sulgemise käsitlus. Sisemised
kohandatud funktsioonid käivitatakse sinu kliendis; tagasta nende tulemused
Realtime'i protokolli kaudu. Salvestatud agendi tööriistad käivitatakse
ThunderPhone'is.

## Seansi elutsükkel ja tõrked

Üks WebSocket vastab ühele kõnele. Vigane agendi ID või tagasi lükatud sisemine
konfiguratsioon tekitab `error` sündmuse. Oota enne seansi aktiivseks lugemist
sündmust `session.updated`. Määra tegelikud sisend- ja väljundvormingud ning
diskreetimissagedused: PCM-i sageduse erinevus esitab heli liiga kiiresti või
liiga aeglaselt, mitte ei tekita valideerimisviga.

Pärast seansi algust sulge socket korrektselt, kui rakendus on lõpetanud.
Sisemised seansid võivad kasutada kliendis käivitatavaid funktsioone.
Salvestatud agendi seansid kasutavad ühilduvaid ThunderPhone'is käivitatavaid
tööriistu ega paku kõne suunamist ega klahvistiku sisendit.

## Testi integratsiooni

Alusta [minimaalse Pythoni WAV-kliendiga](/api-reference/realtime#minimal-python-client)
ja selle määratud sagedusega mono PCM16 WAV-failiga. Kontrolli järgmist:

1. Server aktsepteerib konfiguratsiooni ja saadab sündmuse `session.updated`.
2. Sisend tekitab transkriptsiooni- ja vastuse helisündmusi oodatud kiirusel.
3. Katkestus ja vastuse tühistamine peatavad allesjäänud väljundheli.
4. Sisemiste funktsioonide tulemused või salvestatud agendi tööriistade tulemused jõuavad mudelini.
5. Vigane sisend tekitab `error` sündmuse, mida sinu klient käsitleb.
6. Sinu klient sulgeb socketi ja kõne kuvatakse [Kõneajaloos](/et/guides/review-calls).

[Realtime WebSocketi viide](/api-reference/realtime) loetleb aktsepteeritud
sündmused, helivormingud, seansiväljad ja täielikud näited.

## Hind

Realtime'i kõnede puhul kasutatakse valitud toote tavapärast minutihinda.
Reaalajas transkriptsiooni deltade lubamine lisab kogu seansi eest minutipõhise
lisatasu; hinna kohta vaata [Reaalajas transkriptsioonid](/api-reference/realtime#live-transcripts)
ja toodete hindade kohta [Hinnakiri](/et/guides/pricing).

`POST /v1/realtime/sessions` on eraldi hallatud LiveKiti tee. See loob ruumi ja
piiratud ulatusega osaleja tokeni; seda ei ole otsese WebSocketi ühenduse jaoks
vaja.

Raamistikuintegratsioonide kohta vaata [Kasuta ThunderPhone'i Pipecatist](/et/guides/use-with-pipecat)
ja [Kasuta ThunderPhone'i LiveKit Agentsist](/et/guides/use-with-livekit).
