Open in
Izmantojiet ThunderPhone ar OpenAI Realtime klientiem
Norādiet uz ThunderPhone ar OpenAI Realtime saderīgu servera klientu, izmantojot vai nu saglabātu balss aģentu, vai iekļautu sesijas konfigurāciju.
ThunderPhone ievieš mērķtiecīgu OpenAI Realtime notikumu modeļa apakškopu. Esošs servera puses klients var saglabāt savu WebSocket, audio, sesijas un atbildes notikumu plūsmu, vienlaikus izmantojot ThunderPhone balss aģentu.
Pirms pieslēgšanās
Jums nepieciešama ThunderPhone organizācijas slepenā API atslēga un servera izpildvide, kas var atvērt WebSocket savienojumus. Nepieslēdzieties no pārlūkprogrammas koda un nepakļaujiet atslēgu pārlūkprogrammai. Lai izmantotu saglabātu aģentu, vispirms to publicējiet un nokopējiet tā ciparu aģenta ID.
Pieslēdzieties šeit:
wss://api.thunderphone.com/v1/realtimeAutentificējiet WebSocket savienojuma jaunināšanu no sava servera:
Authorization: Bearer sk_live_YOUR_API_KEYVaicājuma virknes autentifikācija ir pieejama klientiem, kuri nevar iestatīt savienojuma galvenes, taču URL ir vieglāk nopludināt žurnālos.
Izvēlieties, kam pieder konfigurācija
| Režīms | Pieslēdzieties ar | Konfigurācijas avots |
|---|---|---|
| Saglabāts aģents | ?agent_id=12 | Publicēta uzvedne, balss, produkts, valodas, zināšanas un saderīgi serverī izpildāmi rīki |
| Iekļauts | Bez agent_id | Pirmais no jūsu klienta pieņemtais session.update |
Saglabāts aģents
Pieslēdzieties ar publicētā aģenta ID:
wss://api.thunderphone.com/v1/realtime?agent_id=12Aģents tiek palaists, kamēr ligzda savienojas. Tā sveiciens paliek pieejams,
taču Realtime atspējo balss klusuma pārbaudes un neietver transfer_call
un send_keypad_input. Citi saderīgie rīki tiek izpildīti pakalpojumā ThunderPhone. Nesūtiet
šim režīmam iekļautas instrukcijas vai klientā izpildāmus rīkus.
Iestatiet pārraides audio pirms aģenta palaišanas, izmantojot vaicājuma parametrus
input_audio_format, output_audio_format, input_rate un output_rate. Pēc
pieslēgšanās nevarat mainīt saglabāto konfigurāciju vai audio formātus.
Iekļauta sesija
Bez agent_id gaidiet session.created, pēc tam nosūtiet 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"
}
}
}Pirmais pieņemtais atjauninājums iestata zvanu. session.updated nozīmē, ka
sesija ir aktīva. Pēc tam instrukcijas, balsi, produktu, rīkus un audio formātus
vairs nevar mainīt.
Iekļautām sesijām nav automātiska sveiciena vai balss klusuma pārbaudes. Lai
aģents runātu pirmais, pievienojiet sistēmas vai lietotāja ziņojumu un nosūtiet
response.create. Pilnīgi neaktīva sesija joprojām beidzas, sasniedzot platformas
klusā zvana limitu — pēc noklusējuma 600 sekundes.
Izmantojiet oficiālo OpenAI SDK
Norādiet WebSocket bāzes URL, kas beidzas ar /v1; SDK pievieno /realtime. Vērtība
model ir saderības nosaukums un neizvēlas ThunderPhone
produktu. Izvēlieties produktu sesijas konfigurācijā vai saglabātajā aģentā.
Šī savienojuma pārbaude izveido iekļautu Bolt sesiju, drukā notikumus līdz
pirmajam session.updated un aizver savienojumu. Lai straumētu audio, izmantojiet
minimālo Python klientu.
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())Saglabājiet esošo ievades audio pievienošanas, atbildes audio deltu, pārtraukumu, funkciju izsaukumu, kļūdu un korektas soketa aizvēršanas apstrādi. Iekļautās pielāgotās funkcijas tiek izpildītas jūsu klientā; atgrieziet to rezultātus, izmantojot Realtime protokolu. Saglabātā aģenta rīki tiek izpildīti pakalpojumā ThunderPhone.
Sesijas dzīves cikls un kļūmes
Viens WebSocket savienojums apzīmē vienu zvanu. Nederīgs aģenta ID vai noraidīta iekļautā
konfigurācija rada error notikumu. Pirms sesijas uzskatīšanas par aktīvu gaidiet
session.updated. Norādiet faktiskos ievades un izvades formātus un
iztveršanas frekvences: PCM frekvences neatbilstība atskaņo audio pārāk ātri vai pārāk lēni,
nevis rada validācijas kļūdu.
Kad sesija ir sākta, korekti aizveriet soketu, kad jūsu lietojumprogramma ir pabeigusi darbu. Iekļautās sesijās var izmantot klientā izpildāmas funkcijas. Saglabātā aģenta sesijās tiek izmantoti saderīgi ThunderPhone izpildīti rīki, un tās nepiedāvā pārsūtīšanu vai tastatūras ievadi.
Pārbaudiet integrāciju
Sāciet ar minimālo Python WAV klientu un mono PCM16 WAV failu ar tajā norādīto frekvenci. Pārbaudiet:
- Serveris pieņem konfigurāciju un nosūta
session.updated. - Ievade rada transkripta un atbildes audio notikumus paredzētajā ātrumā.
- Pārtraukums un atbildes atcelšana aptur atlikušo izvades audio.
- Iekļauto funkciju rezultāti vai saglabātā aģenta rīku rezultāti tiek atgriezti modelim.
- Nederīga ievade rada
errornotikumu, ko jūsu klients apstrādā. - Jūsu klients aizver soketu, un zvans parādās Zvanu vēsturē.
Realtime WebSocket atsauce uzskaita pieņemtos notikumus, audio formātus, sesijas laukus un pilnīgus piemērus.
Izmaksas
Realtime zvaniem tiek piemērota izvēlētā produkta standarta maksa par minūti. Tiešo transkripta deltu iespējošana visai sesijai pievieno piemaksu par minūti; tarifu skatiet sadaļā Tiešie transkripti, bet produktu tarifus — sadaļā Cenas.
POST /v1/realtime/sessions ir atsevišķs pārvaldīts LiveKit ceļš. Tas izveido
telpu un ierobežota tvēruma dalībnieka marķieri; tas nav nepieciešams tiešam WebSocket
savienojumam.
Informāciju par ietvaru integrācijām skatiet sadaļās Izmantojiet ThunderPhone ar Pipecat un Izmantojiet ThunderPhone ar LiveKit Agents.