---
title: "Käytä ThunderPhonea OpenAI Realtime -asiakkaiden kanssa"
description: "Yhdistä OpenAI Realtime -yhteensopiva palvelinasiakas ThunderPhoneen käyttämällä joko tallennettua agenttia tai rivinsisäistä istuntomääritystä."
---

ThunderPhone toteuttaa rajatun osan OpenAI Realtime -tapahtumamallista.
Nykyinen palvelinpuolen asiakas voi säilyttää WebSocket-, ääni-, istunto- ja
vastaustapahtumavirtansa käyttäessään ThunderPhone-puheagenttia.

## Ennen kuin muodostat yhteyden

Tarvitset ThunderPhone-organisaation salaisen API-avaimen ja palvelinajoympäristön,
joka voi avata WebSocket-yhteyksiä. Älä muodosta yhteyttä selainkoodista äläkä
paljasta avainta selaimelle. Jos haluat käyttää tallennettua agenttia, ota se
ensin käyttöön ja kopioi sen numeerinen agenttitunnus.

Yhdistä osoitteeseen:

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

Todenna WebSocket-päivitys palvelimeltasi:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Kyselymerkkijonotodennus on käytettävissä asiakkaille, jotka eivät voi asettaa
kättelyn otsakkeita, mutta URL-osoitteet vuotavat helpommin lokeihin.

## Valitse, kuka hallitsee määrityksiä

| Tila | Yhdistä käyttämällä | Määritysten lähde |
| --- | --- | --- |
| Tallennettu agentti | `?agent_id=12` | Käyttöönotettu kehote, ääni, tuote, kielet, tietämys ja yhteensopivat palvelimella suoritettavat työkalut |
| Sisäinen | Ei `agent_id`-parametria | Ensimmäinen asiakkaasi hyväksytty `session.update` |

### Tallennettu agentti

Yhdistä käyttöönotetulla agenttitunnuksella:

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

Agentti käynnistyy socket-yhteyden muodostuessa. Sen tervehdys on edelleen
käytettävissä, mutta Realtime poistaa käytöstä sen puhutut hiljaisuuden
tarkistukset ja jättää pois `transfer_call`- ja `send_keypad_input`-toiminnot.
Muut yhteensopivat työkalut suoritetaan ThunderPhonessa. Älä lähetä tähän
tilaan sisäisiä ohjeita tai asiakkaan suorittamia työkaluja.

Aseta siirrettävän äänen asetukset ennen agentin käynnistymistä
`input_audio_format`-, `output_audio_format`-, `input_rate`- ja `output_rate`
-kyselyparametreilla. Et voi muuttaa tallennettuja määrityksiä tai
äänimuotoja yhteyden muodostamisen jälkeen.

### Sisäinen istunto

Ilman `agent_id`-parametria odota `session.created`-tapahtumaa ja lähetä sitten
`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"
    }
  }
}
```

Ensimmäinen hyväksytty päivitys valmistelee puhelun. `session.updated`
tarkoittaa, että istunto on aktiivinen. Ohjeita, ääntä, tuotetta, työkaluja ja
äänimuotoja ei voi muuttaa tämän jälkeen.

Sisäisissä istunnoissa ei ole automaattista tervehdystä eikä puhuttuja
hiljaisuuden tarkistuksia. Jos haluat agentin puhuvan ensin, lisää järjestelmä-
tai käyttäjäviesti ja lähetä `response.create`. Täysin käyttämätön istunto
päättyy silti alustan hiljaisen puhelun rajalla, joka on oletusarvoisesti 600
sekuntia.

## Käytä virallista OpenAI SDK:ta

Välitä WebSocket-perus-URL-osoite, joka päättyy kohtaan `/v1`; SDK lisää `/realtime`-polun.  
`model`-arvo on yhteensopivuusnimi, eikä se valitse ThunderPhone-tuotetta. Valitse tuote istunnon määrityksessä tai tallennetussa agentissa.

Tämä yhteystarkistus luo upotetun Bolt-istunnon, tulostaa tapahtumia ensimmäiseen `session.updated`-tapahtumaan asti ja sulkee yhteyden. Suoratoista ääntä käyttämällä [minimaalista Python-asiakasta](/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äilytä nykyinen käsittelysi syöteäänen lisäämiselle, vastausäänen deltoille, keskeytyksille, funktiokutsuille, virheille ja soketin siistille sulkemiselle. Upotetut mukautetut funktiot suoritetaan asiakkaassasi; palauta niiden tulokset Realtime-protokollan kautta. Tallennetun agentin työkalut suoritetaan ThunderPhone-palvelussa.

## Istunnon elinkaari ja virheet

Yksi WebSocket vastaa yhtä puhelua. Virheellinen agenttitunnus tai hylätty upotettu määritys tuottaa `error`-tapahtuman. Odota `session.updated`-tapahtumaa, ennen kuin käsittelet istuntoa aktiivisena. Määritä käytetyt syöte- ja tulostusmuodot sekä näytteenottotaajuudet oikein: PCM-näytteenottotaajuuden ristiriita toistaa äänen liian nopeasti tai hitaasti sen sijaan, että se tuottaisi validointivirheen.

Kun istunto on alkanut, sulje soketti siististi, kun sovelluksesi on valmis. Upotetut istunnot voivat käyttää asiakkaassa suoritettavia funktioita. Tallennetun agentin istunnot käyttävät yhteensopivia ThunderPhone-palvelussa suoritettavia työkaluja, eivätkä ne tarjoa siirtoa tai näppäimistösyötettä.

## Testaa integraatio

Aloita [minimaalisella Python WAV -asiakkaalla](/api-reference/realtime#minimal-python-client) ja sen ilmoitetun näytteenottotaajuuden mono PCM16 WAV -tiedostolla. Varmista seuraavat:

1. Palvelin hyväksyy määrityksen ja lähettää `session.updated`-tapahtuman.
2. Syöte tuottaa transkriptio- ja vastausäänitapahtumia odotetulla nopeudella.
3. Keskeytys ja vastauksen peruutus pysäyttävät jäljellä olevan tulostusäänen.
4. Upotettujen funktioiden tulokset tai tallennetun agentin työkalujen tulokset palautuvat mallille.
5. Virheellinen syöte tuottaa `error`-tapahtuman, jonka asiakkaasi käsittelee.
6. Asiakkaasi sulkee soketin ja puhelu näkyy [Puheluhistoriassa](/fi/guides/review-calls).

[Realtime WebSocket -viite](/api-reference/realtime) sisältää hyväksytyt tapahtumat, äänimuodot, istuntokentät ja täydelliset esimerkit.

## Hinta

Realtime-puheluissa käytetään valitun tuotteen normaalia minuuttihintaa. Reaaliaikaisten transkriptiodeltojen käyttöönotto lisää koko istunnolle minuuttikohtaisen lisämaksun; katso hinta kohdasta [Reaaliaikaiset transkriptiot](/api-reference/realtime#live-transcripts) ja tuotteiden hinnat kohdasta [Hinnoittelu](/fi/guides/pricing).

`POST /v1/realtime/sessions` on erillinen hallinnoitu LiveKit-polku. Se luo huoneen ja rajatun osallistujatunnuksen; sitä ei tarvita suoraan WebSocket-yhteyteen.

Katso kehysintegraatiot kohdista [Käytä ThunderPhonea Pipecatin kanssa](/fi/guides/use-with-pipecat) ja [Käytä ThunderPhonea LiveKit Agentsin kanssa](/fi/guides/use-with-livekit).
