ThunderPhone 2.0 ir klāt.Sāciet patstāvīgi — no 2 ¢/min.Lasīt paziņojumu

Connect tools & data

Izmantojiet ThunderPhone ar OpenAI Realtime klientiem

Norādiet uz ThunderPhone ar OpenAI Realtime saderīgu servera klientu, izmantojot vai nu saglabātu balss aģentu, vai iekļautu sesijas konfigurāciju.

ThunderPhone ievieš mērķtiecīgu OpenAI Realtime notikumu modeļa apakškopu. Esošs servera puses klients var saglabāt savu WebSocket, audio, sesijas un atbildes notikumu plūsmu, vienlaikus izmantojot ThunderPhone balss aģentu.

Pirms pieslēgšanās

Jums nepieciešama ThunderPhone organizācijas slepenā API atslēga un servera izpildvide, kas var atvērt WebSocket savienojumus. Nepieslēdzieties no pārlūkprogrammas koda un nepakļaujiet atslēgu pārlūkprogrammai. Lai izmantotu saglabātu aģentu, vispirms to publicējiet un nokopējiet tā ciparu aģenta ID.

Pieslēdzieties šeit:

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

Autentificējiet WebSocket savienojuma jaunināšanu no sava servera:

Authorization: Bearer sk_live_YOUR_API_KEY

Vaicājuma virknes autentifikācija ir pieejama klientiem, kuri nevar iestatīt savienojuma galvenes, taču URL ir vieglāk nopludināt žurnālos.

Izvēlieties, kam pieder konfigurācija

RežīmsPieslēdzieties arKonfigurācijas avots
Saglabāts aģents?agent_id=12Publicēta uzvedne, balss, produkts, valodas, zināšanas un saderīgi serverī izpildāmi rīki
IekļautsBez agent_idPirmais no jūsu klienta pieņemtais session.update

Saglabāts aģents

Pieslēdzieties ar publicētā aģenta ID:

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

Aģents tiek palaists, kamēr ligzda savienojas. Tā sveiciens paliek pieejams, taču Realtime atspējo balss klusuma pārbaudes un neietver transfer_call un send_keypad_input. Citi saderīgie rīki tiek izpildīti pakalpojumā ThunderPhone. Nesūtiet šim režīmam iekļautas instrukcijas vai klientā izpildāmus rīkus.

Iestatiet pārraides audio pirms aģenta palaišanas, izmantojot vaicājuma parametrus input_audio_format, output_audio_format, input_rate un output_rate. Pēc pieslēgšanās nevarat mainīt saglabāto konfigurāciju vai audio formātus.

Iekļauta sesija

Bez agent_id gaidiet session.created, pēc tam nosūtiet 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"
    }
  }
}

Pirmais pieņemtais atjauninājums iestata zvanu. session.updated nozīmē, ka sesija ir aktīva. Pēc tam instrukcijas, balsi, produktu, rīkus un audio formātus vairs nevar mainīt.

Iekļautām sesijām nav automātiska sveiciena vai balss klusuma pārbaudes. Lai aģents runātu pirmais, pievienojiet sistēmas vai lietotāja ziņojumu un nosūtiet response.create. Pilnīgi neaktīva sesija joprojām beidzas, sasniedzot platformas klusā zvana limitu — pēc noklusējuma 600 sekundes.

Izmantojiet oficiālo OpenAI SDK

Norādiet WebSocket bāzes URL, kas beidzas ar /v1; SDK pievieno /realtime. Vērtība model ir saderības nosaukums un neizvēlas ThunderPhone produktu. Izvēlieties produktu sesijas konfigurācijā vai saglabātajā aģentā.

Šī savienojuma pārbaude izveido iekļautu Bolt sesiju, drukā notikumus līdz pirmajam session.updated un aizver savienojumu. Lai straumētu audio, izmantojiet minimālo Python klientu.

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

Saglabājiet esošo ievades audio pievienošanas, atbildes audio deltu, pārtraukumu, funkciju izsaukumu, kļūdu un korektas soketa aizvēršanas apstrādi. Iekļautās pielāgotās funkcijas tiek izpildītas jūsu klientā; atgrieziet to rezultātus, izmantojot Realtime protokolu. Saglabātā aģenta rīki tiek izpildīti pakalpojumā ThunderPhone.

Sesijas dzīves cikls un kļūmes

Viens WebSocket savienojums apzīmē vienu zvanu. Nederīgs aģenta ID vai noraidīta iekļautā konfigurācija rada error notikumu. Pirms sesijas uzskatīšanas par aktīvu gaidiet session.updated. Norādiet faktiskos ievades un izvades formātus un iztveršanas frekvences: PCM frekvences neatbilstība atskaņo audio pārāk ātri vai pārāk lēni, nevis rada validācijas kļūdu.

Kad sesija ir sākta, korekti aizveriet soketu, kad jūsu lietojumprogramma ir pabeigusi darbu. Iekļautās sesijās var izmantot klientā izpildāmas funkcijas. Saglabātā aģenta sesijās tiek izmantoti saderīgi ThunderPhone izpildīti rīki, un tās nepiedāvā pārsūtīšanu vai tastatūras ievadi.

Pārbaudiet integrāciju

Sāciet ar minimālo Python WAV klientu un mono PCM16 WAV failu ar tajā norādīto frekvenci. Pārbaudiet:

  1. Serveris pieņem konfigurāciju un nosūta session.updated.
  2. Ievade rada transkripta un atbildes audio notikumus paredzētajā ātrumā.
  3. Pārtraukums un atbildes atcelšana aptur atlikušo izvades audio.
  4. Iekļauto funkciju rezultāti vai saglabātā aģenta rīku rezultāti tiek atgriezti modelim.
  5. Nederīga ievade rada error notikumu, ko jūsu klients apstrādā.
  6. Jūsu klients aizver soketu, un zvans parādās Zvanu vēsturē.

Realtime WebSocket atsauce uzskaita pieņemtos notikumus, audio formātus, sesijas laukus un pilnīgus piemērus.

Izmaksas

Realtime zvaniem tiek piemērota izvēlētā produkta standarta maksa par minūti. Tiešo transkripta deltu iespējošana visai sesijai pievieno piemaksu par minūti; tarifu skatiet sadaļā Tiešie transkripti, bet produktu tarifus — sadaļā Cenas.

POST /v1/realtime/sessions ir atsevišķs pārvaldīts LiveKit ceļš. Tas izveido telpu un ierobežota tvēruma dalībnieka marķieri; tas nav nepieciešams tiešam WebSocket savienojumam.

Informāciju par ietvaru integrācijām skatiet sadaļās Izmantojiet ThunderPhone ar Pipecat un Izmantojiet ThunderPhone ar LiveKit Agents.