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

ഹാൻഡ്‌ഷേക്ക് ഹെഡറുകൾ സജ്ജീകരിക്കാൻ കഴിയാത്ത ക്ലയന്റുകൾക്കായി ക്വറി-സ്ട്രിംഗ് ഓതന്റിക്കേഷൻ ലഭ്യമാണ്, പക്ഷേ 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. നിങ്ങളുടെ ക്ലയന്റ് സോക്കറ്റ് അടയ്ക്കുകയും കോൾ [കോൾ
   ചരിത്രത്തിൽ](/ml/guides/review-calls) ദൃശ്യമാകുകയും ചെയ്യുന്നു.

സ്വീകരിക്കുന്ന ഇവന്റുകൾ, ഓഡിയോ ഫോർമാറ്റുകൾ, സെഷൻ ഫീൽഡുകൾ, പൂർണ്ണ ഉദാഹരണങ്ങൾ എന്നിവ [Realtime WebSocket റഫറൻസിൽ](/api-reference/realtime) പട്ടികപ്പെടുത്തിയിരിക്കുന്നു.

## ചെലവ്

Realtime കോളുകൾ തിരഞ്ഞെടുത്ത ഉൽപ്പന്നത്തിന്റെ സാധാരണ മിനിറ്റിന് നിരക്ക് ഉപയോഗിക്കുന്നു. ലൈവ് ട്രാൻസ്ക്രിപ്റ്റ് ഡെൽറ്റകൾ പ്രവർത്തനക്ഷമമാക്കുന്നത് മുഴുവൻ സെഷനുമുള്ള മിനിറ്റിന് അധിക നിരക്ക് ചേർക്കുന്നു; നിരക്കിനായി [ലൈവ്
ട്രാൻസ്ക്രിപ്റ്റുകൾ](/api-reference/realtime#live-transcripts) കാണുക, ഉൽപ്പന്ന നിരക്കുകൾക്കായി [വിലനിർണയം](/ml/guides/pricing) കാണുക.

`POST /v1/realtime/sessions` ഒരു പ്രത്യേകമായി മാനേജ് ചെയ്യുന്ന LiveKit പാതയാണ്. ഇത് ഒരു റൂമും സ്കോപ്പ് ചെയ്ത പങ്കാളി ടോക്കണും സൃഷ്ടിക്കുന്നു; നേരിട്ടുള്ള WebSocket കണക്ഷന് ഇത് ആവശ്യമില്ല.

ഫ്രെയിംവർക്ക് ഇന്റഗ്രേഷനുകൾക്കായി, [Pipecat-ൽ നിന്ന് ThunderPhone ഉപയോഗിക്കുക](/ml/guides/use-with-pipecat)
എന്നതും [LiveKit Agents-ൽ നിന്ന് ThunderPhone ഉപയോഗിക്കുക](/ml/guides/use-with-livekit) എന്നതും കാണുക.
