---
title: "Izmantojiet ThunderPhone ar OpenAI Realtime klientiem"
description: "Norādiet uz ThunderPhone ar OpenAI Realtime saderīgu servera klientu, izmantojot vai nu saglabātu balss aģentu, vai iekļautu sesijas konfigurāciju."
---

ThunderPhone ievieš mērķtiecīgu OpenAI Realtime notikumu modeļa apakškopu.
Esošs servera puses klients var saglabāt savu WebSocket, audio, sesijas un
atbildes notikumu plūsmu, vienlaikus izmantojot ThunderPhone balss aģentu.

## Pirms pieslēgšanās

Jums nepieciešama ThunderPhone organizācijas slepenā API atslēga un servera izpildvide, kas
var atvērt WebSocket savienojumus. Nepieslēdzieties no pārlūkprogrammas koda un nepakļaujiet atslēgu
pārlūkprogrammai. Lai izmantotu saglabātu aģentu, vispirms to publicējiet un nokopējiet tā ciparu aģenta ID.

Pieslēdzieties šeit:

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

Autentificējiet WebSocket savienojuma jaunināšanu no sava servera:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Vaicājuma virknes autentifikācija ir pieejama klientiem, kuri nevar iestatīt savienojuma
galvenes, taču URL ir vieglāk nopludināt žurnālos.

## Izvēlieties, kam pieder konfigurācija

| Režīms | Pieslēdzieties ar | Konfigurācijas avots |
| --- | --- | --- |
| Saglabāts aģents | `?agent_id=12` | Publicēta uzvedne, balss, produkts, valodas, zināšanas un saderīgi serverī izpildāmi rīki |
| Iekļauts | Bez `agent_id` | Pirmais no jūsu klienta pieņemtais `session.update` |

### Saglabāts aģents

Pieslēdzieties ar publicētā aģenta ID:

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

Aģents tiek palaists, kamēr ligzda savienojas. Tā sveiciens paliek pieejams,
taču Realtime atspējo balss klusuma pārbaudes un neietver `transfer_call`
un `send_keypad_input`. Citi saderīgie rīki tiek izpildīti pakalpojumā ThunderPhone. Nesūtiet
šim režīmam iekļautas instrukcijas vai klientā izpildāmus rīkus.

Iestatiet pārraides audio pirms aģenta palaišanas, izmantojot vaicājuma parametrus
`input_audio_format`, `output_audio_format`, `input_rate` un `output_rate`. Pēc
pieslēgšanās nevarat mainīt saglabāto konfigurāciju vai audio formātus.

### Iekļauta sesija

Bez `agent_id` gaidiet `session.created`, pēc tam nosūtiet `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"
    }
  }
}
```

Pirmais pieņemtais atjauninājums iestata zvanu. `session.updated` nozīmē, ka
sesija ir aktīva. Pēc tam instrukcijas, balsi, produktu, rīkus un audio formātus
vairs nevar mainīt.

Iekļautām sesijām nav automātiska sveiciena vai balss klusuma pārbaudes. Lai
aģents runātu pirmais, pievienojiet sistēmas vai lietotāja ziņojumu un nosūtiet
`response.create`. Pilnīgi neaktīva sesija joprojām beidzas, sasniedzot platformas
klusā zvana limitu — pēc noklusējuma 600 sekundes.

## Izmantojiet oficiālo OpenAI SDK

Norādiet WebSocket bāzes URL, kas beidzas ar `/v1`; SDK pievieno `/realtime`. Vērtība
`model` ir saderības nosaukums un neizvēlas ThunderPhone
produktu. Izvēlieties produktu sesijas konfigurācijā vai saglabātajā aģentā.

Šī savienojuma pārbaude izveido iekļautu Bolt sesiju, drukā notikumus līdz
pirmajam `session.updated` un aizver savienojumu. Lai straumētu audio, izmantojiet
[minimālo Python klientu](/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())
```

Saglabājiet esošo ievades audio pievienošanas, atbildes audio deltu,
pārtraukumu, funkciju izsaukumu, kļūdu un korektas soketa aizvēršanas apstrādi. Iekļautās pielāgotās
funkcijas tiek izpildītas jūsu klientā; atgrieziet to rezultātus, izmantojot Realtime
protokolu. Saglabātā aģenta rīki tiek izpildīti pakalpojumā ThunderPhone.

## Sesijas dzīves cikls un kļūmes

Viens WebSocket savienojums apzīmē vienu zvanu. Nederīgs aģenta ID vai noraidīta iekļautā
konfigurācija rada `error` notikumu. Pirms sesijas uzskatīšanas par aktīvu gaidiet
`session.updated`. Norādiet faktiskos ievades un izvades formātus un
iztveršanas frekvences: PCM frekvences neatbilstība atskaņo audio pārāk ātri vai pārāk lēni,
nevis rada validācijas kļūdu.

Kad sesija ir sākta, korekti aizveriet soketu, kad jūsu lietojumprogramma ir
pabeigusi darbu. Iekļautās sesijās var izmantot klientā izpildāmas funkcijas. Saglabātā aģenta sesijās
tiek izmantoti saderīgi ThunderPhone izpildīti rīki, un tās nepiedāvā pārsūtīšanu vai tastatūras ievadi.

## Pārbaudiet integrāciju

Sāciet ar [minimālo Python WAV klientu](/api-reference/realtime#minimal-python-client)
un mono PCM16 WAV failu ar tajā norādīto frekvenci. Pārbaudiet:

1. Serveris pieņem konfigurāciju un nosūta `session.updated`.
2. Ievade rada transkripta un atbildes audio notikumus paredzētajā ātrumā.
3. Pārtraukums un atbildes atcelšana aptur atlikušo izvades audio.
4. Iekļauto funkciju rezultāti vai saglabātā aģenta rīku rezultāti tiek atgriezti modelim.
5. Nederīga ievade rada `error` notikumu, ko jūsu klients apstrādā.
6. Jūsu klients aizver soketu, un zvans parādās [Zvanu
   vēsturē](/lv/guides/review-calls).

[Realtime WebSocket atsauce](/api-reference/realtime) uzskaita pieņemtos
notikumus, audio formātus, sesijas laukus un pilnīgus piemērus.

## Izmaksas

Realtime zvaniem tiek piemērota izvēlētā produkta standarta maksa par minūti. Tiešo
transkripta deltu iespējošana visai sesijai pievieno piemaksu par minūti; tarifu skatiet sadaļā
[Tiešie transkripti](/api-reference/realtime#live-transcripts), bet produktu tarifus — sadaļā
[Cenas](/lv/guides/pricing).

`POST /v1/realtime/sessions` ir atsevišķs pārvaldīts LiveKit ceļš. Tas izveido
telpu un ierobežota tvēruma dalībnieka marķieri; tas nav nepieciešams tiešam WebSocket
savienojumam.

Informāciju par ietvaru integrācijām skatiet sadaļās [Izmantojiet ThunderPhone ar Pipecat](/lv/guides/use-with-pipecat)
un [Izmantojiet ThunderPhone ar LiveKit Agents](/lv/guides/use-with-livekit).
