ThunderPhone 2.0 är här.Kom igång själv, från 2 cent/minut.Läs lanseringsnyheten

Connect tools & data

Använd ThunderPhone från LiveKit Agents

Kör en ThunderPhone-röstagent som realtidsmodellen (tal-till-tal) i en LiveKit Agents-session, med LiveKit-rum, SIP och telefoni runt den.

LiveKit Agents är ett ramverk med öppen källkod för röstagenter i realtid ovanpå LiveKit-rum. ThunderPhone ansluts som realtidsmodellen: ramverket skickar deltagarens ljud, ThunderPhone returnerar agentens röst, transkriptioner och funktionsanrop, och LiveKits rum, SIP-trunkar och telefoni transporterar ljudet. Taligenkänning, språkmodellen, rösten, turordning, 47 språk och verktyg körs alla på ThunderPhone.

Samtal som görs på detta sätt visas i samtalshistoriken och debiteras enligt din produkts minutpris, precis som alla andra realtidssamtal. Det finns ingen prenumeration och inget ThunderPhone-telefonnummer inblandat.

Installera

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

Pluginet omsluter LiveKits OpenAI Realtime-modell eftersom ThunderPhones Realtime WebSocket använder samma protokoll. Det kräver livekit-agents 1.8 eller senare.

Kör en sparad agent

Allt agenten gör (prompt, röst, motor, språk, verktyg, hälsning, tystnadskontroller) konfigureras i ThunderPhone. Sessionen överför bara ljud.

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 sparad agent hälsar och kör sina egna verktyg i ThunderPhone; LiveKit- Agent-instruktionerna och verktygen skickas inte. Samtalet avslutas när ThunderPhone-agenten lägger på, och sessionen stängs tillsammans med den.

Konfigurera sessionen direkt i koden

Utan agent_id kommer instruktioner och verktyg från LiveKit-Agent, på samma sätt som för OpenAI. product väljer motor och voice väljer ThunderPhone-röst.

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 och verktyg när samtalet startar, så update_instructions, update_tools och agentöverlämningar som ändrar dem stöds inte mitt i samtalet. Direktkonfigurerade sessioner är klientstyrda: agenten talar när du anropar generate_reply() eller när deltagaren avslutar sin tur.

Alternativ

ArgumentBetydelse
api_keyHemlig nyckel (sk_live_...). Standardvärdet är THUNDERPHONE_API_KEY.
agent_idKör en sparad agent. Kan inte användas tillsammans med product och voice.
productMotor för infogade sessioner: spark, bolt eller storm.
voiceThunderPhone-röstnamn för infogade sessioner.
languageLedtråd om primärt språk för infogade sessioner, till exempel es.
from_number, to_numberNummer som ska registreras i samtalet när rummet hanterar en telefonlinje.
live_transcriptsStrömma fragment av uppringarens transkribering mitt i ett yttrande (debiteras extra).
base_urlÅsidosättning av slutpunkt, standardvärdet är wss://api.thunderphone.com/v1/realtime.

Händelser

ThunderPhone lägger till plattformshändelser ovanpå realtidsprotokollet. Sessionen skickar ut 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 exponerar call_id när sessionen är aktiv. Använd det med GET /v1/calls/{call_id} för att hämta inspelningen, transkriberingen och bedömningen efter samtalet. Alla andra call.*-händelser (överföring, knappsats, tal ignorerat) kommer som thunderphone_call_event.

Begränsningar

  • Turdetektering sker på serversidan och är alltid aktiverad; turdetektering på ramverkssidan (turn_detectionAgentSession) ignoreras.
  • Instruktioner och verktyg kan inte ändras när samtalet har startat.
  • Ljudet är 16-bitars mono-PCM vid 24 kHz i båda riktningarna.
  • Videobilder ignoreras.