---
title: "Tumia ThunderPhone na wateja wa OpenAI Realtime"
description: "Elekeza mteja wa seva unaooana na OpenAI Realtime kwenye ThunderPhone, ukitumia ama ejenti iliyohifadhiwa au usanidi wa kipindi uliowekwa ndani."
---

ThunderPhone hutekeleza seti ndogo iliyolengwa ya modeli ya matukio ya OpenAI Realtime.
Mteja wa upande wa seva aliyepo anaweza kudumisha mtiririko wake wa matukio ya WebSocket, sauti, sesheni na majibu huku akitumia ejenti ya sauti ya ThunderPhone.

## Kabla ya kuunganisha

Unahitaji ufunguo wa API wa siri wa shirika la ThunderPhone na mazingira ya utekelezaji ya seva yanayoweza kufungua WebSocket. Usiunganishe kutoka kwenye msimbo wa kivinjari au kufichua ufunguo kwa kivinjari. Ili kutumia ejenti iliyohifadhiwa, isambaze kwanza kisha unakili kitambulisho chake cha nambari.

Unganisha kwa:

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

Thibitisha uboreshaji wa WebSocket kutoka kwenye seva yako:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

Uthibitishaji wa query string unapatikana kwa wateja wasioweza kuweka vichwa vya handshake, lakini URL ni rahisi zaidi kuvuja kwenye logi.

## Chagua anayemiliki usanidi

| Hali | Unganisha kwa | Chanzo cha usanidi |
| --- | --- | --- |
| Ejenti iliyohifadhiwa | `?agent_id=12` | Prompt iliyosambazwa, sauti, bidhaa, lugha, maarifa na zana zinazooana zinazoendeshwa na seva |
| Ndani ya mstari | Hakuna `agent_id` | `session.update` ya kwanza inayokubaliwa kutoka kwa mteja wako |

### Ejenti iliyohifadhiwa

Unganisha kwa kitambulisho cha ejenti iliyosambazwa:

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

Ejenti huanza wakati soketi inaunganika. Salamu yake hubaki inapatikana,
lakini Realtime huzima ukaguzi wake wa kimya unaosemwa na huacha `transfer_call`
na `send_keypad_input`. Zana zingine zinazooana huendeshwa kwenye ThunderPhone. Usitume maelekezo ya ndani ya mstari au zana zinazotekelezwa na mteja kwa hali hii.

Weka sauti ya muunganisho kabla ejenti haijaanza kwa vigezo vya query vya `input_audio_format`,
`output_audio_format`, `input_rate`, na `output_rate`. Huwezi kubadilisha usanidi uliohifadhiwa au fomati za sauti baada ya kuunganisha.

### Sesheni ya ndani ya mstari

Bila `agent_id`, subiri `session.created`, kisha tuma `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"
    }
  }
}
```

Sasisho la kwanza linalokubaliwa huandaa simu. `session.updated` inamaanisha
sesheni inaanza kutumika. Maelekezo, sauti, bidhaa, zana na fomati za sauti haziwezi
kubadilishwa baada ya hapo.

Sesheni za ndani ya mstari hazina salamu ya kiotomatiki au ukaguzi wa kimya unaosemwa. Ili
kumfanya ejenti aanze kuzungumza, ongeza ujumbe wa mfumo au wa mtumiaji kisha tuma
`response.create`. Sesheni isiyo na shughuli kabisa bado huisha katika kikomo cha simu kimya cha jukwaa, sekunde 600 kwa chaguo-msingi.

## Tumia SDK rasmi ya OpenAI

Pitisha URL msingi ya WebSocket inayoishia na `/v1`; SDK huongeza `/realtime`. Thamani ya
`model` ni jina la uoanifu na haichagui bidhaa ya ThunderPhone.
Chagua bidhaa katika usanidi wa kipindi au ejenti iliyohifadhiwa.

Ukaguzi huu wa muunganisho huunda kipindi cha Bolt cha ndani, huchapisha matukio hadi
`session.updated` ya kwanza, kisha hufunga. Tumia [mteja mdogo wa
Python](/api-reference/realtime#minimal-python-client) kutiririsha sauti.

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

Dumisha ushughulikiaji wako uliopo wa kuongeza sauti ya ingizo, delta za sauti za
majibu, ukatizaji, miito ya function, hitilafu, na kufunga socket kwa usafi.
Function maalum za ndani hutekelezwa katika mteja wako; rudisha matokeo yake kupitia
itifaki ya Realtime. Zana za ejenti iliyohifadhiwa hutekelezwa kwenye ThunderPhone.

## Mzunguko wa maisha wa kipindi na hitilafu

WebSocket moja inawakilisha simu moja. Kitambulisho batili cha ejenti au usanidi wa
ndani uliokataliwa huzalisha tukio la `error`. Subiri `session.updated` kabla ya
kuchukulia kipindi kuwa kinafanya kazi. Bainisha fomati halisi za ingizo na towe pamoja
na viwango vya sampuli: kutolingana kwa kiwango cha PCM hucheza sauti kwa kasi mno au
polepole mno badala ya kuzalisha hitilafu ya uthibitishaji.

Baada ya kipindi kuanza, funga socket kwa usafi programu yako inapomaliza. Vipindi vya
ndani vinaweza kutumia function zinazotekelezwa na mteja. Vipindi vya ejenti
iliyohifadhiwa hutumia zana zinazooana zinazoendeshwa na ThunderPhone na havitoi uhamisho
wala ingizo la keypad.

## Jaribu ujumuishaji

Anza na [mteja mdogo wa Python WAV](/api-reference/realtime#minimal-python-client)
na WAV ya mono PCM16 katika kiwango chake cha sampuli kilichobainishwa. Thibitisha:

1. Seva inakubali usanidi na kutuma `session.updated`.
2. Ingizo huzalisha matukio ya nakala na sauti ya jibu kwa kasi inayotarajiwa.
3. Ukatizaji na kughairi jibu husimamisha sauti ya towe iliyosalia.
4. Matokeo ya function ya ndani au matokeo ya zana ya ejenti iliyohifadhiwa hurudi kwenye model.
5. Ingizo batili huzalisha tukio la `error` ambalo mteja wako hushughulikia.
6. Mteja wako hufunga socket na simu huonekana katika [Historia ya
   simu](/sw/guides/review-calls).

[Marejeleo ya Realtime WebSocket](/api-reference/realtime) yanaorodhesha matukio
yanayokubaliwa, fomati za sauti, sehemu za kipindi, na mifano kamili.

## Gharama

Simu za Realtime hutumia kiwango cha kawaida cha kila dakika cha bidhaa iliyochaguliwa.
Kuwasha delta za nakala za moja kwa moja huongeza ada ya kila dakika kwa kipindi chote;
tazama [Nakala za moja kwa moja](/api-reference/realtime#live-transcripts) kwa kiwango
na [Bei](/sw/guides/pricing) kwa viwango vya bidhaa.

`POST /v1/realtime/sessions` ni njia tofauti inayosimamiwa ya LiveKit. Huunda chumba na
tokeni ya mshiriki yenye upeo maalum; haihitajiki kwa muunganisho wa moja kwa moja wa
WebSocket.

Kwa ujumuishaji wa framework, tazama [Tumia ThunderPhone kutoka Pipecat](/sw/guides/use-with-pipecat)
na [Tumia ThunderPhone kutoka LiveKit Agents](/sw/guides/use-with-livekit).
