Realtime (WebSocket)

wss://…/v1/realtime — پروتکل Realtime اوپن‌ای‌آی، صدا و متن دوطرفه، هر نشست یک رزرو.

WSSwss://iranrouter.com/v1/realtime?model={model}

پروتکل Realtime اوپن‌ای‌آی روی WebSocket، بایت‌به‌بایت همان‌طور که SDK می‌فرستد و می‌خواند — session.update، input_audio_buffer.append، response.create، … و رویدادهای سرور. فقط مدل‌هایی که در کاتالوگ قابلیت realtime دارند.

Python
from openai import OpenAI

client = OpenAI(api_key="ir-...", websocket_base_url="wss://iranrouter.com/v1")
with client.beta.realtime.connect(model="openai/gpt-4o-realtime-preview") as conn:
    conn.session.update(session={"modalities": ["text"]})
    conn.conversation.item.create(item={"type": "message", "role": "user", "content": [{"type": "input_text", "text": "سلام"}]})
    conn.response.create()
    for event in conn:
        if event.type == "response.text.delta":
            print(event.delta, end="")
        elif event.type == "response.done":
            break
موضوعرفتار
احراز هویتهدر Authorization: Bearer ir-…، یا از مرورگر در زیرپروتکل openai-insecure-api-key.ir-… (همان‌طور که SDK اوپن‌ای‌آی می‌فرستد).
صورت‌حسابهر نشست یک درخواست است: در اتصال ۱ دلار (به ریال روز) رزرو می‌شود، مصرف از هر response.done جمع می‌شود (توکن متن، صدا و کش با نرخ خودشان)، در بستن تسویه و مابقی آزاد می‌شود.
بودجهٔ نشستبا رسیدن مصرف به ۸۰٪ رزرو، رویداد error با کد session_budget_reached می‌آید و اتصال بسته می‌شود؛ دوباره وصل شوید. حداکثر طول نشست ۳۰ دقیقه (session_max_duration).
کلیدفقط کلید اعتباری (کیف پول)؛ سهمیهٔ توکنی و کلید رایگان با model_not_in_plan رد می‌شوند. هر کاربر هم‌زمان تا ۵ نشست (realtime_session_limit).
رونویسی صدای ورودیinput_audio_transcription ارائه نمی‌شود: از session.update برداشته می‌شود و یک رویداد error با کد input_audio_transcription_unsupported می‌آید؛ بقیهٔ تنظیمات اعمال می‌شود.
قطع اتصال وسط پاسخپاسخی که هنگام قطع اتصال در حال تولید است لغو می‌شود و توکن‌های تولیدشده تا همان‌جا شارژ می‌شوند.
خطاهاپیش از بسته شدن، یک رویداد error در همان شکل اوپن‌ای‌آی می‌آید: invalid_api_key، model_not_found، model_not_realtime، insufficient_balance، no_capacity، upstream_error.
Realtime در OpenAPI نیست (WebSocket است). مسیر /openai/realtime هم همین نشست را می‌دهد تا websocket_base_url با پیشوند SDK کار کند.

برای صدا بدون نشست: audio ←