---
title: "Kasuta ThunderPhone'i LiveKit Agentsi kaudu"
description: "Käivita ThunderPhone'i häälagent LiveKit Agentsi seansi reaalajas (kõne-kõneks) mudelina, kasutades selle ümber LiveKiti ruume, SIP-i ja telefonisidet."
---

[LiveKit Agents](https://github.com/livekit/agents) on avatud lähtekoodiga raamistik
reaalajas töötavate häälagentide jaoks LiveKiti ruumides. ThunderPhone ühendub
**reaalajamudelina**: raamistik saadab osaleja heli, ThunderPhone tagastab
agendi hääle, transkriptsioonid ja funktsioonikutseid ning LiveKiti ruum,
SIP-magistraalid ja telefoniside edastavad heli. Kõnetuvastus, keelemudel,
hääl, kõnevoorude haldus, 47 keelt ja tööriistad töötavad kõik ThunderPhone'is.

Sel viisil tehtud kõned kuvatakse [kõneajaloos](/api-reference/calls) ja nende eest
esitatakse arve nagu iga muu reaalajas toimuva kõne eest ([hinnakiri](/et/guides/pricing)). Sellega
ei kaasne tellimust ega ThunderPhone'i telefoninumbrit.

## Paigalda

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

Plugin kasutab LiveKiti OpenAI Realtime'i mudelit, sest ThunderPhone'i
[Realtime WebSocket](/api-reference/realtime) kasutab sama protokolli. See
vajab `livekit-agents` versiooni 1.8 või uuemat.

<Note>
Plugin on ülevaatamisel
[livekit/agents](https://github.com/livekit/agents) repositooriumis. Kuni LiveKit
selle avaldab, paigalda see harust:

```bash
pip install "git+https://github.com/kolchinski/agents@add-thunderphone-plugin#subdirectory=livekit-plugins/livekit-plugins-thunderphone"
```
</Note>

## Käivita salvestatud agent

Kõik, mida agent teeb (viip, hääl, mootor, keeled, tööriistad, tervitus,
vaikuse järelkontrollid), on seadistatud ThunderPhone'is. Seanss edastab ainult heli.

```python
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))
```

Salvestatud agent tervitab ja käivitab oma tööriistad ThunderPhone'is; LiveKiti
`Agent`i juhiseid ja tööriistu ei saadeta. Kõne lõpeb, kui ThunderPhone'i agent
katkestab kõne, ning seanss suletakse koos sellega.

## Seadista seanss otse koodis

Ilma `agent_id`-ta tulevad juhised ja tööriistad LiveKit `Agent`-ilt, samamoodi nagu OpenAI puhul. `model` valib mootori ja `voice` ThunderPhone'i hääle.

```python
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(model="bolt", voice="olivia", language="es"),
    )
    await session.start(agent=Receptionist(), room=ctx.room)
    await session.generate_reply()   # the agent speaks first
```

ThunderPhone fikseerib juhised ja tööriistad kõne alguses, seega ei toetata
`update_instructions`, `update_tools` ega neid muutvaid agendi üleandmisi kõne
ajal. Otse koodis seadistatud seansid on kliendi juhitud: agent räägib, kui
kutsud `generate_reply()` või kui osaleja lõpetab oma kõnevooru.

## Valikud

| Argument | Tähendus |
|---|---|
| `api_key` | Salajane võti (`sk_live_...`). Vaikimisi kasutatakse `THUNDERPHONE_API_KEY`. |
| `agent_id` | Käivita salvestatud agent. Ei saa kasutada koos valikutega `model` ja `voice`. |
| `model` | Mootor siseseansside jaoks: `spark`, `bolt` või `storm`. |
| `voice` | ThunderPhone'i hääle nimi siseseansside jaoks. |
| `language` | Siseseansside peamise keele vihje, nt `es`. |
| `caller_number`, `callee_number` | Kõne telefoninumbrid, kui ruum on seotud telefoniliiniga. Need kuvatakse kõneajaloos lähte- ja sihtnumbrina. |
| `live_transcripts` | Edasta helistaja transkriptsioonifragmente lausungi ajal (lisatasu eest). |
| `base_url` | Lõpp-punkti alistamine, vaikimisi `wss://api.thunderphone.com/v1/realtime`. |

## Sündmused

ThunderPhone lisab reaalajaprotokollile platvormisündmused. Seanss
väljastab need:

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

`RealtimeSession` pakub `call_id`-d, kui seanss on aktiivne. Kasuta seda koos
[`GET /v1/calls/{call_id}`](/api-reference/calls)-iga, et tuua pärast kõnet
salvestis, transkriptsioon ja hinne. Kõik muud `call.*` sündmused (ümbersuunamine,
klahvistik, eiratud kõne) saabuvad sündmusena `thunderphone_call_event`.

## Piirangud

- Kõnevooru tuvastamine toimub serveris ja on alati sisse lülitatud; raamistiku-poolset kõnevooru tuvastamist
  (`turn_detection` objektis `AgentSession`) eiratakse.
- Juhiseid ja tööriistu ei saa pärast kõne algust muuta.
- Heli on mõlemas suunas 16-bitine mono PCM sagedusega 24 kHz.
- Videokaadreid eiratakse.

<Note>
Kasutad hoopis Pipecat'i? Vaata [ThunderPhone'i kasutamine Pipecatiga](/et/guides/use-with-pipecat).
</Note>
