---
title: "OpenAI Realtime ਕਲਾਇੰਟਾਂ ਨਾਲ ThunderPhone ਵਰਤੋ"
description: "ਸੇਵ ਕੀਤੇ ਏਜੰਟ ਜਾਂ ਇਨਲਾਈਨ ਸੈਸ਼ਨ ਕਨਫਿਗਰੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, OpenAI Realtime-ਅਨੁਕੂਲ ਸਰਵਰ ਕਲਾਇੰਟ ਨੂੰ ThunderPhone ਵੱਲ ਨਿਰਦੇਸ਼ਿਤ ਕਰੋ।"
---

ThunderPhone OpenAI Realtime ਇਵੈਂਟ ਮਾਡਲ ਦਾ ਇੱਕ ਕੇਂਦਰਿਤ ਸਬਸੈੱਟ ਲਾਗੂ ਕਰਦਾ ਹੈ।
ਇੱਕ ਮੌਜੂਦਾ ਸਰਵਰ-ਸਾਈਡ ਕਲਾਇੰਟ ThunderPhone ਵੌਇਸ ਏਜੰਟ ਵਰਤਦੇ ਹੋਏ ਆਪਣਾ WebSocket, ਆਡੀਓ, ਸੈਸ਼ਨ ਅਤੇ
ਰਿਸਪਾਂਸ ਇਵੈਂਟ ਫ਼ਲੋ ਬਰਕਰਾਰ ਰੱਖ ਸਕਦਾ ਹੈ।

## ਕਨੈਕਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ

ਤੁਹਾਨੂੰ ThunderPhone ਸੰਗਠਨ ਦੀ ਗੁਪਤ API ਕੁੰਜੀ ਅਤੇ ਇੱਕ ਸਰਵਰ ਰਨਟਾਈਮ ਚਾਹੀਦਾ ਹੈ ਜੋ
WebSockets ਖੋਲ੍ਹ ਸਕੇ। ਬ੍ਰਾਊਜ਼ਰ ਕੋਡ ਤੋਂ ਕਨੈਕਟ ਨਾ ਕਰੋ ਅਤੇ ਕੁੰਜੀ ਨੂੰ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਉਜਾਗਰ ਨਾ ਕਰੋ।
ਸੇਵ ਕੀਤਾ ਏਜੰਟ ਵਰਤਣ ਲਈ, ਪਹਿਲਾਂ ਉਸਨੂੰ ਡਿਪਲੌਇ ਕਰੋ ਅਤੇ ਉਸਦੀ ਅੰਕੀ ਏਜੰਟ 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. ਤੁਹਾਡਾ ਕਲਾਇੰਟ ਸਾਕਟ ਬੰਦ ਕਰਦਾ ਹੈ ਅਤੇ ਕਾਲ [ਕਾਲ ਇਤਿਹਾਸ](/pa/guides/review-calls) ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ।

[Realtime WebSocket ਹਵਾਲਾ](/api-reference/realtime) ਸਵੀਕਾਰ ਕੀਤੇ ਇਵੈਂਟਾਂ, ਆਡੀਓ ਫਾਰਮੈਟਾਂ, ਸੈਸ਼ਨ ਫੀਲਡਾਂ ਅਤੇ ਪੂਰੀਆਂ ਉਦਾਹਰਨਾਂ ਦੀ ਸੂਚੀ ਦਿੰਦਾ ਹੈ।

## ਲਾਗਤ

Realtime ਕਾਲਾਂ ਚੁਣੇ ਗਏ ਉਤਪਾਦ ਦੀ ਆਮ ਪ੍ਰਤੀ-ਮਿੰਟ ਦਰ ਵਰਤਦੀਆਂ ਹਨ। ਲਾਈਵ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਡੈਲਟਾ ਸਮਰੱਥ ਕਰਨ ਨਾਲ ਪੂਰੇ ਸੈਸ਼ਨ ਲਈ ਪ੍ਰਤੀ-ਮਿੰਟ ਵਾਧੂ ਸ਼ੁਲਕ ਲੱਗਦਾ ਹੈ; ਦਰ ਲਈ [ਲਾਈਵ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟਾਂ](/api-reference/realtime#live-transcripts) ਅਤੇ ਉਤਪਾਦ ਦਰਾਂ ਲਈ [ਕੀਮਤਾਂ](/pa/guides/pricing) ਵੇਖੋ।

`POST /v1/realtime/sessions` ਇੱਕ ਵੱਖਰਾ ਪ੍ਰਬੰਧਿਤ LiveKit ਮਾਰਗ ਹੈ। ਇਹ ਇੱਕ ਰੂਮ ਅਤੇ ਸੀਮਿਤ ਭਾਗੀਦਾਰ ਟੋਕਨ ਬਣਾਉਂਦਾ ਹੈ; ਸਿੱਧੇ WebSocket ਕਨੈਕਸ਼ਨ ਲਈ ਇਸਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।

ਫਰੇਮਵਰਕ ਇੰਟੀਗ੍ਰੇਸ਼ਨਾਂ ਲਈ, [Pipecat ਤੋਂ ThunderPhone ਵਰਤੋ](/pa/guides/use-with-pipecat) ਅਤੇ [LiveKit Agents ਤੋਂ ThunderPhone ਵਰਤੋ](/pa/guides/use-with-livekit) ਵੇਖੋ।
