الصوت في الوقت الفعلي في مرحلة تجريبية (Beta)، والوصول إليه مقيّد لكل مساحة عمل. عملاء الوقت الفعلي موجودون في مصدر حزم SDK لكنهم ليسوا في الحزم المنشورة (
3.0.0، وRust 0.2.0)؛ وسيُطرحون مع الإصدار القادم من كل حزمة SDK باستثناء C++.POST /v1/audio/realtime/sessions)، وافتح WebSocket المرحّل، وانتظر relay.connected. بعد ذلك، أرسل صوت PCM16 بالبث، واقرأ أحداث المزوّد، ثم أنهِ المكالمة لتحصل على فاتورتها النهائية. بروتوكول المرحّل والتحذيرات ورموز الأسباب موضّحة في جلسات الصوت في الوقت الفعلي.
ثبّت ما تحتاجه لغتك
- TypeScript
- Python
- Go
- C#
- PHP
- Ruby
- Java
- Rust
ترسل
client.realtime.connect() مفتاح API الخاص بك، لذا استدعها على خادمك فقط. يتضمن Node.js 22 أو أحدث WebSocket عامًا؛ وفي بيئات التشغيل الأقدم، ثبّت الحزمة ws أو مرّر المُنشئ الخاص بك بوصفه webSocket.للمكالمة التي تعمل في المتصفح، أنشئ الجلسة على خادمك وافتح المقبس في المتصفح باستخدام connectRealtimeSession(). تقبل هذه الدالة الجلسة التي أنشأها خادمك، بما في ذلك client_secret الخاص بها، الذي لا يعمل إلا لتلك الجلسة وحدها، ولا تحتاج أبدًا إلى مفتاح API. يعرض قسم المكالمات من المتصفح الجزأين كليهما.إجراء مكالمة
قراءة كل الأحداث
كرّر على الجلسة بدلًا من الاشتراك في كل نوع حدث على حدة. يتوقف التكرار عند إغلاق المقبس. في Python، يحصل أول مكرِّر أيضًا على الأحداث المستلمة منذ عودةconnect()، بدءًا من relay.connected.
async with session: المكالمة باستخدام end() عند الخروج من الكتلة، إن لم تكن قد انتهت بالفعل.
المكالمات من المتصفح
في TypeScript فقط. لا تضع أبدًا مفتاح Phaseo API في شيفرة المتصفح. على خادمك، أنشئ الجلسة باستخدامclient.realtime.createSession()، التي تقبل خيارات model وvoice وinstructions وprovider وmetadata نفسها التي تقبلها connect()، وأعد الاستجابة إلى صفحتك:
TypeScript
connectRealtimeSession(). تفتح هذه الدالة المرحّل باستخدام client_secret الخاص بالجلسة وتعيد كائن الجلسة نفسه الذي تعيده connect():
TypeScript
connectRealtimeSession(info, options) الخيارين webSocket وconnectTimeoutMs مثل connect()، إضافة إلى baseUrl (القيمة الافتراضية https://api.phaseo.app/v1) إذا كنت تستخدم نقطة نهاية إقليمية.
خيارات الاتصال
ترسل كل حزمة SDK الحقلmodel (مطلوب، مثل openai/gpt-realtime-2) والحقول الاختيارية voice وinstructions وprovider وmetadata إلى طلب إنشاء الجلسة، وتنتظر relay.connected مدة 30 ثانية افتراضيًا.
الجلسة
في TypeScript وPython:
تتضمن حزم SDK الأخرى العمليات نفسها. الصوت بايتات PCM16، تُرمَّز بترميز base64 نيابةً عنك؛ وتمر أحداث المزوّد دون تغيير بنوع JSON الخاص بكل لغة؛ والمهلة الافتراضية لـ
end هي 60 ثانية.
الأخطاء
إذا أُغلق المقبس، أو انتهت مهلةend()، دون session.ended، يفشل إنهاء المكالمة بخطأ جلسة مغلقة. تظل المكالمة مُفوترة. يحمل الخطأ مسار الفاتورة النهائية، GET /v1/generations?id=realtime%3A<session_id>، الذي يعيد التكلفة النهائية بمجرد تسويتها.
تفشل
connect() إذا أنهى المرحّل الجلسة قبل أن يتصل، أو إذا لم يصل relay.connected في الوقت المحدد (تطلق Python الخطأ TimeoutError؛ وتعيد Rust RealtimeError::EndedBeforeConnecting أو RealtimeError::ConnectTimeout).