ThunderPhone 2.0 je tu.Začnite sami, že od 2 ¢/min.Preberite obvestilo

Connect tools & data

Uporabite ThunderPhone z odjemalci OpenAI Realtime

Odjemalca strežnika, združljivega z OpenAI Realtime, usmerite na ThunderPhone z uporabo shranjenega agenta ali vdelane konfiguracije seje.

ThunderPhone izvaja osredotočeno podmnožico dogodkovnega modela OpenAI Realtime. Obstoječi odjemalec na strani strežnika lahko ohrani tok dogodkov WebSocket, zvoka, seje in odzivov ter uporablja glasovnega agenta ThunderPhone.

Preden se povežete

Potrebujete tajni ključ API organizacije ThunderPhone in izvajalno okolje strežnika, ki lahko odpre povezave WebSocket. Ne povezujte se iz kode brskalnika in ključa ne izpostavljajte brskalniku. Če želite uporabiti shranjenega agenta, ga najprej uvedite in kopirajte njegov številčni ID agenta.

Povežite se z:

wss://api.thunderphone.com/v1/realtime

Nadgradnjo povezave WebSocket preverite z avtentikacijo iz strežnika:

Authorization: Bearer sk_live_YOUR_API_KEY

Preverjanje pristnosti s poizvedbenim nizom je na voljo za odjemalce, ki ne morejo nastaviti glav med rokovanjem, vendar se URL-ji lažje razkrijejo v dnevnikih.

Izberite, kdo upravlja konfiguracijo

NačinPovezava zVir konfiguracije
Shranjeni agent?agent_id=12Uvedeni poziv, glas, produkt, jeziki, znanje in združljiva orodja, ki se izvajajo na strežniku
V vrsticiBrez agent_idPrvi sprejeti session.update vašega odjemalca

Shranjeni agent

Povežite se z ID-jem uvedenega agenta:

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

Agent se zažene med povezovanjem vtičnice. Njegov pozdrav ostane na voljo, vendar Realtime onemogoči njegova govorna preverjanja med tišino in izpusti transfer_call ter send_keypad_input. Druga združljiva orodja se izvajajo v ThunderPhone. Za ta način ne pošiljajte navodil v vrstici ali orodij, ki jih izvaja odjemalec.

Pred zagonom agenta nastavite zvok na povezavi s parametri poizvedbe input_audio_format, output_audio_format, input_rate in output_rate. Po povezavi ne morete spremeniti shranjene konfiguracije ali zvočnih formatov.

Seja v vrstici

Brez agent_id počakajte na session.created, nato pošljite 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"
    }
  }
}

Prva sprejeta posodobitev pripravi klic. session.updated pomeni, da je seja aktivna. Navodil, glasu, produkta, orodij in zvočnih formatov po tej točki ni mogoče spremeniti.

Seje v vrstici nimajo samodejnega pozdrava ali govornih preverjanj med tišino. Če želite, da agent spregovori prvi, dodajte sistemsko ali uporabniško sporočilo in pošljite response.create. Popolnoma nedejavna seja se še vedno konča ob omejitvi platforme za tihe klice, ki je privzeto 600 sekund.

Uporabite uradni SDK za OpenAI

Posredujte osnovni URL za WebSocket, ki se konča z /v1; SDK doda /realtime. Vrednost model je ime za združljivost in ne izbere izdelka ThunderPhone. Izdelek izberite v konfiguraciji seje ali shranjenem agentu.

To preverjanje povezave ustvari vstavljeno sejo Bolt, izpisuje dogodke do prvega session.updated in nato povezavo zapre. Za pretakanje zvoka uporabite minimalni odjemalec Python.

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())

Ohranite obstoječe obravnavanje dodajanja vhodnega zvoka, razlik odzivnega zvoka, prekinitev, klicev funkcij, napak in čistega zapiranja vtičnice. Vstavljene funkcije po meri se izvajajo v vašem odjemalcu; njihove rezultate vrnite prek protokola Realtime. Orodja shranjenega agenta se izvajajo v ThunderPhone.

Življenjski cikel seje in napake

En WebSocket predstavlja en klic. Neveljaven ID agenta ali zavrnjena vstavljena konfiguracija povzroči dogodek error. Preden sejo obravnavate kot aktivno, počakajte na session.updated. Navedite dejanske vhodne in izhodne formate ter vzorčne frekvence: neujemanje frekvence PCM predvaja zvok prehitro ali prepočasi, namesto da bi povzročilo napako preverjanja veljavnosti.

Ko se seja začne, vtičnico čisto zaprite, ko aplikacija konča delo. Vstavljene seje lahko uporabljajo funkcije, ki se izvajajo v odjemalcu. Seje shranjenega agenta uporabljajo združljiva orodja, ki jih izvaja ThunderPhone, in ne omogočajo prenosa ali vnosa s tipkovnico.

Preizkusite integracijo

Začnite z minimalnim odjemalcem Python WAV in mono PCM16 WAV pri navedeni frekvenci. Preverite:

  1. Strežnik sprejme konfiguracijo in pošlje session.updated.
  2. Vhod ustvari dogodke prepisa in odzivnega zvoka s pričakovano hitrostjo.
  3. Prekinitev in preklic odziva ustavita preostali izhodni zvok.
  4. Rezultati vstavljenih funkcij ali orodij shranjenega agenta se vrnejo modelu.
  5. Neveljaven vnos ustvari dogodek error, ki ga vaš odjemalec obravnava.
  6. Vaš odjemalec zapre vtičnico in klic se prikaže v Zgodovini klicev.

Vodnik za Realtime WebSocket navaja sprejete dogodke, zvočne formate, polja seje in popolne primere.

Cena

Klici Realtime uporabljajo običajno ceno izbranega izdelka na minuto. Omogočanje sprotnih razlik prepisov doda doplačilo na minuto za celotno sejo; za ceno glejte Sprotni prepisi, za cene izdelkov pa Cenik.

POST /v1/realtime/sessions je ločena upravljana pot LiveKit. Ustvari sobo in žeton udeleženca z omejenim obsegom; ni potrebna za neposredno povezavo WebSocket.

Za integracije z ogrodji glejte Uporabite ThunderPhone iz Pipecat in Uporabite ThunderPhone iz LiveKit Agents.