ThunderPhone 2.0 on nyt julkaistu.Ota käyttöön itse – alkaen 2 ¢/min.Lue lisää julkistuksesta

Connect tools & data

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

Todenna WebSocket-päivitys palvelimeltasi:

Authorization: Bearer sk_live_YOUR_API_KEY

Kyselymerkkijonotodennus on käytettävissä asiakkaille, jotka eivät voi asettaa kättelyn otsakkeita, mutta URL-osoitteet vuotavat helpommin lokeihin.

Valitse, kuka hallitsee määrityksiä

TilaYhdistä käyttämälläMääritysten lähde
Tallennettu agentti?agent_id=12Käyttöönotettu kehote, ääni, tuote, kielet, tietämys ja yhteensopivat palvelimella suoritettavat työkalut
SisäinenEi agent_id-parametriaEnsimmäinen asiakkaasi hyväksytty session.update

Tallennettu agentti

Yhdistä käyttöönotetulla agenttitunnuksella:

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

Agentti 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:

  1. Palvelin hyväksyy määrityksen ja lähettää session.updated-tapahtuman.
  2. Syöte tuottaa transkriptio- ja vastausäänitapahtumia odotetulla nopeudella.
  3. Keskeytys ja vastauksen peruutus pysäyttävät jäljellä olevan tulostusäänen.
  4. Upotettujen funktioiden tulokset tai tallennetun agentin työkalujen tulokset palautuvat mallille.
  5. Virheellinen syöte tuottaa error-tapahtuman, jonka asiakkaasi käsittelee.
  6. 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.