Open in
Käytä ThunderPhonea OpenAI Realtime -asiakkaiden kanssa
Yhdistä OpenAI Realtime -yhteensopiva palvelinasiakas ThunderPhoneen käyttämällä joko tallennettua agenttia tai rivinsisäistä istuntomääritystä.
ThunderPhone toteuttaa rajatun osan OpenAI Realtime -tapahtumamallista. Nykyinen palvelinpuolen asiakas voi säilyttää WebSocket-, ääni-, istunto- ja vastaustapahtumavirtansa käyttäessään ThunderPhone-puheagenttia.
Ennen kuin muodostat yhteyden
Tarvitset ThunderPhone-organisaation salaisen API-avaimen ja palvelinajoympäristön, joka voi avata WebSocket-yhteyksiä. Älä muodosta yhteyttä selainkoodista äläkä paljasta avainta selaimelle. Jos haluat käyttää tallennettua agenttia, ota se ensin käyttöön ja kopioi sen numeerinen agenttitunnus.
Yhdistä osoitteeseen:
wss://api.thunderphone.com/v1/realtimeTodenna WebSocket-päivitys palvelimeltasi:
Authorization: Bearer sk_live_YOUR_API_KEYKyselymerkkijonotodennus on käytettävissä asiakkaille, jotka eivät voi asettaa kättelyn otsakkeita, mutta URL-osoitteet vuotavat helpommin lokeihin.
Valitse, kuka hallitsee määrityksiä
| Tila | Yhdistä käyttämällä | Määritysten lähde |
|---|---|---|
| Tallennettu agentti | ?agent_id=12 | Käyttöönotettu kehote, ääni, tuote, kielet, tietämys ja yhteensopivat palvelimella suoritettavat työkalut |
| Sisäinen | Ei agent_id-parametria | Ensimmäinen asiakkaasi hyväksytty session.update |
Tallennettu agentti
Yhdistä käyttöönotetulla agenttitunnuksella:
wss://api.thunderphone.com/v1/realtime?agent_id=12Agentti käynnistyy socket-yhteyden muodostuessa. Sen tervehdys on edelleen
käytettävissä, mutta Realtime poistaa käytöstä sen puhutut hiljaisuuden
tarkistukset ja jättää pois transfer_call- ja send_keypad_input-toiminnot.
Muut yhteensopivat työkalut suoritetaan ThunderPhonessa. Älä lähetä tähän
tilaan sisäisiä ohjeita tai asiakkaan suorittamia työkaluja.
Aseta siirrettävän äänen asetukset ennen agentin käynnistymistä
input_audio_format-, output_audio_format-, input_rate- ja output_rate
-kyselyparametreilla. Et voi muuttaa tallennettuja määrityksiä tai
äänimuotoja yhteyden muodostamisen jälkeen.
Sisäinen istunto
Ilman agent_id-parametria odota session.created-tapahtumaa ja lähetä sitten
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"
}
}
}Ensimmäinen hyväksytty päivitys valmistelee puhelun. session.updated
tarkoittaa, että istunto on aktiivinen. Ohjeita, ääntä, tuotetta, työkaluja ja
äänimuotoja ei voi muuttaa tämän jälkeen.
Sisäisissä istunnoissa ei ole automaattista tervehdystä eikä puhuttuja
hiljaisuuden tarkistuksia. Jos haluat agentin puhuvan ensin, lisää järjestelmä-
tai käyttäjäviesti ja lähetä response.create. Täysin käyttämätön istunto
päättyy silti alustan hiljaisen puhelun rajalla, joka on oletusarvoisesti 600
sekuntia.
Käytä virallista OpenAI SDK:ta
Välitä WebSocket-perus-URL-osoite, joka päättyy kohtaan /v1; SDK lisää /realtime-polun.
model-arvo on yhteensopivuusnimi, eikä se valitse ThunderPhone-tuotetta. Valitse tuote istunnon määrityksessä tai tallennetussa agentissa.
Tämä yhteystarkistus luo upotetun Bolt-istunnon, tulostaa tapahtumia ensimmäiseen session.updated-tapahtumaan asti ja sulkee yhteyden. Suoratoista ääntä käyttämällä minimaalista Python-asiakasta.
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())Säilytä nykyinen käsittelysi syöteäänen lisäämiselle, vastausäänen deltoille, keskeytyksille, funktiokutsuille, virheille ja soketin siistille sulkemiselle. Upotetut mukautetut funktiot suoritetaan asiakkaassasi; palauta niiden tulokset Realtime-protokollan kautta. Tallennetun agentin työkalut suoritetaan ThunderPhone-palvelussa.
Istunnon elinkaari ja virheet
Yksi WebSocket vastaa yhtä puhelua. Virheellinen agenttitunnus tai hylätty upotettu määritys tuottaa error-tapahtuman. Odota session.updated-tapahtumaa, ennen kuin käsittelet istuntoa aktiivisena. Määritä käytetyt syöte- ja tulostusmuodot sekä näytteenottotaajuudet oikein: PCM-näytteenottotaajuuden ristiriita toistaa äänen liian nopeasti tai hitaasti sen sijaan, että se tuottaisi validointivirheen.
Kun istunto on alkanut, sulje soketti siististi, kun sovelluksesi on valmis. Upotetut istunnot voivat käyttää asiakkaassa suoritettavia funktioita. Tallennetun agentin istunnot käyttävät yhteensopivia ThunderPhone-palvelussa suoritettavia työkaluja, eivätkä ne tarjoa siirtoa tai näppäimistösyötettä.
Testaa integraatio
Aloita minimaalisella Python WAV -asiakkaalla ja sen ilmoitetun näytteenottotaajuuden mono PCM16 WAV -tiedostolla. Varmista seuraavat:
- Palvelin hyväksyy määrityksen ja lähettää
session.updated-tapahtuman. - Syöte tuottaa transkriptio- ja vastausäänitapahtumia odotetulla nopeudella.
- Keskeytys ja vastauksen peruutus pysäyttävät jäljellä olevan tulostusäänen.
- Upotettujen funktioiden tulokset tai tallennetun agentin työkalujen tulokset palautuvat mallille.
- Virheellinen syöte tuottaa
error-tapahtuman, jonka asiakkaasi käsittelee. - Asiakkaasi sulkee soketin ja puhelu näkyy Puheluhistoriassa.
Realtime WebSocket -viite sisältää hyväksytyt tapahtumat, äänimuodot, istuntokentät ja täydelliset esimerkit.
Hinta
Realtime-puheluissa käytetään valitun tuotteen normaalia minuuttihintaa. Reaaliaikaisten transkriptiodeltojen käyttöönotto lisää koko istunnolle minuuttikohtaisen lisämaksun; katso hinta kohdasta Reaaliaikaiset transkriptiot ja tuotteiden hinnat kohdasta Hinnoittelu.
POST /v1/realtime/sessions on erillinen hallinnoitu LiveKit-polku. Se luo huoneen ja rajatun osallistujatunnuksen; sitä ei tarvita suoraan WebSocket-yhteyteen.
Katso kehysintegraatiot kohdista Käytä ThunderPhonea Pipecatin kanssa ja Käytä ThunderPhonea LiveKit Agentsin kanssa.