---
title: "ThunderPhone'u OpenAI Realtime istemcileriyle kullanın"
description: "OpenAI Realtime uyumlu bir sunucu istemcisini, kayıtlı bir yapay zeka ajanı veya satır içi oturum yapılandırması kullanarak ThunderPhone'a yönlendirin."
---

ThunderPhone, OpenAI Realtime olay modelinin odaklanmış bir alt kümesini uygular.
Mevcut bir sunucu tarafı istemcisi, ThunderPhone sesli AI ajanını kullanırken WebSocket, ses, oturum ve
yanıt olay akışını koruyabilir.

## Bağlanmadan önce

Bir ThunderPhone kuruluş gizli API anahtarına ve WebSocket açabilen bir sunucu çalışma zamanına
ihtiyacınız vardır. Tarayıcı kodundan bağlanmayın veya anahtarı tarayıcıya göstermeyin.
Kaydedilmiş bir ajanı kullanmak için önce yayına alın ve sayısal ajan kimliğini kopyalayın.

Şuraya bağlanın:

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

WebSocket yükseltmesini sunucunuzdan kimlik doğrulayın:

```http
Authorization: Bearer sk_live_YOUR_API_KEY
```

El sıkışma başlıklarını ayarlayamayan istemciler için sorgu dizesiyle kimlik doğrulama
mevcuttur, ancak URL'lerin günlük dosyalarına sızması daha kolaydır.

## Yapılandırmanın sahibini seçin

| Mod | Şununla bağlanın | Yapılandırma kaynağı |
| --- | --- | --- |
| Kaydedilmiş ajan | `?agent_id=12` | Yayına alınmış istem, ses, ürün, diller, bilgi ve uyumlu sunucuda çalıştırılan araçlar |
| Satır içi | `agent_id` yok | İstemcinizden kabul edilen ilk `session.update` |

### Kaydedilmiş ajan

Yayına alınmış ajan kimliğiyle bağlanın:

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

Ajan, soket bağlanırken başlar. Karşılama mesajı kullanılabilir kalır,
ancak Realtime konuşmalı sessizlik kontrollerini devre dışı bırakır ve `transfer_call`
ile `send_keypad_input` öğelerini atlar. Diğer uyumlu araçlar ThunderPhone üzerinde çalışır.
Bu mod için satır içi talimatlar veya istemci tarafından yürütülen araçlar göndermeyin.

Ajan başlamadan önce `input_audio_format`,
`output_audio_format`, `input_rate` ve `output_rate` sorgu parametreleriyle hat sesini ayarlayın.
Bağlantıdan sonra kaydedilmiş yapılandırmayı veya ses biçimlerini değiştiremezsiniz.

### Satır içi oturum

`agent_id` olmadan `session.created` öğesini bekleyin, ardından `session.update` gönderin:

```json
{
  "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"
    }
  }
}
```

Kabul edilen ilk güncelleme çağrıyı hazırlar. `session.updated`, oturumun
etkin olduğu anlamına gelir. Bu noktadan sonra talimatlar, ses, ürün, araçlar ve ses biçimleri
değiştirilemez.

Satır içi oturumlarda otomatik karşılama veya konuşmalı sessizlik kontrolleri yoktur.
Ajanın önce konuşmasını sağlamak için bir sistem ya da kullanıcı mesajı ekleyin ve
`response.create` gönderin. Tamamen boşta kalan bir oturum yine de platformun
varsayılan olarak 600 saniye olan sessiz çağrı sınırında sona erer.

## Resmi OpenAI SDK'sını kullanın

`/v1` ile biten bir WebSocket temel URL'si iletin; SDK `/realtime` ekler. 
`model` değeri bir uyumluluk adıdır ve ThunderPhone ürününü seçmez.
Ürünü oturum yapılandırmasında veya kaydedilmiş ajanda seçin.

Bu bağlantı kontrolü satır içi bir Bolt oturumu oluşturur, ilk `session.updated`
olayına kadar olayları yazdırır ve kapanır. Sesi akış olarak iletmek için
[minimum Python istemcisini](/api-reference/realtime#minimal-python-client) kullanın.

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

Giriş sesi ekleme, yanıt sesi deltaları, kesintiler, işlev çağrıları, hatalar ve
temiz soket kapatma için mevcut işlemlerinizi koruyun. Satır içi özel işlevler
istemcinizde çalışır; sonuçlarını Realtime protokolü üzerinden döndürün.
Kaydedilmiş ajan araçları ThunderPhone üzerinde çalışır.

## Oturum yaşam döngüsü ve hatalar

Bir WebSocket bir çağrıyı temsil eder. Geçersiz bir ajan kimliği veya reddedilen
satır içi yapılandırma bir `error` olayı üretir. Oturumu canlı olarak kabul
etmeden önce `session.updated` olayını bekleyin. Gerçek giriş ve çıkış
biçimlerini ve örnekleme hızlarını belirtin: PCM hızı uyuşmazlığı, doğrulama
hatası üretmek yerine sesin çok hızlı veya çok yavaş çalınmasına neden olur.

Oturum başladıktan sonra, uygulamanız tamamlandığında soketi temiz şekilde
kapatın. Satır içi oturumlar istemcide çalıştırılan işlevleri kullanabilir.
Kaydedilmiş ajan oturumları ThunderPhone tarafından çalıştırılan uyumlu araçları
kullanır ve aktarma veya tuş takımı girişi sunmaz.

## Entegrasyonu test edin

[Minimum Python WAV istemcisi](/api-reference/realtime#minimal-python-client)
ve belirtilen hızında mono PCM16 WAV ile başlayın. Şunları doğrulayın:

1. Sunucunun yapılandırmayı kabul ettiğini ve `session.updated` gönderdiğini.
2. Girdinin, beklenen hızda transkript ve yanıt sesi olayları ürettiğini.
3. Kesintinin ve yanıt iptalinin kalan çıkış sesini durdurduğunu.
4. Satır içi işlev sonuçlarının veya kaydedilmiş ajan araç sonuçlarının modele döndüğünü.
5. Geçersiz girdinin, istemcinizin işlediği bir `error` olayı ürettiğini.
6. İstemcinizin soketi kapattığını ve çağrının [Çağrı
   geçmişinde](/tr/guides/review-calls) göründüğünü.

[Realtime WebSocket referansı](/api-reference/realtime), kabul edilen olayları,
ses biçimlerini, oturum alanlarını ve eksiksiz örnekleri listeler.

## Maliyet

Realtime çağrıları, seçilen ürünün normal dakika başına ücretini kullanır. Canlı
transkript deltalarını etkinleştirmek, oturumun tamamı için dakika başına ek
ücret ekler; ücret için [Canlı transkriptler](/api-reference/realtime#live-transcripts)
ve ürün ücretleri için [Fiyatlandırma](/tr/guides/pricing) bölümüne bakın.

`POST /v1/realtime/sessions`, ayrı bir yönetilen LiveKit yoludur. Bir oda ve
kapsamlı katılımcı belirteci oluşturur; doğrudan WebSocket bağlantısı için
gerekli değildir.

Çerçeve entegrasyonları için [ThunderPhone'u Pipecat ile kullanın](/tr/guides/use-with-pipecat)
ve [ThunderPhone'u LiveKit Agents ile kullanın](/tr/guides/use-with-livekit) bölümlerine bakın.
