---
title: "OpenAI Realtime క్లయింట్‌లతో ThunderPhoneను ఉపయోగించండి"
description: "సేవ్ చేసిన ఏజెంట్ లేదా ఇన్‌లైన్ సెషన్ కాన్ఫిగరేషన్‌ను ఉపయోగించి, OpenAI Realtimeకు అనుకూలమైన సర్వర్ క్లయింట్‌ను ThunderPhoneకు సూచించండి."
---

ThunderPhone, OpenAI Realtime ఈవెంట్ మోడల్‌లోని నిర్దిష్ట ఉపసమితిని అమలు చేస్తుంది.
ఇప్పటికే ఉన్న సర్వర్-సైడ్ క్లయింట్, ThunderPhone వాయిస్ ఏజెంట్‌ను ఉపయోగిస్తున్నప్పటికీ తన WebSocket, ఆడియో, సెషన్, మరియు
ప్రతిస్పందన ఈవెంట్ ఫ్లోను కొనసాగించవచ్చు.

## కనెక్ట్ చేయడానికి ముందు

మీకు ThunderPhone సంస్థ సీక్రెట్ API కీ మరియు WebSocketలను తెరవగల సర్వర్ రన్‌టైమ్
అవసరం. బ్రౌజర్ కోడ్ నుండి కనెక్ట్ చేయవద్దు లేదా కీని బ్రౌజర్‌కు బహిర్గతం చేయవద్దు.
సేవ్ చేసిన ఏజెంట్‌ను ఉపయోగించడానికి, ముందుగా దాన్ని డిప్లాయ్ చేసి దాని సంఖ్యా ఏజెంట్ IDని కాపీ చేయండి.

దీనికి కనెక్ట్ చేయండి:

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

మీ సర్వర్ నుండి WebSocket అప్‌గ్రేడ్‌ను ధృవీకరించండి:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

హ్యాండ్‌షేక్ హెడర్‌లను సెట్ చేయలేని క్లయింట్‌ల కోసం క్వెరీ-స్ట్రింగ్
ధృవీకరణ అందుబాటులో ఉంది, కానీ URLలు లాగ్‌లలోకి సులభంగా లీక్ అవుతాయి.

## కాన్ఫిగరేషన్‌ను ఎవరు నియంత్రిస్తారో ఎంచుకోండి

| మోడ్ | దీనితో కనెక్ట్ చేయండి | కాన్ఫిగరేషన్ మూలం |
| --- | --- | --- |
| సేవ్ చేసిన ఏజెంట్ | `?agent_id=12` | డిప్లాయ్ చేసిన prompt, వాయిస్, ఉత్పత్తి, భాషలు, నాలెడ్జ్, మరియు అనుకూల సర్వర్‌లో నడిచే టూల్స్ |
| ఇన్‌లైన్ | `agent_id` లేదు | మీ క్లయింట్ నుండి ఆమోదించబడిన మొదటి `session.update` |

### సేవ్ చేసిన ఏజెంట్

డిప్లాయ్ చేసిన ఏజెంట్ IDతో కనెక్ట్ చేయండి:

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

సాకెట్ కనెక్ట్ అవుతున్నప్పుడు ఏజెంట్ ప్రారంభమవుతుంది. దాని అభివాదం అందుబాటులోనే ఉంటుంది,
కానీ Realtime దాని మౌఖిక నిశ్శబ్ద చెక్-ఇన్‌లను నిలిపివేస్తుంది మరియు `transfer_call`
మరియు `send_keypad_input`ను మినహాయిస్తుంది. ఇతర అనుకూల టూల్స్ ThunderPhoneలో నడుస్తాయి. ఈ మోడ్ కోసం
ఇన్‌లైన్ సూచనలు లేదా క్లయింట్ అమలు చేసే టూల్స్‌ను పంపవద్దు.

ఏజెంట్ ప్రారంభం కావడానికి ముందు `input_audio_format`,
`output_audio_format`, `input_rate`, మరియు `output_rate` క్వెరీ పరామీటర్‌లతో వైర్ ఆడియోను సెట్ చేయండి. మీరు
కనెక్ట్ అయిన తర్వాత సేవ్ చేసిన కాన్ఫిగరేషన్ లేదా ఆడియో ఫార్మాట్‌లను మార్చలేరు.

### ఇన్‌లైన్ సెషన్

`agent_id` లేకుండా, `session.created` కోసం వేచి ఉండి, ఆపై `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"
    }
  }
}
```

ఆమోదించబడిన మొదటి అప్‌డేట్ కాల్‌ను ప్రొవిజన్ చేస్తుంది. `session.updated` అంటే
సెషన్ సక్రియంగా ఉంది. ఆ తర్వాత సూచనలు, వాయిస్, ఉత్పత్తి, టూల్స్, మరియు ఆడియో ఫార్మాట్‌లను
మార్చలేరు.

ఇన్‌లైన్ సెషన్‌లకు స్వయంచాలక అభివాదం లేదా మౌఖిక నిశ్శబ్ద చెక్-ఇన్‌లు ఉండవు. ఏజెంట్ ముందుగా మాట్లాడేలా చేయడానికి,
సిస్టమ్ లేదా వినియోగదారు సందేశాన్ని జోడించి `response.create`ను పంపండి. పూర్తిగా నిష్క్రియమైన సెషన్ కూడా ప్లాట్‌ఫారమ్
నిశ్శబ్ద-కాల్ పరిమితి వద్ద ముగుస్తుంది; డిఫాల్ట్‌గా అది 600 సెకన్లు.

## అధికారిక OpenAI SDKని ఉపయోగించండి

`/v1`తో ముగిసే WebSocket బేస్ URLను పంపండి; SDK `/realtime`ను జోడిస్తుంది. `model` విలువ అనుకూలత పేరు మాత్రమే మరియు ThunderPhone ఉత్పత్తిని ఎంచుకోదు. సెషన్ కాన్ఫిగరేషన్‌లో లేదా సేవ్ చేసిన ఏజెంట్‌లో ఉత్పత్తిని ఎంచుకోండి.

ఈ కనెక్షన్ తనిఖీ ఇన్‌లైన్ Bolt సెషన్‌ను సృష్టించి, మొదటి `session.updated` వరకు ఈవెంట్‌లను ముద్రించి, ఆపై మూసివేస్తుంది. ఆడియోను స్ట్రీమ్ చేయడానికి [కనీస Python క్లయింట్](/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())
```

ఇన్‌పుట్-ఆడియో జోడింపు, ప్రతిస్పందన ఆడియో డెల్టాలు, అంతరాయాలు, ఫంక్షన్ కాల్‌లు, లోపాలు మరియు సక్రమమైన సాకెట్ మూసివేత కోసం మీ ప్రస్తుత నిర్వహణను కొనసాగించండి. ఇన్‌లైన్ కస్టమ్ ఫంక్షన్‌లు మీ క్లయింట్‌లో అమలవుతాయి; వాటి ఫలితాలను Realtime ప్రోటోకాల్ ద్వారా తిరిగి పంపండి. సేవ్ చేసిన ఏజెంట్ టూల్‌లు ThunderPhoneలో అమలవుతాయి.

## సెషన్ జీవితచక్రం మరియు వైఫల్యాలు

ఒక WebSocket ఒక కాల్‌ను సూచిస్తుంది. చెల్లని ఏజెంట్ ID లేదా తిరస్కరించబడిన ఇన్‌లైన్ కాన్ఫిగరేషన్ `error` ఈవెంట్‌ను ఉత్పత్తి చేస్తుంది. సెషన్‌ను సక్రియంగా పరిగణించే ముందు `session.updated` కోసం వేచి ఉండండి. వాస్తవ ఇన్‌పుట్ మరియు అవుట్‌పుట్ ఫార్మాట్‌లు, అలాగే నమూనా రేట్లను పేర్కొనండి: PCM రేటు అసమతుల్యత ధ్రువీకరణ లోపాన్ని ఉత్పత్తి చేయకుండా ఆడియోను చాలా వేగంగా లేదా చాలా నెమ్మదిగా ప్లే చేస్తుంది.

సెషన్ ప్రారంభమైన తర్వాత, మీ అప్లికేషన్ పూర్తయినప్పుడు సాకెట్‌ను సక్రమంగా మూసివేయండి. ఇన్‌లైన్ సెషన్‌లు క్లయింట్‌లో అమలయ్యే ఫంక్షన్‌లను ఉపయోగించవచ్చు. సేవ్ చేసిన ఏజెంట్ సెషన్‌లు అనుకూలమైన ThunderPhone-నిర్వహిత టూల్‌లను ఉపయోగిస్తాయి మరియు బదిలీ లేదా కీప్యాడ్ ఇన్‌పుట్‌ను అందించవు.

## ఇంటిగ్రేషన్‌ను పరీక్షించండి

[కనీస Python WAV క్లయింట్](/api-reference/realtime#minimal-python-client)తో మరియు అది పేర్కొన్న రేటులోని మోనో PCM16 WAVతో ప్రారంభించండి. వీటిని ధ్రువీకరించండి:

1. సర్వర్ కాన్ఫిగరేషన్‌ను అంగీకరించి `session.updated`ను పంపుతుంది.
2. ఇన్‌పుట్ ఆశించిన వేగంతో ట్రాన్స్‌క్రిప్ట్ మరియు ప్రతిస్పందన-ఆడియో ఈవెంట్‌లను ఉత్పత్తి చేస్తుంది.
3. అంతరాయం మరియు ప్రతిస్పందన రద్దు మిగిలిన అవుట్‌పుట్ ఆడియోను నిలిపివేస్తాయి.
4. ఇన్‌లైన్ ఫంక్షన్ ఫలితాలు లేదా సేవ్ చేసిన ఏజెంట్ టూల్ ఫలితాలు మోడల్‌కు తిరిగి చేరుతాయి.
5. చెల్లని ఇన్‌పుట్ మీ క్లయింట్ నిర్వహించే `error` ఈవెంట్‌ను ఉత్పత్తి చేస్తుంది.
6. మీ క్లయింట్ సాకెట్‌ను మూసివేస్తుంది మరియు కాల్ [కాల్ చరిత్ర](/te/guides/review-calls)లో కనిపిస్తుంది.

[Realtime WebSocket రిఫరెన్స్](/api-reference/realtime) ఆమోదించబడిన ఈవెంట్‌లు, ఆడియో ఫార్మాట్‌లు, సెషన్ ఫీల్డ్‌లు మరియు పూర్తి ఉదాహరణలను జాబితా చేస్తుంది.

## ఖర్చు

Realtime కాల్‌లు ఎంచుకున్న ఉత్పత్తి యొక్క సాధారణ నిమిషానికి రేటును ఉపయోగిస్తాయి. లైవ్ ట్రాన్స్‌క్రిప్ట్ డెల్టాలను ప్రారంభించడం వలన మొత్తం సెషన్‌కు నిమిషానికి అదనపు ఛార్జీ జోడించబడుతుంది; రేటు కోసం [లైవ్ ట్రాన్స్‌క్రిప్ట్‌లు](/api-reference/realtime#live-transcripts)ను మరియు ఉత్పత్తి రేట్ల కోసం [ధరలు](/te/guides/pricing)ను చూడండి.

`POST /v1/realtime/sessions` అనేది వేరొక నిర్వహిత LiveKit మార్గం. ఇది ఒక గదిని మరియు పరిమిత భాగస్వామి టోకెన్‌ను సృష్టిస్తుంది; ప్రత్యక్ష WebSocket కనెక్షన్‌కు ఇది అవసరం లేదు.

ఫ్రేమ్‌వర్క్ ఇంటిగ్రేషన్‌ల కోసం, [Pipecat నుండి ThunderPhoneను ఉపయోగించండి](/te/guides/use-with-pipecat) మరియు [LiveKit Agents నుండి ThunderPhoneను ఉపయోగించండి](/te/guides/use-with-livekit) చూడండి.
