---
title: "Kasuta ThunderPhone'i Pipecatist"
description: "Käivita ThunderPhone'i häälagent Pipecati töövoos kõnelt kõneks teenusena, kasutades oma transpordi- ja telefonilahendust."
---

[Pipecat](https://github.com/pipecat-ai/pipecat) on avatud lähtekoodiga raamistik,
millega saab koostalitlusvõimelistest teenustest häälagente luua. ThunderPhone
ühendub **kõne-kõne LLM-teenusena**: Pipecat saadab helistaja heli, ThunderPhone
tagastab agendi hääle, transkriptsioonid ja funktsioonikutsed ning Pipecati
transpordikiht (Daily, LiveKit, Twilio, WebRTC, kohalik mikrofon) edastab heli.
Kõnetuvastus, keelemudel, hääl, vooruvahetus, 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 kõne eest ([hinnakiri](/et/guides/pricing)). Tellimust ega ThunderPhone'i telefoninumbrit pole vaja.

## Paigalda

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

Pakett kasutab Pipecati OpenAI Realtime'i teenust, sest ThunderPhone'i
[Realtime WebSocket](/api-reference/realtime) kasutab sama protokolli. See
vajab `pipecat-ai` versiooni 1.8 või uuemat.

## Käivita salvestatud agent

Kõik, mida agent teeb (viip, hääl, mootor, keeled, tööriistad, tervitus,
vaikuse kontrollid), seadistatakse ThunderPhone'is. Andmetöötlusahel liigutab
ainult heli.

```python
from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.worker import PipelineParams, PipelineWorker
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
from pipecat_thunderphone import ThunderPhoneRealtimeLLMService

llm = ThunderPhoneRealtimeLLMService(agent_id=12)

context = LLMContext()
aggregators = LLMContextAggregatorPair(context)
pipeline = Pipeline([
    transport.input(),
    aggregators.user(),
    llm,
    aggregators.assistant(),
    transport.output(),
])
worker = PipelineWorker(pipeline, params=PipelineParams(allow_interruptions=True))
```

Salvestatud agent alustab kõnet oma ajastuse järgi, seega teenus ei küsi
Pipecatilt alustavat vastust. Kui soovid seda siiski teha, edasta
`greet_on_connect=True`.

## Seadista seanss otse koodis

Ilma `agent_id`-ta tulevad juhised ja tööriistad Pipecati kontekstist samamoodi
nagu OpenAI puhul. `product` valib mootori ja `voice` valib ThunderPhone'i
hääle.

```python
from pipecat.adapters.schemas.function_schema import FunctionSchema
from pipecat.adapters.schemas.tools_schema import ToolsSchema
from pipecat.services.llm_service import FunctionCallParams

llm = ThunderPhoneRealtimeLLMService(product="bolt", voice="olivia", language="es")

async def check_availability(params: FunctionCallParams):
    slots = await calendar.free_slots(params.arguments["date"])
    await params.result_callback({"slots": slots})

llm.register_function("check_availability", check_availability)

context = LLMContext(
    messages=[{"role": "system", "content": "You are Acme Dental's receptionist."}],
    tools=ToolsSchema(standard_tools=[
        FunctionSchema(
            name="check_availability",
            description="Free appointment slots on a date",
            properties={"date": {"type": "string"}},
            required=["date"],
        )
    ]),
)
```

Otse koodis seadistatud seansse juhib klient: agent räägib esimesena, sest
Pipecat küsib vastust konteksti saabumisel, ning püsib vaikuse ajal vait, kui
sa ei lisa sõnumit ega küsi uut vastust.

## 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 väärtustega `product` ja `voice`. |
| `product` | Mootor sisesessioonide jaoks: `spark`, `bolt` või `storm`. |
| `voice` | ThunderPhone'i hääle nimi sisesessioonide jaoks. |
| `language` | Esmane keele vihje sisesessioonide jaoks, nt `es`. |
| `from_number`, `to_number` | Numbrid, mis salvestatakse kõnes, kui konveier on telefoniliini ees. |
| `live_transcripts` | Edasta helistaja transkriptsiooni fragmendid kõne ajal (lisatasu eest). |
| `greet_on_connect` | Taotle esimest vastust kohe, kui sessioon on valmis. |
| `end_task_on_call_ended` | Saada `EndWorkerFrame`, kui ThunderPhone lõpetab kõne (vaikimisi sisse lülitatud). |

## Sündmused

ThunderPhone lisab reaalajaprotokollile platvormi sündmused. Teenus
edastab need töötlejatele:

```python
@llm.event_handler("on_call_ended")
async def on_call_ended(service, event):
    print("call ended:", event["reason"], "call id:", service.call_id)
```

`service.call_id` määratakse, kui sessioon on aktiivne. Kasuta seda koos
[`GET /v1/calls/{call_id}`](/api-reference/calls), et tuua pärast kõnet
salvestis, transkriptsioon ja hinne.

## Piirangud

- Voorude tuvastamine toimub serveris ja on alati sisse lülitatud; Pipecati juhitud voorud
  (`turn_detection=False`) ei ole toetatud.
- Teenuses registreeritud funktsioonid töötavad ainult sisesessioonide puhul. Salvestatud
  agent käivitab ThunderPhone'is oma tööriistad.
- Heli on mõlemas suunas 16-bitine mono PCM sagedusel 24 kHz.
- Videokaadreid eiratakse.

<Note>
Kas kasutad hoopis LiveKit Agentsit? Vaata
[ThunderPhone'i kasutamine LiveKit Agentsiga](/et/guides/use-with-livekit).
</Note>
