ThunderPhone 2.0 اب لائیو ہے۔سیلف سرو، قیمت 2¢ فی منٹ سے شروع۔اعلان پڑھیں

Connect tools & data

OpenAI Realtime کلائنٹس کے ساتھ ThunderPhone استعمال کریں

محفوظ کردہ ایجنٹ یا اِن لائن سیشن کنفیگریشن استعمال کرتے ہوئے، OpenAI Realtime سے ہم آہنگ سرور کلائنٹ کو ThunderPhone کی طرف پوائنٹ کریں۔

ThunderPhone، OpenAI Realtime ایونٹ ماڈل کے ایک مخصوص ذیلی مجموعے کو نافذ کرتا ہے۔ ایک موجودہ سرور سائیڈ کلائنٹ، ThunderPhone وائس ایجنٹ استعمال کرتے ہوئے اپنا WebSocket، آڈیو، سیشن، اور جوابی ایونٹ فلو برقرار رکھ سکتا ہے۔

کنیکٹ کرنے سے پہلے

آپ کو ThunderPhone تنظیم کی خفیہ API کلید اور ایسا سرور رن ٹائم درکار ہے جو WebSockets کھول سکے۔ براؤزر کوڈ سے کنیکٹ نہ کریں اور کلید کو براؤزر کے سامنے ظاہر نہ کریں۔ محفوظ شدہ ایجنٹ استعمال کرنے کے لیے، پہلے اسے ڈیپلائے کریں اور اس کا عددی ایجنٹ ID کاپی کریں۔

یہاں کنیکٹ کریں:

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

اپنے سرور سے WebSocket اپ گریڈ کی توثیق کریں:

Authorization: Bearer sk_live_YOUR_API_KEY

ایسے کلائنٹس کے لیے query-string توثیق موجود ہے جو handshake ہیڈرز سیٹ نہیں کر سکتے، لیکن URLs کے لاگز میں ظاہر ہونے کا امکان زیادہ ہوتا ہے۔

منتخب کریں کہ کنفیگریشن کا مالک کون ہے

موڈاس کے ساتھ کنیکٹ کریںکنفیگریشن کا ماخذ
محفوظ شدہ ایجنٹ?agent_id=12ڈیپلائے کیا گیا prompt، آواز، پروڈکٹ، زبانیں، نالج، اور مطابقت رکھنے والے سرور پر چلنے والے ٹولز
اِن لائنکوئی agent_id نہیںآپ کے کلائنٹ سے پہلا قبول شدہ session.update

محفوظ شدہ ایجنٹ

ڈیپلائے شدہ ایجنٹ ID کے ساتھ کنیکٹ کریں:

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

ساکٹ کنیکٹ ہوتے ہی ایجنٹ شروع ہو جاتا ہے۔ اس کا سلام دستیاب رہتا ہے، لیکن Realtime اس کے بول کر کیے جانے والے خاموشی چیک اِنز کو غیر فعال کر دیتا ہے اور transfer_call اور send_keypad_input کو شامل نہیں کرتا۔ دیگر مطابقت رکھنے والے ٹولز ThunderPhone پر چلتے ہیں۔ اس موڈ کے لیے اِن لائن ہدایات یا کلائنٹ کے ذریعے چلائے جانے والے ٹولز نہ بھیجیں۔

ایجنٹ شروع ہونے سے پہلے input_audio_format، output_audio_format، input_rate، اور output_rate query parameters کے ذریعے وائر آڈیو سیٹ کریں۔ کنکشن کے بعد آپ محفوظ شدہ کنفیگریشن یا آڈیو فارمیٹس تبدیل نہیں کر سکتے۔

اِن لائن سیشن

agent_id کے بغیر، session.created کا انتظار کریں، پھر session.update بھیجیں:

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

پہلی قبول شدہ اپ ڈیٹ کال کو provision کرتی ہے۔ session.updated کا مطلب ہے کہ سیشن فعال ہے۔ اس مقام کے بعد ہدایات، آواز، پروڈکٹ، ٹولز، اور آڈیو فارمیٹس تبدیل نہیں کیے جا سکتے۔

اِن لائن سیشنز میں خودکار سلام یا بول کر کیے جانے والے خاموشی چیک اِنز نہیں ہوتے۔ ایجنٹ کو پہلے بولنے کے لیے، سسٹم یا صارف کا پیغام شامل کریں اور response.create بھیجیں۔ مکمل طور پر غیر فعال سیشن پھر بھی پلیٹ فارم کی خاموش کال کی حد پر ختم ہو جاتا ہے، جو بطور ڈیفالٹ 600 سیکنڈ ہے۔

آفیشل OpenAI SDK استعمال کریں

ایسا WebSocket بنیادی URL دیں جو /v1 پر ختم ہو؛ SDK خود /realtime شامل کرتا ہے۔
model ویلیو مطابقت کا نام ہے اور ThunderPhone پروڈکٹ منتخب نہیں کرتی۔ پروڈکٹ کو سیشن کنفیگریشن یا محفوظ کردہ ایجنٹ میں منتخب کریں۔

یہ کنکشن جانچ ایک اِن لائن Bolt سیشن بناتی ہے، پہلے session.updated تک ایونٹس پرنٹ کرتی ہے، اور پھر بند ہو جاتی ہے۔ آڈیو اسٹریم کرنے کے لیے کم سے کم 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())

ان پٹ آڈیو شامل کرنے، ریسپانس آڈیو ڈیلٹاز، مداخلتوں، فنکشن کالز، غلطیوں، اور ساکٹ کو صاف طور پر بند کرنے کے لیے اپنی موجودہ ہینڈلنگ برقرار رکھیں۔ اِن لائن کسٹم فنکشنز آپ کے کلائنٹ میں چلتے ہیں؛ ان کے نتائج Realtime پروٹوکول کے ذریعے واپس کریں۔ محفوظ کردہ ایجنٹ کے ٹولز ThunderPhone پر چلتے ہیں۔

سیشن لائف سائیکل اور ناکامیاں

ایک WebSocket ایک کال کی نمائندگی کرتا ہے۔ غلط ایجنٹ ID یا مسترد شدہ اِن لائن کنفیگریشن ایک error ایونٹ پیدا کرتی ہے۔ سیشن کو فعال سمجھنے سے پہلے session.updated کا انتظار کریں۔ اصل ان پٹ اور آؤٹ پٹ فارمیٹس اور سیمپل ریٹس بیان کریں: PCM ریٹ میں عدم مطابقت ویلیڈیشن کی غلطی پیدا کرنے کے بجائے آڈیو کو بہت تیز یا بہت آہستہ چلاتی ہے۔

سیشن شروع ہونے کے بعد، جب آپ کی ایپلیکیشن مکمل ہو جائے تو ساکٹ کو صاف طور پر بند کریں۔ اِن لائن سیشنز کلائنٹ میں چلنے والے فنکشنز استعمال کر سکتے ہیں۔ محفوظ کردہ ایجنٹ سیشنز مطابقت رکھنے والے ThunderPhone پر چلنے والے ٹولز استعمال کرتے ہیں اور ٹرانسفر یا کی پیڈ ان پٹ فراہم نہیں کرتے۔

انضمام کی جانچ کریں

کم سے کم Python WAV کلائنٹ اور اس کی بیان کردہ ریٹ پر ایک مونو PCM16 WAV سے آغاز کریں۔ تصدیق کریں:

  1. سرور کنفیگریشن قبول کرتا ہے اور session.updated بھیجتا ہے۔
  2. ان پٹ متوقع رفتار پر ٹرانسکرپٹ اور ریسپانس آڈیو ایونٹس پیدا کرتا ہے۔
  3. مداخلت اور ریسپانس منسوخی باقی ماندہ آؤٹ پٹ آڈیو کو روک دیتی ہیں۔
  4. اِن لائن فنکشن کے نتائج یا محفوظ کردہ ایجنٹ ٹول کے نتائج ماڈل کو واپس جاتے ہیں۔
  5. غلط ان پٹ ایک error ایونٹ پیدا کرتا ہے جسے آپ کا کلائنٹ ہینڈل کرتا ہے۔
  6. آپ کا کلائنٹ ساکٹ بند کرتا ہے اور کال کال ہسٹری میں ظاہر ہوتی ہے۔

Realtime WebSocket حوالہ قبول شدہ ایونٹس، آڈیو فارمیٹس، سیشن فیلڈز، اور مکمل مثالوں کی فہرست فراہم کرتا ہے۔

لاگت

Realtime کالز منتخب کردہ پروڈکٹ کی معمول کی فی منٹ ریٹ استعمال کرتی ہیں۔ لائیو ٹرانسکرپٹ ڈیلٹاز فعال کرنے سے پورے سیشن کے لیے فی منٹ اضافی چارج شامل ہوتا ہے؛ ریٹ کے لیے لائیو ٹرانسکرپٹس اور پروڈکٹ ریٹس کے لیے قیمتیں دیکھیں۔

POST /v1/realtime/sessions ایک علیحدہ منظم LiveKit پاتھ ہے۔ یہ ایک روم اور محدود دائرۂ کار والا پارٹیسپنٹ ٹوکن بناتا ہے؛ براہ راست WebSocket کنکشن کے لیے اس کی ضرورت نہیں ہے۔

فریم ورک انضمامات کے لیے، Pipecat سے ThunderPhone استعمال کریں اور LiveKit Agents سے ThunderPhone استعمال کریں دیکھیں۔