---
title: "OpenAI Realtime क्लाइंट्स के साथ ThunderPhone का उपयोग करें"
description: "सेव किए गए एजेंट या इनलाइन सेशन कॉन्फ़िगरेशन का उपयोग करके, OpenAI Realtime-संगत सर्वर क्लाइंट को ThunderPhone पर पॉइंट करें।"
---

ThunderPhone, OpenAI Realtime इवेंट मॉडल का एक केंद्रित सबसेट लागू करता है।
मौजूदा सर्वर-साइड क्लाइंट, ThunderPhone वॉइस एजेंट का उपयोग करते हुए अपना WebSocket, ऑडियो, सेशन और
रिस्पॉन्स इवेंट फ्लो बनाए रख सकता है।

## कनेक्ट करने से पहले

आपको ThunderPhone संगठन की सीक्रेट API key और ऐसा सर्वर रनटाइम चाहिए जो
WebSockets खोल सके। ब्राउज़र कोड से कनेक्ट न करें और key को ब्राउज़र में एक्सपोज़ न करें।
सेव किए हुए एजेंट का उपयोग करने के लिए, पहले उसे डिप्लॉय करें और उसका न्यूमेरिक एजेंट ID कॉपी करें।

इससे कनेक्ट करें:

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

अपने सर्वर से WebSocket अपग्रेड को ऑथेंटिकेट करें:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

उन क्लाइंट के लिए क्वेरी-स्ट्रिंग ऑथेंटिकेशन उपलब्ध है जो हैंडशेक
हेडर्स सेट नहीं कर सकते, लेकिन URLs के लॉग में लीक होने की संभावना अधिक होती है।

## तय करें कि कॉन्फ़िगरेशन का स्वामित्व किसके पास है

| मोड | इसके साथ कनेक्ट करें | कॉन्फ़िगरेशन स्रोत |
| --- | --- | --- |
| सेव किया हुआ एजेंट | `?agent_id=12` | डिप्लॉय किया गया प्रॉम्प्ट, वॉइस, प्रोडक्ट, भाषाएँ, नॉलेज और संगत सर्वर-रन टूल्स |
| इनलाइन | कोई `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. आपका क्लाइंट सॉकेट बंद करता है और कॉल [कॉल
   हिस्ट्री](/hi/guides/review-calls) में दिखाई देती है।

[Realtime WebSocket रेफरेंस](/api-reference/realtime) स्वीकृत इवेंट, ऑडियो फॉर्मेट, सेशन फ़ील्ड और पूर्ण उदाहरण सूचीबद्ध करता है।

## लागत

Realtime कॉल चुने गए प्रोडक्ट की सामान्य प्रति-मिनट दर का उपयोग करती हैं। लाइव ट्रांसक्रिप्ट डेल्टा सक्षम करने पर पूरे सेशन के लिए प्रति-मिनट अधिभार जुड़ता है; दर के लिए [लाइव
ट्रांसक्रिप्ट](/api-reference/realtime#live-transcripts) और प्रोडक्ट दरों के लिए
[मूल्य निर्धारण](/hi/guides/pricing) देखें।

`POST /v1/realtime/sessions` एक अलग प्रबंधित LiveKit पाथ है। यह एक रूम और स्कोप्ड प्रतिभागी टोकन बनाता है; प्रत्यक्ष WebSocket कनेक्शन के लिए इसकी आवश्यकता नहीं है।

फ्रेमवर्क इंटीग्रेशन के लिए, [Pipecat से ThunderPhone का उपयोग करें](/hi/guides/use-with-pipecat)
और [LiveKit Agents से ThunderPhone का उपयोग करें](/hi/guides/use-with-livekit) देखें।
