Open in
OpenAI Realtime క్లయింట్లతో ThunderPhoneను ఉపయోగించండి
సేవ్ చేసిన ఏజెంట్ లేదా ఇన్లైన్ సెషన్ కాన్ఫిగరేషన్ను ఉపయోగించి, OpenAI Realtimeకు అనుకూలమైన సర్వర్ క్లయింట్ను ThunderPhoneకు సూచించండి.
ThunderPhone, OpenAI Realtime ఈవెంట్ మోడల్లోని నిర్దిష్ట ఉపసమితిని అమలు చేస్తుంది. ఇప్పటికే ఉన్న సర్వర్-సైడ్ క్లయింట్, ThunderPhone వాయిస్ ఏజెంట్ను ఉపయోగిస్తున్నప్పటికీ తన WebSocket, ఆడియో, సెషన్, మరియు ప్రతిస్పందన ఈవెంట్ ఫ్లోను కొనసాగించవచ్చు.
కనెక్ట్ చేయడానికి ముందు
మీకు ThunderPhone సంస్థ సీక్రెట్ API కీ మరియు WebSocketలను తెరవగల సర్వర్ రన్టైమ్ అవసరం. బ్రౌజర్ కోడ్ నుండి కనెక్ట్ చేయవద్దు లేదా కీని బ్రౌజర్కు బహిర్గతం చేయవద్దు. సేవ్ చేసిన ఏజెంట్ను ఉపయోగించడానికి, ముందుగా దాన్ని డిప్లాయ్ చేసి దాని సంఖ్యా ఏజెంట్ 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ను ఉపయోగించండి చూడండి.