Open in
Naudokite ThunderPhone su OpenAI Realtime klientais
Nukreipkite su OpenAI Realtime suderinamą serverio klientą į ThunderPhone, naudodami išsaugotą agentą arba įterptinę sesijos konfigūraciją.
ThunderPhone įgyvendina tikslinį OpenAI Realtime įvykių modelio poaibį. Esamas serverio pusės klientas gali išlaikyti savo WebSocket, garso, sesijos ir atsako įvykių srautą naudodamas ThunderPhone balso agentą.
Prieš prisijungdami
Jums reikia ThunderPhone organizacijos slaptojo API rakto ir serverio vykdymo aplinkos, galinčios atidaryti WebSocket ryšius. Nejunkite iš naršyklės kodo ir neatskleiskite rakto naršyklei. Norėdami naudoti išsaugotą agentą, pirmiausia jį įdiekite ir nukopijuokite jo skaitinį agento ID.
Prisijunkite prie:
wss://api.thunderphone.com/v1/realtimeAutentifikuokite WebSocket atnaujinimą iš savo serverio:
Authorization: Bearer sk_live_YOUR_API_KEYUžklausos eilutės autentifikavimas galimas klientams, kurie negali nustatyti prisijungimo antraščių, tačiau URL lengviau patenka į žurnalus.
Pasirinkite, kam priklauso konfigūracija
| Režimas | Prisijunkite naudodami | Konfigūracijos šaltinis |
|---|---|---|
| Išsaugotas agentas | ?agent_id=12 | Įdiegta instrukcija, balsas, produktas, kalbos, žinių bazė ir suderinami serveryje vykdomi įrankiai |
| Įterptinis | Be agent_id | Pirmasis iš jūsų kliento priimtas session.update |
Išsaugotas agentas
Prisijunkite naudodami įdiegto agento ID:
wss://api.thunderphone.com/v1/realtime?agent_id=12Agentas paleidžiamas jungiantis lizdu. Jo pasisveikinimas lieka pasiekiamas,
tačiau Realtime išjungia jo sakytinius tylos patikrinimus ir neįtraukia transfer_call
bei send_keypad_input. Kiti suderinami įrankiai vykdomi ThunderPhone. Šiam režimui
nesiųskite įterptinių instrukcijų ar kliento vykdomų įrankių.
Prieš paleidžiant agentą nustatykite perdavimo garso parametrus naudodami
input_audio_format, output_audio_format, input_rate ir output_rate užklausos parametrus. Po prisijungimo
negalite keisti išsaugotos konfigūracijos ar garso formatų.
Įterptinė sesija
Be agent_id, palaukite session.created, tada siųskite 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"
}
}
}Pirmasis priimtas atnaujinimas parengia skambutį. session.updated reiškia, kad
sesija aktyvi. Po to instrukcijų, balso, produkto, įrankių ir garso formatų
keisti negalima.
Įterptinės sesijos neturi automatinio pasisveikinimo ar sakytinių tylos patikrinimų. Kad
agentas pradėtų kalbėti pirmas, pridėkite sistemos arba naudotojo pranešimą ir siųskite
response.create. Visiškai neaktyvi sesija vis tiek baigiasi pasiekus platformos
tylaus skambučio ribą, kuri pagal numatytuosius nustatymus yra 600 sekundžių.
Naudokite oficialų OpenAI SDK
Nurodykite WebSocket bazinį URL, kuris baigiasi /v1; SDK prideda /realtime.
model reikšmė yra suderinamumo pavadinimas ir nepasirenka ThunderPhone
produkto. Produktą pasirinkite sesijos konfigūracijoje arba išsaugotame agente.
Ši ryšio patikra sukuria įterptinę Bolt sesiją, išveda įvykius iki pirmojo
session.updated ir užsidaro. Garsui transliuoti naudokite minimalų Python
klientą.
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())Išlaikykite esamą įvesties garso pridėjimo, atsako garso deltų, pertraukimų, funkcijų iškvietimų, klaidų ir tvarkingo lizdo uždarymo apdorojimą. Įterptinės pasirinktinės funkcijos vykdomos jūsų kliente; jų rezultatus grąžinkite per Realtime protokolą. Išsaugoto agente įrankiai vykdomi ThunderPhone.
Sesijos gyvavimo ciklas ir gedimai
Vienas WebSocket reiškia vieną skambutį. Netinkamas agento ID arba atmesta įterptinė
konfigūracija sukuria error įvykį. Prieš laikydami sesiją aktyvia, palaukite
session.updated. Nurodykite faktinius įvesties ir išvesties formatus bei
diskretizavimo dažnius: dėl PCM dažnio neatitikties garsas atkuriamas per greitai arba per lėtai,
užuot sukėlus patvirtinimo klaidą.
Prasidėjus sesijai, tvarkingai uždarykite lizdą, kai programa baigia darbą. Įterptinės sesijos gali naudoti kliento vykdomas funkcijas. Išsaugoto agento sesijos naudoja suderinamus ThunderPhone vykdomus įrankius ir nesiūlo perdavimo ar klaviatūros įvesties.
Išbandykite integraciją
Pradėkite nuo minimalaus Python WAV kliento ir mono PCM16 WAV failo jo nurodytu dažniu. Patikrinkite:
- Serveris priima konfigūraciją ir siunčia
session.updated. - Įvestis sukuria transkripto ir atsako garso įvykius numatytu greičiu.
- Pertraukimas ir atsako atšaukimas sustabdo likusį išvesties garsą.
- Įterptinių funkcijų rezultatai arba išsaugoto agento įrankių rezultatai grąžinami modeliui.
- Netinkama įvestis sukuria
errorįvykį, kurį apdoroja jūsų klientas. - Jūsų klientas uždaro lizdą, o skambutis rodomas Skambučių istorijoje.
Realtime WebSocket nuorodoje pateikiami priimami įvykiai, garso formatai, sesijos laukai ir išsamūs pavyzdžiai.
Kaina
Realtime skambučiams taikomas įprastas pasirinkto produkto minutinis tarifas. Įjungus tiesioginius transkripto delta atnaujinimus, visai sesijai pridedamas minutinis mokestis; tarifą žr. Tiesioginiuose transkriptuose, o produktų tarifus – Kainodaroje.
POST /v1/realtime/sessions yra atskiras valdomas LiveKit kelias. Jis sukuria
kambarį ir dalyvio prieigos raktą su nustatyta aprėptimi; jis nereikalingas tiesioginiam WebSocket
ryšiui.
Karkasų integracijoms žr. Naudokite ThunderPhone su Pipecat ir Naudokite ThunderPhone su LiveKit Agents.