تخطَّ إلى المحتوى
دليل

Gemini Live في مكالمة هاتفية حقيقية عبر Wixzel Voice API

أربعة طلبات HTTP تنقلك من حساب فارغ إلى هاتف يرن وعلى الخط نموذج Gemini Live من Google: اربط SIP trunk، وسجّل رقمًا، وأنشئ وكيلًا آنيًا، وأجرِ المكالمة. وطلب خامس يقرأ السجل، مع النص المكتوب وتكلفة المكالمة. مع إعداد مزوّد الاتصالات مسبقًا يستغرق ذلك نحو 10 دقائق. سعر محرك Gemini Live هو $0.0491 لكل دقيقة اتصال، وهو الأدنى في قائمة الأسعار، لذا تكلف مكالمة مدتها ثلاث دقائق نحو $0.15، تُحتسب بالثانية من رصيد مسبق الدفع، إضافةً إلى سعر مزوّد الاتصالات.

بقلم · نُشر في · حُدّث في

المدة
نحو 10 دقائق مع إعداد مزوّد الاتصالات مسبقًا
المحرك
gemini-live
وقت المحرك
$0.0491 لكل دقيقة متصلة

ما الذي تحتاجه قبل أن تبدأ؟

  • مفتاح API من Wixzel Voice مع رصيد. الحد الأدنى لشحن الرصيد هو $5.
  • SIP trunk لدى مزوّد الاتصالات ورقم عليه يسمح لك المزوّد بعرضه كرقم المتصل.
  • الأدوات curl وjq وuuidgen.

كيف تبني هذا على Wixzel Voice، خطوة بخطوة؟

  1. 01اربط SIP trunk

    اضبط مفتاحك وعنوان الـ API الأساسي مرة واحدة، ثم أنشئ الـ trunk. يحتفظ tee بالاستجابة كاملة، لأنك تحتاج منها قيمتين إلى جانب المعرّف:

    shell
    export WIXZEL_API_KEY="wv_live_..."
    API=https://api.voice.wixzel.com/v1
    
    TRUNK_ID=$(curl -s $API/sip-trunks \
      -H "Authorization: Bearer $WIXZEL_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "My carrier",
        "host": "sip.your-carrier.example",
        "username": "your-sip-username",
        "password": "your-sip-password"
      }' | tee trunk.json | jq -r .id)
    
    jq -r '.platform_ip, .origination_uri' trunk.json

    احذف username وpassword إذا كان مزوّد الاتصالات يصادق حسب IP. في الحالتين، أضف platform_ip إلى قائمة السماح لدى المزوّد حتى يقبل المكالمات من المنصة؛ أما origination_uri فهو المكان الذي يجب أن يرسل إليه المزوّد المكالمات الواردة، وهو ما لا يحتاجه هذا الدليل.

  2. 02سجّل الرقم الذي ستتصل منه

    استخدم رقمك الخاص، بصيغة E.164:

    shell
    NUMBER_ID=$(jq -n --arg trunk "$TRUNK_ID" \
      '{phone_number: "+14155550100", sip_trunk_id: $trunk}' |
      curl -s $API/phone-numbers \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -H "Content-Type: application/json" \
        -d @- | jq -r .id)
  3. 03أنشئ وكيل Gemini Live

    الصوت نموذج آني واحد بدلًا من ثلاث مراحل:

    shell
    AGENT_ID=$(jq -n --arg number "$NUMBER_ID" '{
        name: "Gemini Live",
        system_prompt: "You are a friendly assistant on a phone call. Keep answers to one or two sentences.",
        opening_message: "Hi, this is an automated assistant. Do you have a minute?",
        outbound_phone_number_id: $number,
        voice: { realtime: { model: "google/gemini-live", voice: "Charon" } }
      }' |
      curl -s $API/agents \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -H "Content-Type: application/json" \
        -d @- | jq -r .id)

    يسلّم voice.realtime الدور كاملًا، الاستماع والتفكير والكلام، إلى Gemini Live، لذا لا توجد كتلة stt أو llm أو tts؛ وترفض الـ API أي صوت يحدد الشكلين معًا. Charon أحد الأصوات الجاهزة في Gemini، ويعرض GET /v1/engines/gemini_live/voices جميعها مع أوصاف Google المكوّنة من كلمة واحدة.

    يعطي outbound_phone_number_id الوكيلَ رقم متصل، وهذا ما يتيح للطلب التالي حذف from_number_id.

  4. 04أجرِ المكالمة

    استبدل الرقم في to بالهاتف الذي تريد الاتصال به:

    shell
    CALL_ID=$(jq -n --arg agent "$AGENT_ID" '{to: "+14155551234", agent_id: $agent}' |
      curl -s $API/calls \
        -H "Authorization: Bearer $WIXZEL_API_KEY" \
        -H "Idempotency-Key: $(uuidgen)" \
        -H "Content-Type: application/json" \
        -d @- | jq -r .id)

    تجيب الـ API فورًا بـ 201 مع status: "queued"، ويرن الهاتف بعد لحظة. Idempotency-Key مطلوب هنا: انتهاء مهلة الشبكة لا يخبرك بشيء عن إجراء المكالمة من عدمه، وإعادة المحاولة بالمفتاح نفسه تعيد المكالمة الأصلية بدلًا من الاتصال مرتين، لذا احتفظ بالمفتاح إذا كتبت منطق إعادة المحاولة. المكالمة التي لا يمكن تمويل أول 15 ثانية منها تُرفض بـ 402 قبل أي اتصال.

  5. 05اقرأ ما حدث

    الطلب الخامس يقرأ المكالمة:

    shell
    curl -s $API/calls/$CALL_ID \
      -H "Authorization: Bearer $WIXZEL_API_KEY" | jq
    Example response, shortened
    {
      "id": "6a96a3ead6e886d42462dd3e",
      "object": "call",
      "session_id": "sip-5b0c7c0e-9d1f-4c52-8a9e-2f0d3a4b6c7d",
      "status": "completed",
      "direction": "outbound",
      "channel": "phone",
      "engine": "gemini_live",
      "to": "+14155551234",
      "duration_seconds": 94,
      "cost_micros": 76923,
      "failure_code": null,
      "failure_reason": null,
      "transcript": [
        { "role": "assistant", "content": "Hi, this is an automated assistant. Do you have a minute?" },
        { "role": "user", "content": "Sure, go ahead." }
      ]
    }

    تنتقل status من queued عبر ringing وin-progress إلى completed، أو تنتهي بـ failed أو busy أو no-answer. تُكتب cost_micros عند تسوية المكالمة (1,000,000 تساوي $1.00) وتبقى null في المكالمة التي لم تتصل أبدًا، لأن مثل هذه المكالمة لا تُحتسب. عند فشل المكالمة، تكون failure_code هي سبب Q.850 من مزوّد الاتصالات (17 مشغول، 19 لا رد، 21 رفضها المزوّد) وتوضح failure_reason ما يجب فعله. يفصّل GET /v1/usage/events?session_id=… كل رسم.

كم يكلّف هذا البناء على Wixzel Voice؟

وقت المحرك لمكالمات مدة كل منها 3 دقيقة على محرك gemini-live بسعر $0.0491 لكل دقيقة متصلة: نحو $0.15 للمكالمة. الاتصالات الهاتفية عبر trunk الخاص بك بسعر مزوّد الاتصالات، وهي غير مشمولة.

تكلفة المحرك الشهرية لما يبنيه هذا الدليل
المكالمات شهريًاالدقائق المتصلةتكلفة المحرك شهريًا
300900$44.19
1,5004,500$221
6,00018,000$884

رقم الدقيقة محسوب بمعدلات كلام نموذجية، شاملًا رسوم التنسيق. يُقاس Gemini Live برموز صوتية (audio tokens) أثناء المكالمة، لذا تكلف المكالمة الهادئة أقل من التقدير والمكالمة الكثيرة الكلام أكثر. يسعّر مثال الاستجابة أعلاه مكالمة مدتها 94 ثانية بسعر الدقيقة. يحاسبك مزوّد الاتصالات على الخط بشكل منفصل، دون أي هامش.

مسبق الدفع، دون اشتراك ودون خطة مجانية: أضِف رصيدًا بدءًا من $5 ويُستهلك مع الاستخدام. قدّر تكلفة استخدامك.

ما حدود Wixzel Voice التي تنطبق على هذا البناء؟

  • المكالمات الهاتفية تحتاج إلى SIP trunk خاص بك. لا يبيع Wixzel Voice الأرقام ولا ينقلها ولا يحتفظ بها. ويمكنه شراء رقم لك على حساب Twilio أو Telnyx أو Plivo أو Vobiz أو Vonage تربطه من لوحة التحكم، ويحاسبك عليه مزوّد الاتصالات.
  • مكالمة الاختبار من POST /v1/agents/{id}/test-call تنطق عبارتها الواحدة عبر مسار الصوت classic، لأن Gemini Live لا يملك وضع العبارة الواحدة. لسماع صوت Gemini نفسه، أجرِ مكالمة عادية.
  • يمكن أن تكون خمس مكالمات نشطة في وقت واحد لكل حساب افتراضيًا، ويُرفع الحد عند الطلب.
  • لا يُنشر رقم لزمن الاستجابة: يجيب المحرك الآني بالسرعة التي يجيب بها النموذج نفسه. تُطرح التغييرات في سلوك Wixzel Voice خلف ترويسة Wixzel-Version مؤرّخة.

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

هل يستطيع Gemini Live إجراء مكالمات هاتفية؟

Gemini Live نموذج، وليس خدمة هاتفية. يربط Wixzel Voice بين الاثنين: أنشئ وكيلًا صوته {"realtime": {"model": "google/gemini-live"}}، ثم يتصل POST /v1/calls برقم حقيقي عبر SIP trunk الخاص بك وعلى الخط Gemini Live.

هل أحتاج إلى مفتاح Google Cloud أو Gemini API؟

لا. على المنصة المستضافة، حسابات المزوّدين ملك لـ Wixzel Voice. مفتاح API واحد يبدأ بـ wv_live_ ورصيد مسبق الدفع يغطيان Gemini Live وكل المحركات الأخرى.

ما الأصوات التي يمكن لـ Gemini Live استخدامها في المكالمة؟

أصواته الجاهزة، مثل Charon وKore وPuck. يعرضها GET /v1/engines/gemini_live/voices جميعها. يُرفض صوت من قائمة محرك آخر عند إنشاء الوكيل.

كم تكلف مكالمة هاتفية عبر Gemini Live؟

$0.0491 لكل دقيقة اتصال بمعدلات كلام نموذجية، أي نحو $0.15 لثلاث دقائق، تُحتسب بالثانية من رصيد مسبق الدفع، إضافةً إلى سعر مزوّد الاتصالات. المكالمة التي لا تتصل أبدًا لا تكلف شيئًا.

هل يستطيع وكيل Gemini Live الإجابة على المكالمات الواردة أيضًا؟

نعم. اضبط inbound_agent_id لرقم الهاتف على الوكيل عبر PATCH /v1/phone-numbers/{id}، ووجّه مسار المكالمات الواردة لدى مزوّد الاتصالات إلى origination_uri الخاص بالـ trunk.

للمزيد من القراءة

  • البدء السريعالتوثيق

    الطلبات الأربعة نفسها، وأيضًا عبر حزمتي TypeScript وDart SDK.

  • محركات الصوتالتوثيق

    شكل الصوت الآني، والقوائم، واللغات.

  • SIP trunksالتوثيق

    قائمة السماح، وتوجيه المكالمات الواردة، ومعنى كل رمز فشل.

  • منع التكرار (Idempotency)التوثيق

    لماذا يحتاج POST /v1/calls إلى مفتاح وكيف تعمل إعادة الإرسال.

واجهات API للاتصالات الهاتفية القائمة على الوكلاء

عن Wixzel Voice

Wixzel Voice هو API للذكاء الاصطناعي الصوتي لبناء وكلاء ذكاء اصطناعي يجرون مكالمات هاتفية حقيقية ويردّون عليها عبر SIP trunk الخاص بك، أو يتحدثون إلى الناس في تطبيقات الويب والجوال الخاصة بك. مفتاح API واحد ورصيد مدفوع مسبقًا واحد يغطيان كل محركات الصوت، مع فوترة بالثانية حسب الاستخدام الفعلي.

أعطِ Claude خط هاتف حقيقيًا عبر خادم MCP من Wixzel Voice

Claude، في Claude Code أو claude.ai، يجري مكالمة حقيقية عبر SIP trunk الخاص بك ويقرأ لك النص المكتوب، مع طلب تأكيد قبل أي اتصال.

بناء موظف استقبال بالذكاء الاصطناعي على Twilio في Node.js مع Wixzel Voice

رقم Twilio الحالي لديك يجيب عليه موظف استقبال بالذكاء الاصطناعي يحجز المواعيد عبر الـ API، مبني بـ Node.js.

وكيل هاتفي بالهندية والمالايالامية على محرك sarvam من Wixzel Voice

وكيلان هاتفيان، أحدهما يتحدث الهندية والآخر المالايالامية، على نماذج Sarvam المخصصة للغات الهند، يجيبان على المكالمات أو يجريانها عبر SIP trunk الخاص بك.

أضف وكيلًا صوتيًا إلى Flutter عبر WebSocket مع Wixzel Voice

تطبيق Flutter يتحدث فيه المستخدمون إلى وكيلك الصوتي عبر WebSocket، مع بقاء مفتاح API على خادمك ودون أي رقم هاتف.

تشغيل حملة لتأهيل العملاء المحتملين بالذكاء الاصطناعي مع Wixzel Voice

قائمة عملاء محتملين اتصل بهم وكيلك عبر SIP trunk الخاص بك، على دفعات بحجم حد التزامن لديك، مع قراءة حالة كل مكالمة ونصها المكتوب.

أضف شخصية تعريفية ناطقة بالذكاء الاصطناعي إلى موقعك مع Wixzel Voice

شخصية تعريفية ناطقة في زاوية موقعك يتصل بها الزوار من المتصفح، مقيّدة بنطاقاتك وحدودك اليومية، مع قائمة بكل متصل.

اعرض الشخصية التعريفية لوكيلك في تطبيق Flutter مع Wixzel Voice

شاشة Flutter فيها الشخصية التعريفية لوكيلك تحرّك فمها مع صوت الوكيل أثناء مكالمة آنية، مع بقاء مفتاح API على خادمك.