Open in
OpenAI Realtime ਕਲਾਇੰਟਾਂ ਨਾਲ ThunderPhone ਵਰਤੋ
ਸੇਵ ਕੀਤੇ ਏਜੰਟ ਜਾਂ ਇਨਲਾਈਨ ਸੈਸ਼ਨ ਕਨਫਿਗਰੇਸ਼ਨ ਦੀ ਵਰਤੋਂ ਕਰਕੇ, OpenAI Realtime-ਅਨੁਕੂਲ ਸਰਵਰ ਕਲਾਇੰਟ ਨੂੰ ThunderPhone ਵੱਲ ਨਿਰਦੇਸ਼ਿਤ ਕਰੋ।
ThunderPhone OpenAI Realtime ਇਵੈਂਟ ਮਾਡਲ ਦਾ ਇੱਕ ਕੇਂਦਰਿਤ ਸਬਸੈੱਟ ਲਾਗੂ ਕਰਦਾ ਹੈ। ਇੱਕ ਮੌਜੂਦਾ ਸਰਵਰ-ਸਾਈਡ ਕਲਾਇੰਟ ThunderPhone ਵੌਇਸ ਏਜੰਟ ਵਰਤਦੇ ਹੋਏ ਆਪਣਾ WebSocket, ਆਡੀਓ, ਸੈਸ਼ਨ ਅਤੇ ਰਿਸਪਾਂਸ ਇਵੈਂਟ ਫ਼ਲੋ ਬਰਕਰਾਰ ਰੱਖ ਸਕਦਾ ਹੈ।
ਕਨੈਕਟ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ
ਤੁਹਾਨੂੰ ThunderPhone ਸੰਗਠਨ ਦੀ ਗੁਪਤ API ਕੁੰਜੀ ਅਤੇ ਇੱਕ ਸਰਵਰ ਰਨਟਾਈਮ ਚਾਹੀਦਾ ਹੈ ਜੋ WebSockets ਖੋਲ੍ਹ ਸਕੇ। ਬ੍ਰਾਊਜ਼ਰ ਕੋਡ ਤੋਂ ਕਨੈਕਟ ਨਾ ਕਰੋ ਅਤੇ ਕੁੰਜੀ ਨੂੰ ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਉਜਾਗਰ ਨਾ ਕਰੋ। ਸੇਵ ਕੀਤਾ ਏਜੰਟ ਵਰਤਣ ਲਈ, ਪਹਿਲਾਂ ਉਸਨੂੰ ਡਿਪਲੌਇ ਕਰੋ ਅਤੇ ਉਸਦੀ ਅੰਕੀ ਏਜੰਟ ID ਕਾਪੀ ਕਰੋ।
ਇਸ ਨਾਲ ਕਨੈਕਟ ਕਰੋ:
wss://api.thunderphone.com/v1/realtimeਆਪਣੇ ਸਰਵਰ ਤੋਂ WebSocket ਅੱਪਗ੍ਰੇਡ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰੋ:
Authorization: Bearer sk_live_YOUR_API_KEYਜੋ ਕਲਾਇੰਟ ਹੈਂਡਸ਼ੇਕ ਹੈਡਰ ਸੈੱਟ ਨਹੀਂ ਕਰ ਸਕਦੇ, ਉਨ੍ਹਾਂ ਲਈ ਕਵੇਰੀ-ਸਟਰਿੰਗ ਪ੍ਰਮਾਣਿਕਤਾ ਉਪਲਬਧ ਹੈ, ਪਰ URL ਲੌਗਾਂ ਵਿੱਚ ਆਸਾਨੀ ਨਾਲ ਲੀਕ ਹੋ ਸਕਦੇ ਹਨ।
ਚੁਣੋ ਕਿ ਕੌਂਫ਼ਿਗਰੇਸ਼ਨ ਦਾ ਮਾਲਕ ਕੌਣ ਹੈ
| ਮੋਡ | ਇਸ ਨਾਲ ਕਨੈਕਟ ਕਰੋ | ਕੌਂਫ਼ਿਗਰੇਸ਼ਨ ਸਰੋਤ |
|---|---|---|
| ਸੇਵ ਕੀਤਾ ਏਜੰਟ | ?agent_id=12 | ਡਿਪਲੌਇ ਕੀਤਾ prompt, ਵੌਇਸ, ਉਤਪਾਦ, ਭਾਸ਼ਾਵਾਂ, ਗਿਆਨ ਅਤੇ ਅਨੁਕੂਲ ਸਰਵਰ-ਚਲਾਏ ਟੂਲ |
| ਇਨਲਾਈਨ | ਕੋਈ agent_id ਨਹੀਂ | ਤੁਹਾਡੇ ਕਲਾਇੰਟ ਵੱਲੋਂ ਭੇਜਿਆ ਪਹਿਲਾ ਸਵੀਕਾਰਿਆ ਗਿਆ session.update |
ਸੇਵ ਕੀਤਾ ਏਜੰਟ
ਡਿਪਲੌਇ ਕੀਤੀ ਏਜੰਟ ID ਨਾਲ ਕਨੈਕਟ ਕਰੋ:
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 ਭੇਜੋ:
{
"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 ਕਲਾਇੰਟ ਵਰਤੋ।
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 ਕਲਾਇੰਟ ਅਤੇ ਇਸਦੀ ਘੋਸ਼ਿਤ ਰੇਟ ਵਾਲੀ ਮੋਨੋ PCM16 WAV ਨਾਲ ਸ਼ੁਰੂ ਕਰੋ। ਜਾਂਚ ਕਰੋ ਕਿ:
- ਸਰਵਰ ਕੌਨਫਿਗਰੇਸ਼ਨ ਸਵੀਕਾਰ ਕਰਦਾ ਹੈ ਅਤੇ
session.updatedਭੇਜਦਾ ਹੈ। - ਇਨਪੁੱਟ ਉਮੀਦ ਕੀਤੀ ਗਤੀ ਨਾਲ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਅਤੇ ਰਿਸਪਾਂਸ-ਆਡੀਓ ਇਵੈਂਟ ਪੈਦਾ ਕਰਦਾ ਹੈ।
- ਰੁਕਾਵਟ ਅਤੇ ਰਿਸਪਾਂਸ ਰੱਦ ਕਰਨਾ ਬਾਕੀ ਆਉਟਪੁੱਟ ਆਡੀਓ ਨੂੰ ਰੋਕਦੇ ਹਨ।
- ਇਨਲਾਈਨ ਫੰਕਸ਼ਨ ਨਤੀਜੇ ਜਾਂ ਸੇਵ ਕੀਤੇ ਏਜੰਟ ਟੂਲ ਨਤੀਜੇ ਮਾਡਲ ਨੂੰ ਵਾਪਸ ਮਿਲਦੇ ਹਨ।
- ਅਵੈਧ ਇਨਪੁੱਟ ਇੱਕ
errorਇਵੈਂਟ ਪੈਦਾ ਕਰਦਾ ਹੈ ਜਿਸ ਨੂੰ ਤੁਹਾਡਾ ਕਲਾਇੰਟ ਹੈਂਡਲ ਕਰਦਾ ਹੈ। - ਤੁਹਾਡਾ ਕਲਾਇੰਟ ਸਾਕਟ ਬੰਦ ਕਰਦਾ ਹੈ ਅਤੇ ਕਾਲ ਕਾਲ ਇਤਿਹਾਸ ਵਿੱਚ ਦਿਖਾਈ ਦਿੰਦੀ ਹੈ।
Realtime WebSocket ਹਵਾਲਾ ਸਵੀਕਾਰ ਕੀਤੇ ਇਵੈਂਟਾਂ, ਆਡੀਓ ਫਾਰਮੈਟਾਂ, ਸੈਸ਼ਨ ਫੀਲਡਾਂ ਅਤੇ ਪੂਰੀਆਂ ਉਦਾਹਰਨਾਂ ਦੀ ਸੂਚੀ ਦਿੰਦਾ ਹੈ।
ਲਾਗਤ
Realtime ਕਾਲਾਂ ਚੁਣੇ ਗਏ ਉਤਪਾਦ ਦੀ ਆਮ ਪ੍ਰਤੀ-ਮਿੰਟ ਦਰ ਵਰਤਦੀਆਂ ਹਨ। ਲਾਈਵ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਡੈਲਟਾ ਸਮਰੱਥ ਕਰਨ ਨਾਲ ਪੂਰੇ ਸੈਸ਼ਨ ਲਈ ਪ੍ਰਤੀ-ਮਿੰਟ ਵਾਧੂ ਸ਼ੁਲਕ ਲੱਗਦਾ ਹੈ; ਦਰ ਲਈ ਲਾਈਵ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟਾਂ ਅਤੇ ਉਤਪਾਦ ਦਰਾਂ ਲਈ ਕੀਮਤਾਂ ਵੇਖੋ।
POST /v1/realtime/sessions ਇੱਕ ਵੱਖਰਾ ਪ੍ਰਬੰਧਿਤ LiveKit ਮਾਰਗ ਹੈ। ਇਹ ਇੱਕ ਰੂਮ ਅਤੇ ਸੀਮਿਤ ਭਾਗੀਦਾਰ ਟੋਕਨ ਬਣਾਉਂਦਾ ਹੈ; ਸਿੱਧੇ WebSocket ਕਨੈਕਸ਼ਨ ਲਈ ਇਸਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।
ਫਰੇਮਵਰਕ ਇੰਟੀਗ੍ਰੇਸ਼ਨਾਂ ਲਈ, Pipecat ਤੋਂ ThunderPhone ਵਰਤੋ ਅਤੇ LiveKit Agents ਤੋਂ ThunderPhone ਵਰਤੋ ਵੇਖੋ।