ThunderPhone 2.0 er lanceret.Selvbetjening fra 2 cent/min.Læs mere om lanceringen

Connect tools & data

Brug ThunderPhone fra LiveKit Agents

Kør en ThunderPhone-stemmeagent som realtidsmodellen (tale-til-tale) i en LiveKit Agents-session med LiveKit-rum, SIP og telefoni omkring den.

LiveKit Agents er et open source-framework til stemmeagenter i realtid oven på LiveKit-rum. ThunderPhone integreres som realtidsmodellen: frameworket sender deltagerens lyd, ThunderPhone returnerer agentens stemme, transskriptioner og funktionskald, og LiveKits rum, SIP-trunks og telefoni transporterer lyden. Talegenkendelse, sprogmodellen, stemmen, turhåndtering, 47 sprog og værktøjer kører alle på ThunderPhone.

Opkald foretaget på denne måde vises i opkaldshistorikken og faktureres til dit produkts minutpris som ethvert andet realtidsopkald. Der er intet abonnement og intet ThunderPhone-telefonnummer involveret.

Installer

pip install livekit-plugins-thunderphone
export THUNDERPHONE_API_KEY=sk_live_...   # a secret API key

Pluginet indpakker LiveKits OpenAI Realtime-model, fordi ThunderPhones Realtime WebSocket taler den samme protokol. Det kræver livekit-agents 1.8 eller nyere.

Kør en gemt agent

Alt, agenten gør (prompt, stemme, motor, sprog, værktøjer, hilsen, stilhedstjek), konfigureres på ThunderPhone. Sessionen flytter kun lyd.

from livekit.agents import Agent, AgentSession, JobContext, WorkerOptions, cli
from livekit.plugins import thunderphone
 
 
async def entrypoint(ctx: JobContext):
    session = AgentSession(llm=thunderphone.RealtimeModel(agent_id=12))
    await session.start(agent=Agent(instructions=""), room=ctx.room)
 
 
if __name__ == "__main__":
    cli.run_app(WorkerOptions(entrypoint_fnc=entrypoint))

En gemt agent hilser og kører sine egne værktøjer på ThunderPhone; LiveKit- Agentens instruktioner og værktøjer sendes ikke. Opkaldet afsluttes, når ThunderPhone-agenten lægger på, og sessionen lukkes sammen med den.

Konfigurer sessionen direkte

Uden agent_id kommer instruktioner og værktøjer fra LiveKit-Agenten på samme måde som for OpenAI. product vælger motoren, og voice vælger ThunderPhone-stemmen.

from livekit.agents import Agent, AgentSession, RunContext, function_tool
from livekit.plugins import thunderphone
 
 
class Receptionist(Agent):
    def __init__(self):
        super().__init__(instructions="You are Acme Dental's receptionist. Be brief.")
 
    @function_tool
    async def check_availability(self, context: RunContext, date: str) -> dict:
        """Free appointment slots on a date."""
        return {"slots": await calendar.free_slots(date)}
 
 
async def entrypoint(ctx: JobContext):
    session = AgentSession(
        llm=thunderphone.RealtimeModel(product="bolt", voice="olivia", language="es"),
    )
    await session.start(agent=Receptionist(), room=ctx.room)
    await session.generate_reply()   # the agent speaks first

ThunderPhone låser instruktioner og værktøjer, når opkaldet starter, så update_instructions, update_tools og agentoverdragelser, der ændrer dem, understøttes ikke under opkaldet. Direkte sessioner styres af klienten: agenten taler, når du kalder generate_reply(), eller når deltageren afslutter en tur.

Indstillinger

ArgumentBetydning
api_keyHemmelig nøgle (sk_live_...). Standard er THUNDERPHONE_API_KEY.
agent_idKør en gemt agent. Kan ikke bruges sammen med product og voice.
productMotor til integrerede sessioner: spark, bolt eller storm.
voiceThunderPhone-stemmenavn til integrerede sessioner.
languagePrimært sprogtip til integrerede sessioner, f.eks. es.
from_number, to_numberNumre, der skal registreres i opkaldet, når rummet håndterer en telefonlinje.
live_transcriptsStream fragmenter af opkalderens transskription midt i en ytring (faktureres ekstra).
base_urlTilsidesættelse af endpoint, standard er wss://api.thunderphone.com/v1/realtime.

Hændelser

ThunderPhone tilføjer platformshændelser oven på realtime-protokollen. Sessionen udsender dem:

@session.llm.session.on("thunderphone_call_ended")  # or on the RealtimeSession you hold
def on_call_ended(event):
    print("call ended:", event["reason"])

RealtimeSession eksponerer call_id, når sessionen er aktiv. Brug den med GET /v1/calls/{call_id} til at hente optagelsen, transskriptionen og vurderingen efter opkaldet. Alle andre call.*-hændelser (overførsel, tastatur, tale ignoreret) ankommer som thunderphone_call_event.

Begrænsninger

  • Turdetektering foregår på serversiden og er altid aktiveret; turdetektering på frameworksiden (turn_detectionAgentSession) ignoreres.
  • Instruktioner og værktøjer kan ikke ændres, når opkaldet er startet.
  • Lyd er 16-bit mono-PCM ved 24 kHz i begge retninger.
  • Videobilleder ignoreres.