Open in
Kasuta ThunderPhone
Suuna OpenAI Realtime
ThunderPhone rakendab OpenAI Realtime’i sündmusmudeli sihipärast alamhulka. Olemasolev serveripoolne klient saab säilitada oma WebSocketi, heli-, sessiooni- ja vastussündmuste voo, kasutades samal ajal ThunderPhone’i häälagenti.
Enne ühendamist
Vajad ThunderPhone’i organisatsiooni salajast API-võtit ja serverikeskkonda, mis saab avada WebSocketi ühendusi. Ära ühenda brauserikoodist ega avalda võtit brauserile. Salvestatud agendi kasutamiseks juuruta see esmalt ja kopeeri selle numbriline agendi ID.
Ühendu aadressiga:
wss://api.thunderphone.com/v1/realtimeAutendi WebSocketi ühenduse loomine oma serverist:
Authorization: Bearer sk_live_YOUR_API_KEYPäringustringi kaudu autentimine on olemas klientidele, mis ei saa ühenduse loomise päiseid määrata, kuid URL-id satuvad logidesse kergemini.
Vali, kellele konfiguratsioon kuulub
| Režiim | Vali see järgmiselt | Konfiguratsiooni allikas |
|---|---|---|
| Salvestatud agent | session.prompt.id esimeses session.update-is või ?agent_id=12 | Avaldatud viip, hääl, toode, keeled, teadmised ja ühilduvad serveris käitatavad tööriistad ning selle seansi juhised ja muutujad |
| Reasisene | Mitte kumbki | Esimene sinu kliendi aktsepteeritud session.update |
Salvestatud agent
Hoia iga kõne ühist teavet salvestatud agendis, kus sellel on versioonid ja
testkomplektid, ning saada seansipõhised muudatused esimeses session.update-is:
session.prompt.id valib juurutatud agendi, session.instructions sisaldab
selle seansi lühijuhist ja session.prompt.variables täidab agendiviiba
{{name}} kohatäited.
{
"type": "session.update",
"session": {
"type": "realtime",
"prompt": {
"id": "12",
"variables": { "user_name": "Ada Park" }
},
"instructions": "Ada is a Costco member in Mountain View. Call the store and ask for today's opening hours.",
"audio": {
"input": { "format": { "type": "audio/pcm", "rate": 24000 } },
"output": { "format": { "type": "audio/pcm", "rate": 24000 } }
}
}
}Juhised muutuvad kõne kontekstiks, mis
lisatakse agendiviiba järele ainult selle kõne jaoks. Seansi enda valikud
(telephony, outbound, ivr_mode, call_events, placeholders) ja keel,
milles see algab (primary_language), lähevad session.config-i nagu
manustatud seansi puhul. Agendi hääl, toode ja tööriistad pärinevad selle
juurutatud konfiguratsioonist: uuenduses määratud hääl, muu agendiseade või
ainult OpenAI-le mõeldud väli, näiteks vaikeväärtusest erinev tool_choice,
tekitab sündmuse error ja seda eiratakse ning kliendi käitatavad tööriistad
lükatakse tagasi (kliendi käitatavad tööriistad vajavad manustatud seanssi).
prompt.version aktsepteeritakse ja eiratakse. Kõigi reeglite kohta vaata
salvestatud agendi kasutamist.
Ühenduse loomine parameetriga ?agent_id=12 käivitab agendi juba ühenduse
loomise ajal, seega session.update pole vajalik, kuid seansi konfiguratsioon
on seejärel lukustatud: pärast seda saadetud juhised, muutujad ja seansi
valikud (outbound, ivr_mode, telephony, placeholders, call_events)
lükatakse sündmusega error tagasi. Selle asemel lisa URL-ile
&wait_for_session_update=1, et käivitada agent esimese session.update-iga,
mis sisaldab siis samal viisil juhiseid, muutujaid ja seansi valikuid;
väljaminev seanss vajab seda. Kuni see uuendus saabub, hoitakse helistaja heli
kinni, muud sündmused lükatakse tagasi ja ühendus suletakse, kui seda ei saabu
10 sekundi jooksul.
Tervitus jääb kättesaadavaks, kuid Realtime keelab agendi suulised
vaikusekontrollid ning pakub transfer_call ja send_keypad_input ainult koos
call_eventsiga. Muud ühilduvad tööriistad töötavad ThunderPhone'is; kliendi
käitatavad tööriistad vajavad manustatud seanssi. Helivorminguid ning seansi
juhiseid ja muutujaid ei saa pärast kõne algust muuta.
Sisemine sessioon
Ilma salvestatud agendita oota session.created, seejärel saada 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"
}
}
}Esimene vastuvõetud uuendus seadistab kõne. session.updated tähendab, et seanss on aktiivne. Juhiseid, häält, toodet, tööriistu ja helivorminguid ei saa pärast seda enam muuta. Juhiste muutumatuna hoidmiseks ja ainult nimega väärtuste varieerimiseks kirjuta neisse kohatäitjad {{name}} ning saada väärtused väljal session.config.variables.
Sisemistel sessioonidel puuduvad automaatne tervitus ja räägitud vaikusekontrollid. Et
agent räägiks esimesena, lisa süsteemi- või kasutajasõnum ja saada
response.create. Täiesti jõudeolev sessioon lõpeb siiski platvormi
vaikse kõne limiidi juures, mis on vaikimisi 600 sekundit.
Kasuta ametlikku OpenAI SDK-d
Edasta /v1-ga lõppev WebSocketi baas-URL; SDK lisab /realtime. Väärtus
model on ühilduvusnimi ega vali ThunderPhone'i toodet. Vali toode seansi
konfiguratsioonis või salvestatud agendis.
See ühenduse kontroll loob sisemise Bolt-seansi, prindib sündmusi kuni esimese
session.updated sündmuseni ja sulgeb ühenduse. Heli voogedastuseks kasuta
minimaalset Pythoni klienti.
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äilita olemasolev sisendheli lisamise, vastuse heli deltade, katkestuste, funktsioonikutsete, vigade ja socketi korrektse sulgemise käsitlus. Sisemised kohandatud funktsioonid käivitatakse sinu kliendis; tagasta nende tulemused Realtime'i protokolli kaudu. Salvestatud agendi tööriistad käivitatakse ThunderPhone'is.
Seansi elutsükkel ja tõrked
Üks WebSocket vastab ühele kõnele. Vigane agendi ID või tagasi lükatud sisemine
konfiguratsioon tekitab error sündmuse. Oota enne seansi aktiivseks lugemist
sündmust session.updated. Määra tegelikud sisend- ja väljundvormingud ning
diskreetimissagedused: PCM-i sageduse erinevus esitab heli liiga kiiresti või
liiga aeglaselt, mitte ei tekita valideerimisviga.
Pärast seansi algust sulge pesa korrektselt, kui sinu rakendus on töö lõpetanud. Siseseansid saavad kasutada kliendi käivitatavaid funktsioone. Salvestatud agendi seansid kasutavad ühilduvaid ThunderPhone’i käitatavaid tööriistu ning pakuvad transfer_call-i (ja väljuvate seansside puhul send_keypad_input-i) ainult koos call_events-iga; sinu klient käivitab need call.* sündmused.
Testi integratsiooni
Alusta minimaalse Pythoni WAV-kliendiga ja selle määratud sagedusega mono PCM16 WAV-failiga. Kontrolli järgmist:
- Server aktsepteerib konfiguratsiooni ja saadab sündmuse
session.updated. - Sisend tekitab transkriptsiooni- ja vastuse helisündmusi oodatud kiirusel.
- Katkestus ja vastuse tühistamine peatavad allesjäänud väljundheli.
- Sisemiste funktsioonide tulemused või salvestatud agendi tööriistade tulemused jõuavad mudelini.
- Vigane sisend tekitab
errorsündmuse, mida sinu klient käsitleb. - Sinu klient sulgeb socketi ja kõne kuvatakse Kõneajaloos.
Realtime WebSocketi viide loetleb aktsepteeritud sündmused, helivormingud, seansiväljad ja täielikud näited.
Hind
Reaalajas kõnede hind kujuneb nagu igal teisel kõnel: nende osade maksumus meie teenusepakkujate hinnakirjahindade alusel, millele lisanduvad taristutasu ja juurdehindlus. Reaalajas transkripti muudatuste lubamine lisab transkribeerimistöö kogu seansi vältel; vaata Reaalajas transkripte ja Hinnastust.
POST /v1/realtime/sessions on eraldi hallatud LiveKiti tee. See loob ruumi ja
piiratud ulatusega osaleja tokeni; seda ei ole otsese WebSocketi ühenduse jaoks
vaja.
Raamistikuintegratsioonide kohta vaata Kasuta ThunderPhone'i Pipecatist ja Kasuta ThunderPhone'i LiveKit Agentsist.