ThunderPhone 2.0 on nüüd saadaval.Iseteenindusena alates 2 senti/min.Loe uudist

Connect tools & data

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/realtime

Autendi WebSocketi ühenduse loomine oma serverist:

Authorization: Bearer sk_live_YOUR_API_KEY

Pä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Ühendu järgmisegaKonfiguratsiooniallikas
Salvestatud agent?agent_id=12Juurutatud juhised, hääl, toode, keeled, teadmised ja ühilduvad serveris käitatavad tööriistad
SiseminePuudub agent_idEsimene sinu kliendi aktsepteeritud session.update

Salvestatud agent

Ühendu juurutatud agendi ID-ga:

wss://api.thunderphone.com/v1/realtime?agent_id=12

Agent käivitub pesa ühendamisel. Selle tervitus jääb kättesaadavaks, kuid Realtime keelab selle räägitud vaikusekontrollid ning jätab välja transfer_call ja send_keypad_input. Muud ühilduvad tööriistad töötavad ThunderPhone’is. Ära saada selles režiimis sisemisi juhiseid ega kliendis käitatavaid tööriistu.

Määra edastusheli enne agendi käivitumist päringuparameetritega input_audio_format, output_audio_format, input_rate ja output_rate. Pärast ühenduse loomist ei saa salvestatud konfiguratsiooni ega helivorminguid muuta.

Sisemine sessioon

Ilma agent_id-ta oota sündmust 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 aktsepteeritud värskendus valmistab kõne ette. session.updated tähendab, et sessioon on aktiivne. Juhiseid, häält, toodet, tööriistu ega helivorminguid ei saa pärast seda muuta.

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 socket korrektselt, kui rakendus on lõpetanud. Sisemised seansid võivad kasutada kliendis käivitatavaid funktsioone. Salvestatud agendi seansid kasutavad ühilduvaid ThunderPhone'is käivitatavaid tööriistu ega paku kõne suunamist ega klahvistiku sisendit.

Testi integratsiooni

Alusta minimaalse Pythoni WAV-kliendiga ja selle määratud sagedusega mono PCM16 WAV-failiga. Kontrolli järgmist:

  1. Server aktsepteerib konfiguratsiooni ja saadab sündmuse session.updated.
  2. Sisend tekitab transkriptsiooni- ja vastuse helisündmusi oodatud kiirusel.
  3. Katkestus ja vastuse tühistamine peatavad allesjäänud väljundheli.
  4. Sisemiste funktsioonide tulemused või salvestatud agendi tööriistade tulemused jõuavad mudelini.
  5. Vigane sisend tekitab error sündmuse, mida sinu klient käsitleb.
  6. 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

Realtime'i kõnede puhul kasutatakse valitud toote tavapärast minutihinda. Reaalajas transkriptsiooni deltade lubamine lisab kogu seansi eest minutipõhise lisatasu; hinna kohta vaata Reaalajas transkriptsioonid ja toodete hindade kohta Hinnakiri.

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.