كيف تستخدم GPT-Realtime-2.1-mini API

كيفية استخدام واجهة برمجة تطبيقات (API) gpt-realtime-2.1-mini: معرف النموذج الصحيح، اتصالات WebSocket و WebRTC، إعدادات الجلسة، الأصوات، التسعير، واختبار نقاط النهاية في Apidog.

Ashley Innocent

Ashley Innocent

8 يوليو 2026

كيف تستخدم GPT-Realtime-2.1-mini API

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

وكلاء الصوت كانوا يحتاجون إلى ثلاثة أجزاء متحركة: تحويل الكلام إلى نص، نموذج لغوي، ثم تحويل النص إلى كلام. كل خطوة كانت تضيف زمن استجابة وتفقد النبرة. واجهة برمجة تطبيقات OpenAI في الوقت الفعلي (Realtime API) تدمج كل ذلك في نموذج واحد من الكلام إلى كلام، وgpt-realtime-2.1-mini هو الطبقة الأرخص والأسرع من هذه الفئة. يستمع إلى الصوت ويفكر ويتحدث مرة أخرى عبر اتصال تدفق واحد.

يوضح لك هذا الدليل كيفية استدعائه من البداية إلى النهاية: أي معرف نموذج تستخدم، وكيفية الاتصال عبر WebSocket و WebRTC، وكيفية تشكيل جلسة، وكيفية اختبار كل ذلك باستخدام Apidog قبل ربطه بتطبيق. كل ما هنا يتوافق مع دليل OpenAI Realtime الرسمي.

أولاً، اختر اسم النموذج الصحيح

تسبب التسمية ارتباكًا للناس، لذا دعنا نوضحها قبل أي شيفرة. هناك معرفان لنفس النموذج المصغر (mini model):

تتيح لك اللقطات (Snapshots) تثبيت السلوك في بيئة الإنتاج:

المعرف (Identifier) ما يشير إليه (What it points to)
gpt-realtime-mini أحدث لقطة مصغرة (mini snapshot) (تحديث تلقائي)
gpt-realtime-2.1-mini الجيل المصغر 2.1 (The 2.1-generation mini)
gpt-realtime-mini-2025-12-15 لقطة مثبتة (Pinned snapshot) (الحالية)
gpt-realtime-mini-2025-10-06 لقطة مثبتة (Pinned snapshot) (السابقة)

استخدم الاسم المستعار (alias) أثناء البناء، ثم ثبّت لقطة مؤرخة (dated snapshot) قبل النشر حتى لا يؤدي تحديث النموذج أبدًا إلى تغيير سلوك وكيلك بين عشية وضحاها.

ما يفعله gpt-realtime-2.1-mini

إنه نموذج تحويل الكلام إلى كلام. تقوم ببث الصوت إليه، وهو يبث الصوت مرة أخرى بنبرة طبيعية، دون خطوة منفصلة للنسخ أو تحويل النص إلى كلام. كما يتعامل مع النص، لذا يمكنك مزج الإدخال المكتوب والإخراج المنطوق في نفس الجلسة.

إليك ورقة المواصفات من صفحة النموذج:

الخاصية (Property) القيمة (Value)
وسائط الإدخال (Input modalities) نص، صورة، صوت (Text, image, audio)
وسائط الإخراج (Output modalities) نص، صوت (Text, audio)
نافذة السياق (Context window) 32,000 رمز (tokens)
الحد الأقصى للإخراج (Max output) 4,096 رمز (tokens)
الاتصالات (Connections) WebRTC, WebSocket, SIP
الأصوات (Voices) alloy, ash, ballad, coral, echo, sage, shimmer, verse, marin, cedar

marin وcedar هما أحدث الأصوات وحصريان لواجهة برمجة تطبيقات Realtime؛ توصي OpenAI بهما للحصول على الإخراج الأكثر طبيعية. الأصوات الأقدم لا تزال تعمل إذا كنت تريد نبرة صوت محددة.

تفاضل طبقة "mini" عمقًا قليلًا في الاستدلال مقابل زمن استجابة أقل وفاتورة أقل بكثير. بالنسبة لمعظم روبوتات الدعم، وسير عمل طلبات الشراء، والواجهات الأمامية الصوتية، فإنه الخيار الافتراضي الصحيح. استخدم النموذج الكامل gpt-realtime-2.1 فقط عندما تتطلب المحادثة استدلالًا أعمق.

ما تكلفته

النموذج المصغر (Mini) يمثل تقريبًا ثلث سعر النموذج الكامل. أسعار الرموز (tokens) من صفحة التسعير:

النموذج (Model) إدخال نص (Text input) إدخال مخبأ (Cached input) إدخال صوت (Audio input) إخراج صوت (Audio output)
gpt-realtime-2.1-mini $0.60 / 1 مليون $0.30 / 1 مليون $10 / 1 مليون $20 / 1 مليون
gpt-realtime-2.1 (كامل) $4.00 / 1 مليون $0.40 / 1 مليون $32 / 1 مليون $64 / 1 مليون

الصوت يهيمن على الفاتورة، وأكبر عامل مؤثر في التكلفة هو مدى حديث وكيلك. يكلف الوكيل الذي يتحدث 35 ثانية في الدقيقة تقريبًا ضعف الوكيل الذي يتحدث 15 ثانية في الدقيقة. تتراوح التكاليف الفعلية للدقيقة للنموذج المصغر (mini) حوالي 0.06 دولار إلى 0.15 دولار اعتمادًا على الإسهاب، لذا اطلب من نموذجك أن يكون موجزًا في التعليمات وستقلل الفاتورة مباشرة. تتغير الأسعار، لذا تأكد من صفحة التسعير الحية قبل التنبؤ.

المتطلبات الأساسية

  1. مفتاح OpenAI API مع إذن الوصول في الوقت الفعلي (Realtime)، يتم تعيينه كـ OPENAI_API_KEY.
  2. Node.js 18+ لأمثلة الخادم (حزمة ws لـ WebSocket الخام، أو حزمة openai SDK الرسمية).
  3. بالنسبة للصوت في المتصفح، صفحة تُقدم عبر HTTPS أو localhost لكي يعمل getUserMedia.

قاعدة واحدة قبل أن تبدأ العمل في المتصفح: لا ترسل أبدًا مفتاح API الحقيقي الخاص بك إلى العميل. تستخدم تطبيقات المتصفح والجوال رموزًا مؤقتة قصيرة الأجل بدلاً من ذلك. المزيد عن ذلك أدناه.

اختر طريقة الاتصال

النموذج المصغر (mini model) يدعم ثلاث وسائل نقل. اختر حسب مكان وجود صوتك.

وسيلة النقل (Transport) متى تستخدمها (Use it when) المصادقة (Auth)
WebRTC عندما يتم التقاط الصوت أو تشغيله في متصفح أو تطبيق جوال مفتاح سري مؤقت للعميل (Ephemeral client secret)
WebSocket عندما يتعامل خادمك بالفعل مع الصوت الخام من مسار وسائط (media pipeline) مفتاح API (من جانب الخادم) (API key (server-side))
SIP عندما تقوم بتوصيل هاتف أو نظام اتصالات مفتاح API

يبدأ معظم الناس باستخدام WebSocket لعمل نماذج أولية من جانب الخادم، ثم ينتقلون إلى WebRTC للعميل الحقيقي. دعنا نفعل الاثنين.

بدء سريع 1: WebSocket من خادمك

WebSocket هو أسرع طريقة لرؤية النموذج يستجيب. نقطة النهاية (endpoint) هي عنوان URL واحد مع النموذج في سلسلة الاستعلام (query string):

wss://api.openai.com/v1/realtime?model=gpt-realtime-2.1-mini

نظرًا لأن هذه هي واجهة GA، فإنك تصادق باستخدام ترويسة Authorization: Bearer عادية ولم تعد بحاجة إلى ترويسة OpenAI-Beta القديمة. إليك مثال "hello world" (إدخال نص، إخراج نص) حتى تتمكن من الاختبار بدون ميكروفون:

import WebSocket from "ws";

const url = "wss://api.openai.com/v1/realtime?model=gpt-realtime-2.1-mini";
const ws = new WebSocket(url, {
  headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}` },
});

ws.on("open", () => {
  // 1. تهيئة الجلسة (Configure the session)
  ws.send(JSON.stringify({
    type: "session.update",
    session: {
      type: "realtime",
      model: "gpt-realtime-2.1-mini",
      output_modalities: ["text"],
      instructions: "You are a concise API support agent. Keep answers short.",
    },
  }));

  // 2. إضافة رسالة مستخدم (Add a user message)
  ws.send(JSON.stringify({
    type: "conversation.item.create",
    item: {
      type: "message",
      role: "user",
      content: [{ type: "input_text", text: "What is an idempotent request?" }],
    },
  }));

  // 3. طلب استجابة (Ask for a response)
  ws.send(JSON.stringify({ type: "response.create" }));
});

ws.on("message", (raw) => {
  const event = JSON.parse(raw.toString());
  if (event.type === "response.output_text.delta") process.stdout.write(event.delta);
  if (event.type === "response.done") ws.close();
});

التدفق دائمًا هو نفسه: تهيئة، إضافة مدخلات، طلب استجابة، الاستماع إلى التغييرات (deltas). أحداث الخادم تُبث مرة أخرى كـ JSON. أهم الأحداث التي تهتم بها:

للانتقال من النص إلى الصوت، قم بتبديل output_modalities إلى ["audio"] وأضف تهيئة صوتية (القسم التالي). يصل الصوت في أحداث response.output_audio.delta ككتل PCM مشفرة بـ base64 تقوم بفك تشفيرها وتشغيلها.

بدء سريع 2: WebRTC في المتصفح

بالنسبة لتطبيق صوتي حقيقي، يلتقط المتصفح الميكروفون ويشغل الرد مباشرة، مما يحافظ على زمن استجابة منخفض. المشكلة تكمن في المصادقة: لا يمكنك كشف مفتاح API الخاص بك، لذا يقوم خادمك بإنشاء رمز مؤقت قصير الأجل أولاً.

الخطوة 1: إنشاء رمز مؤقت على خادمك. استدعِ نقطة نهاية client-secrets بمفتاحك الحقيقي:

// جانب الخادم (server side)
const r = await fetch("https://api.openai.com/v1/realtime/client_secrets", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    session: { type: "realtime", model: "gpt-realtime-2.1-mini" },
  }),
});
const { value } = await r.json(); // مفتاح مؤقت (ephemeral key)، يبدأ بـ "ek_"

أرسل value إلى المتصفح. تنتهي صلاحيته بسرعة، لذا فإن التسريب منخفض المخاطر.

الخطوة 2: الاتصال من المتصفح باستخدام WebRTC. تقوم بالتقاط الصوت من الميكروفون، وفتح قناة بيانات للأحداث، وتبادل SDP مع نقطة النهاية /v1/realtime/calls:

// جانب المتصفح (browser side): جاء `EPHEMERAL_KEY` من خادمك
const pc = new RTCPeerConnection();

// تشغيل صوت النموذج (play the model's audio)
pc.ontrack = (e) => (document.getElementById("audio").srcObject = e.streams[0]);

// إرسال الميكروفون (send the mic)
const mic = await navigator.mediaDevices.getUserMedia({ audio: true });
pc.addTrack(mic.getTracks()[0]);

// تدفق الأحداث عبر قناة بيانات (events flow over a data channel)
const channel = pc.createDataChannel("oai-events");
channel.onmessage = (e) => console.log(JSON.parse(e.data));

// مصافحة SDP (SDP handshake)
const offer = await pc.createOffer();
await pc.setLocalDescription(offer);

const sdpResp = await fetch(
  "https://api.openai.com/v1/realtime/calls?model=gpt-realtime-2.1-mini",
  {
    method: "POST",
    body: offer.sdp,
    headers: {
      Authorization: `Bearer ${EPHEMERAL_KEY}`,
      "Content-Type": "application/sdp",
    },
  }
);
await pc.setRemoteDescription({ type: "answer", sdp: await sdpResp.text() });

بمجرد أن يصبح الاتصال مباشرًا، يستمع النموذج إلى مسار الميكروفون ويتحدث عبر pc.ontrack. يمكنك إرسال التهيئة والنص عبر نفس قناة بيانات oai-events باستخدام أحداث JSON الدقيقة من مثال WebSocket.

تشكيل الجلسة

كائن session هو المكان الذي تتحكم فيه في السلوك. هذه هي النسخة الصوتية الكاملة مما رأيته أعلاه:

{
  type: "session.update",
  session: {
    type: "realtime",
    model: "gpt-realtime-2.1-mini",
    output_modalities: ["audio"],
    instructions: "You are a friendly booking assistant. Confirm details before acting.",
    audio: {
      input: {
        format: { type: "audio/pcm", rate: 24000 },
        turn_detection: { type: "semantic_vad" },
      },
      output: {
        format: { type: "audio/pcm", rate: 24000 },
        voice: "marin",
      },
    },
  },
}

الحقول المهمة:

غيّر أي حقل في منتصف المكالمة عن طريق إرسال session.update آخر. لا يلزم إعادة الاتصال.

إضافة أدوات ليتمكن الوكيل من التصرف

الوكيل الصوتي الذي يمكنه فقط الدردشة هو مجرد عرض توضيحي. لحجز طاولة أو التحقق من طلب، يحتاج النموذج إلى أدوات. يستخدم Realtime نفس عقد استدعاء الدالة مثل بقية المنصة: تقوم بتعريف الدوال في الجلسة، يقوم النموذج بإصدار استدعاء، تقوم بتشغيله، ثم تُعيد النتيجة. إذا كنت قد ربطت أدوات بواجهة برمجة تطبيقات الدردشة من قبل، فهذا هو نفس النموذج العقلي؛ تغطيتنا لـ استدعاء دوال OpenAI تشرح المخطط بعمق، والمخرجات المنظمة تساعد عندما تحتاج إلى مطابقة الوسائط مع شكل صارم.

صرح بالأدوات داخل الجلسة، ثم تعامل مع حدث response.function_call_arguments.done، قم بتشغيل التعليمات البرمجية الخاصة بك، وانشر conversation.item.create بالنتيجة قبل response.create التالي. لأي شيء أكثر تعقيدًا من بضع دوال، يوفر لك AgentKit من OpenAI طريقة أعلى مستوى لتنسيق وكلاء الصوت متعددي الخطوات.

اختبر نقاط النهاية باستخدام Apidog قبل البناء

لا ترغب في تصحيح أخطاء استدعاء REST ومصافحة WebSocket بقراءة سجلات الكونسول في تطبيق نصف مبني. اختبر الأجزاء بشكل منفصل أولاً. هذا هو المكان الذي يكتسب فيه Apidog مكانته في سير عمل الوقت الفعلي (realtime).

هناك شيئان يستحقان التحقق قبل كتابة أي شيفرة للعميل:

  1. نقطة نهاية الرمز (token endpoint). POST https://api.openai.com/v1/realtime/client_secrets هي استدعاء REST عادي. أنشئ طلبًا في Apidog، أضف ترويسة Authorization: Bearer الخاصة بك، ضع نص JSON مع معرف النموذج الخاص بك، وأرسله. سترى رمز ek_ وتاريخ انتهائه فورًا، لذا ستعرف أن مفتاحك والوصول إلى حسابك جيدان حتى قبل دخول WebRTC في الصورة. إنه نفس النهج الذي ستستخدمه لاختبار أي من واجهات REST الخاصة بـ OpenAI، مثل واجهة برمجة تطبيقات الاستجابات (Responses API).
  2. تدفق رسائل WebSocket. يحتوي Apidog على عميل WebSocket، لذا يمكنك فتح اتصال بـ wss://api.openai.com/v1/realtime?model=gpt-realtime-2.1-mini، إضافة ترويسة المصادقة، وإرسال رسائل session.update، وconversation.item.create، وresponse.create يدويًا واحدة تلو الأخرى. مشاهدة أحداث الخادم وهي تعود في لوحة قابلة للقراءة يجعل تسلسل الأحداث واضحًا، ويمكنك حفظ الرسائل كأمثلة لفريقك. إذا كنت تعتمد بالفعل على استراتيجيات قوية لاختبار API، فهذا يتناسب تمامًا.

اختبار طبقة النقل بمفردها يعني أنه عندما يتعطل شيء ما في التطبيق، فإنك تعلم بالفعل أنه ليس عقد API. قم بتنزيل Apidog إذا كنت ترغب في المتابعة.

تحكم في الفاتورة

إخراج الصوت هو الجزء المكلف، لذا فإن بعض العادات تؤتي ثمارها:

الأخطاء الشائعة والإصلاحات

الأسئلة الشائعة

إلى أين نذهب بعد ذلك

لديك الآن الحلقة الكاملة: معرف النموذج الصحيح، نموذج WebSocket الأولي، عميل متصفح WebRTC، تهيئة الجلسة، الأدوات، وطريقة لاختبار كل جزء في Apidog قبل أن يصل إلى الإنتاج. ابدأ بمثال WebSocket للنص فقط لتأكيد الوصول، قم بتبديل output_modalities إلى الصوت، ثم انتقل إلى WebRTC عندما تكون جاهزًا لميكروفون حقيقي. ثبت لقطة (snapshot)، اطلب من النموذج أن يكون موجزًا، وسيكون لديك وكيل صوتي بزمن استجابة منخفض لن يفاجئك في الفاتورة.

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات