---
title: "Naudokite ThunderPhone su OpenAI Realtime klientais"
description: "Nukreipkite su OpenAI Realtime suderinamą serverio klientą į ThunderPhone, naudodami išsaugotą agentą arba įterptinę sesijos konfigūraciją."
---

ThunderPhone įgyvendina tikslinį OpenAI Realtime įvykių modelio poaibį.
Esamas serverio pusės klientas gali išlaikyti savo WebSocket, garso, sesijos ir
atsako įvykių srautą naudodamas ThunderPhone balso agentą.

## Prieš prisijungdami

Jums reikia ThunderPhone organizacijos slaptojo API rakto ir serverio vykdymo aplinkos,
galinčios atidaryti WebSocket ryšius. Nejunkite iš naršyklės kodo ir neatskleiskite
rakto naršyklei. Norėdami naudoti išsaugotą agentą, pirmiausia jį įdiekite ir
nukopijuokite jo skaitinį agento ID.

Prisijunkite prie:

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

Autentifikuokite WebSocket atnaujinimą iš savo serverio:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Užklausos eilutės autentifikavimas galimas klientams, kurie negali nustatyti
prisijungimo antraščių, tačiau URL lengviau patenka į žurnalus.

## Pasirinkite, kam priklauso konfigūracija

| Režimas | Prisijunkite naudodami | Konfigūracijos šaltinis |
| --- | --- | --- |
| Išsaugotas agentas | `?agent_id=12` | Įdiegta instrukcija, balsas, produktas, kalbos, žinių bazė ir suderinami serveryje vykdomi įrankiai |
| Įterptinis | Be `agent_id` | Pirmasis iš jūsų kliento priimtas `session.update` |

### Išsaugotas agentas

Prisijunkite naudodami įdiegto agento ID:

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

Agentas paleidžiamas jungiantis lizdu. Jo pasisveikinimas lieka pasiekiamas,
tačiau Realtime išjungia jo sakytinius tylos patikrinimus ir neįtraukia `transfer_call`
bei `send_keypad_input`. Kiti suderinami įrankiai vykdomi ThunderPhone. Šiam režimui
nesiųskite įterptinių instrukcijų ar kliento vykdomų įrankių.

Prieš paleidžiant agentą nustatykite perdavimo garso parametrus naudodami
`input_audio_format`, `output_audio_format`, `input_rate` ir `output_rate` užklausos parametrus. Po prisijungimo
negalite keisti išsaugotos konfigūracijos ar garso formatų.

### Įterptinė sesija

Be `agent_id`, palaukite `session.created`, tada siųskite `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"
    }
  }
}
```

Pirmasis priimtas atnaujinimas parengia skambutį. `session.updated` reiškia, kad
sesija aktyvi. Po to instrukcijų, balso, produkto, įrankių ir garso formatų
keisti negalima.

Įterptinės sesijos neturi automatinio pasisveikinimo ar sakytinių tylos patikrinimų. Kad
agentas pradėtų kalbėti pirmas, pridėkite sistemos arba naudotojo pranešimą ir siųskite
`response.create`. Visiškai neaktyvi sesija vis tiek baigiasi pasiekus platformos
tylaus skambučio ribą, kuri pagal numatytuosius nustatymus yra 600 sekundžių.

## Naudokite oficialų OpenAI SDK

Nurodykite WebSocket bazinį URL, kuris baigiasi `/v1`; SDK prideda `/realtime`. 
`model` reikšmė yra suderinamumo pavadinimas ir nepasirenka ThunderPhone
produkto. Produktą pasirinkite sesijos konfigūracijoje arba išsaugotame agente.

Ši ryšio patikra sukuria įterptinę Bolt sesiją, išveda įvykius iki pirmojo
`session.updated` ir užsidaro. Garsui transliuoti naudokite [minimalų Python
klientą](/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())
```

Išlaikykite esamą įvesties garso pridėjimo, atsako garso deltų,
pertraukimų, funkcijų iškvietimų, klaidų ir tvarkingo lizdo uždarymo apdorojimą. Įterptinės pasirinktinės
funkcijos vykdomos jūsų kliente; jų rezultatus grąžinkite per Realtime
protokolą. Išsaugoto agente įrankiai vykdomi ThunderPhone.

## Sesijos gyvavimo ciklas ir gedimai

Vienas WebSocket reiškia vieną skambutį. Netinkamas agento ID arba atmesta įterptinė
konfigūracija sukuria `error` įvykį. Prieš laikydami sesiją aktyvia, palaukite
`session.updated`. Nurodykite faktinius įvesties ir išvesties formatus bei
diskretizavimo dažnius: dėl PCM dažnio neatitikties garsas atkuriamas per greitai arba per lėtai,
užuot sukėlus patvirtinimo klaidą.

Prasidėjus sesijai, tvarkingai uždarykite lizdą, kai programa baigia darbą.
Įterptinės sesijos gali naudoti kliento vykdomas funkcijas. Išsaugoto agento sesijos
naudoja suderinamus ThunderPhone vykdomus įrankius ir nesiūlo perdavimo ar klaviatūros įvesties.

## Išbandykite integraciją

Pradėkite nuo [minimalaus Python WAV kliento](/api-reference/realtime#minimal-python-client)
ir mono PCM16 WAV failo jo nurodytu dažniu. Patikrinkite:

1. Serveris priima konfigūraciją ir siunčia `session.updated`.
2. Įvestis sukuria transkripto ir atsako garso įvykius numatytu greičiu.
3. Pertraukimas ir atsako atšaukimas sustabdo likusį išvesties garsą.
4. Įterptinių funkcijų rezultatai arba išsaugoto agento įrankių rezultatai grąžinami modeliui.
5. Netinkama įvestis sukuria `error` įvykį, kurį apdoroja jūsų klientas.
6. Jūsų klientas uždaro lizdą, o skambutis rodomas [Skambučių
   istorijoje](/lt/guides/review-calls).

[Realtime WebSocket nuorodoje](/api-reference/realtime) pateikiami priimami
įvykiai, garso formatai, sesijos laukai ir išsamūs pavyzdžiai.

## Kaina

Realtime skambučiams taikomas įprastas pasirinkto produkto minutinis tarifas. Įjungus tiesioginius
transkripto delta atnaujinimus, visai sesijai pridedamas minutinis mokestis; tarifą žr. [Tiesioginiuose
transkriptuose](/api-reference/realtime#live-transcripts), o produktų tarifus – [Kainodaroje](/lt/guides/pricing).

`POST /v1/realtime/sessions` yra atskiras valdomas LiveKit kelias. Jis sukuria
kambarį ir dalyvio prieigos raktą su nustatyta aprėptimi; jis nereikalingas tiesioginiam WebSocket
ryšiui.

Karkasų integracijoms žr. [Naudokite ThunderPhone su Pipecat](/lt/guides/use-with-pipecat)
ir [Naudokite ThunderPhone su LiveKit Agents](/lt/guides/use-with-livekit).
