ThunderPhone 2.0 yayında.Hemen kendiniz kullanmaya başlayın; dakikası 2 sentten başlayan fiyatlarla.Duyuruyu okuyun

Connect tools & data

ThunderPhone

OpenAI Realtime uyumlu bir sunucu istemcisini, kayıtlı bir yapay zeka ajanı veya satır içi oturum yapılandırması kullanarak ThunderPhone

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:

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

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

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ınYapılandırma kaynağı
Kaydedilmiş ajan?agent_id=12Yayına alınmış istem, ses, ürün, diller, bilgi ve uyumlu sunucuda çalıştırılan araçlar
Satır içiagent_id yokİstemcinizden kabul edilen ilk session.update

Kaydedilmiş ajan

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

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:

{
  "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 kullanın.

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 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 göründüğünü.

Realtime WebSocket referansı, 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 ve ürün ücretleri için Fiyatlandırma 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 ve ThunderPhone'u LiveKit Agents ile kullanın bölümlerine bakın.