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žiimVali see järgmiseltKonfiguratsiooni allikas
Salvestatud agentsession.prompt.id esimeses session.update-is või ?agent_id=12Avaldatud viip, hääl, toode, keeled, teadmised ja ühilduvad serveris käitatavad tööriistad ning selle seansi juhised ja muutujad
ReasiseneMitte kumbkiEsimene 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:

  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

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.