---
title: "ThunderPhone सोबत OpenAI Realtime क्लायंट वापरा"
description: "जतन केलेला एजंट किंवा इनलाइन सत्र कॉन्फिगरेशन वापरून, OpenAI Realtime-सुसंगत सर्व्हर क्लायंट ThunderPhone कडे निर्देशित करा."
---

ThunderPhone OpenAI Realtime इव्हेंट मॉडेलचा निवडक उपसंच लागू करते.
विद्यमान सर्व्हर-साइड क्लायंट त्याचा WebSocket, ऑडिओ, सेशन आणि
रिस्पॉन्स इव्हेंट प्रवाह कायम ठेवून ThunderPhone व्हॉइस एजंट वापरू शकतो.

## कनेक्ट करण्यापूर्वी

तुम्हाला ThunderPhone संस्थेची गुप्त API की आणि WebSockets उघडू शकणारा सर्व्हर रनटाइम आवश्यक आहे. ब्राउझर कोडमधून कनेक्ट करू नका किंवा ब्राउझरला की उघड करू नका. जतन केलेला एजंट वापरण्यासाठी, प्रथम तो डिप्लॉय करा आणि त्याचा संख्यात्मक एजंट ID कॉपी करा.

याशी कनेक्ट करा:

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

तुमच्या सर्व्हरवरून WebSocket अपग्रेडचे प्रमाणीकरण करा:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

हँडशेक हेडर्स सेट करू न शकणाऱ्या क्लायंटसाठी क्वेरी-स्ट्रिंग प्रमाणीकरण उपलब्ध आहे, परंतु URLs लॉगमध्ये सहज लीक होऊ शकतात.

## कॉन्फिगरेशनचे नियंत्रण कोणाकडे आहे ते निवडा

| मोड | यासह कनेक्ट करा | कॉन्फिगरेशन स्रोत |
| --- | --- | --- |
| जतन केलेला एजंट | `?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. तुमचा क्लायंट सॉकेट बंद करतो आणि कॉल [कॉल
   इतिहासात](/mr/guides/review-calls) दिसतो.

[Realtime WebSocket संदर्भ](/api-reference/realtime) स्वीकारलेले इव्हेंट, ऑडिओ स्वरूप, सत्र फील्ड आणि संपूर्ण उदाहरणे सूचीबद्ध करतो.

## किंमत

Realtime कॉलसाठी निवडलेल्या उत्पादनाचा नेहमीचा प्रति-मिनिट दर लागू होतो. थेट ट्रान्स्क्रिप्ट डेल्टा सक्षम केल्यास संपूर्ण सत्रासाठी प्रति-मिनिट अधिभार लागू होतो; दरासाठी [थेट
ट्रान्स्क्रिप्ट्स](/api-reference/realtime#live-transcripts) आणि उत्पादन दरांसाठी
[किंमत](/mr/guides/pricing) पहा.

`POST /v1/realtime/sessions` हा स्वतंत्र व्यवस्थापित LiveKit मार्ग आहे. तो रूम आणि मर्यादित व्याप्तीचा सहभागी टोकन तयार करतो; थेट WebSocket कनेक्शनसाठी त्याची आवश्यकता नाही.

फ्रेमवर्क इंटिग्रेशनसाठी, [Pipecat मधून ThunderPhone वापरा](/mr/guides/use-with-pipecat)
आणि [LiveKit Agents मधून ThunderPhone वापरा](/mr/guides/use-with-livekit) पहा.
