Gemini Live في مكالمة هاتفية حقيقية عبر Wixzel Voice API
أربعة طلبات HTTP تنقلك من حساب فارغ إلى هاتف يرن وعلى الخط نموذج Gemini Live من Google: اربط SIP trunk، وسجّل رقمًا، وأنشئ وكيلًا آنيًا، وأجرِ المكالمة. وطلب خامس يقرأ السجل، مع النص المكتوب وتكلفة المكالمة. مع إعداد مزوّد الاتصالات مسبقًا يستغرق ذلك نحو 10 دقائق. سعر محرك Gemini Live هو $0.0491 لكل دقيقة اتصال، وهو الأدنى في قائمة الأسعار، لذا تكلف مكالمة مدتها ثلاث دقائق نحو $0.15، تُحتسب بالثانية من رصيد مسبق الدفع، إضافةً إلى سعر مزوّد الاتصالات.
بقلم Aqeel Shamsudheen · نُشر في · حُدّث في
- المدة
- نحو 10 دقائق مع إعداد مزوّد الاتصالات مسبقًا
- المحرك
- gemini-live
- وقت المحرك
- $0.0491 لكل دقيقة متصلة
ما الذي تحتاجه قبل أن تبدأ؟
- مفتاح API من Wixzel Voice مع رصيد. الحد الأدنى لشحن الرصيد هو $5.
- SIP trunk لدى مزوّد الاتصالات ورقم عليه يسمح لك المزوّد بعرضه كرقم المتصل.
- الأدوات curl وjq وuuidgen.
كيف تبني هذا على Wixzel Voice، خطوة بخطوة؟
01اربط SIP trunk
اضبط مفتاحك وعنوان الـ API الأساسي مرة واحدة، ثم أنشئ الـ trunk. يحتفظ
teeبالاستجابة كاملة، لأنك تحتاج منها قيمتين إلى جانب المعرّف:shellexport 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فهو المكان الذي يجب أن يرسل إليه المزوّد المكالمات الواردة، وهو ما لا يحتاجه هذا الدليل.02سجّل الرقم الذي ستتصل منه
استخدم رقمك الخاص، بصيغة E.164:
shellNUMBER_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)03أنشئ وكيل Gemini Live
الصوت نموذج آني واحد بدلًا من ثلاث مراحل:
shellAGENT_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.04أجرِ المكالمة
استبدل الرقم في
toبالهاتف الذي تريد الاتصال به:shellCALL_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قبل أي اتصال.05اقرأ ما حدث
الطلب الخامس يقرأ المكالمة:
shellcurl -s $API/calls/$CALL_ID \ -H "Authorization: Bearer $WIXZEL_API_KEY" | jqExample 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 الخاص بك بسعر مزوّد الاتصالات، وهي غير مشمولة.
| المكالمات شهريًا | الدقائق المتصلة | تكلفة المحرك شهريًا |
|---|---|---|
| 300 | 900 | $44.19 |
| 1,500 | 4,500 | $221 |
| 6,000 | 18,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 إجراء مكالمات هاتفية؟
{"realtime": {"model": "google/gemini-live"}}، ثم يتصل POST /v1/calls برقم حقيقي عبر SIP trunk الخاص بك وعلى الخط Gemini Live.هل أحتاج إلى مفتاح Google Cloud أو Gemini API؟
wv_live_ ورصيد مسبق الدفع يغطيان Gemini Live وكل المحركات الأخرى.ما الأصوات التي يمكن لـ Gemini Live استخدامها في المكالمة؟
Charon وKore وPuck. يعرضها GET /v1/engines/gemini_live/voices جميعها. يُرفض صوت من قائمة محرك آخر عند إنشاء الوكيل.كم تكلف مكالمة هاتفية عبر Gemini Live؟
هل يستطيع وكيل Gemini Live الإجابة على المكالمات الواردة أيضًا؟
inbound_agent_id لرقم الهاتف على الوكيل عبر PATCH /v1/phone-numbers/{id}، ووجّه مسار المكالمات الواردة لدى مزوّد الاتصالات إلى origination_uri الخاص بالـ trunk.للمزيد من القراءة
- البدء السريعالتوثيق
الطلبات الأربعة نفسها، وأيضًا عبر حزمتي TypeScript وDart SDK.
- محركات الصوتالتوثيق
شكل الصوت الآني، والقوائم، واللغات.
- SIP trunksالتوثيق
قائمة السماح، وتوجيه المكالمات الواردة، ومعنى كل رمز فشل.
- منع التكرار (Idempotency)التوثيق
لماذا يحتاج POST /v1/calls إلى مفتاح وكيف تعمل إعادة الإرسال.
عن Wixzel Voice
Wixzel Voice هو API للذكاء الاصطناعي الصوتي لبناء وكلاء ذكاء اصطناعي يجرون مكالمات هاتفية حقيقية ويردّون عليها عبر SIP trunk الخاص بك، أو يتحدثون إلى الناس في تطبيقات الويب والجوال الخاصة بك. مفتاح API واحد ورصيد مدفوع مسبقًا واحد يغطيان كل محركات الصوت، مع فوترة بالثانية حسب الاستخدام الفعلي.
المزيد من الأدلة
Claude، في Claude Code أو claude.ai، يجري مكالمة حقيقية عبر SIP trunk الخاص بك ويقرأ لك النص المكتوب، مع طلب تأكيد قبل أي اتصال.
رقم Twilio الحالي لديك يجيب عليه موظف استقبال بالذكاء الاصطناعي يحجز المواعيد عبر الـ API، مبني بـ Node.js.
وكيلان هاتفيان، أحدهما يتحدث الهندية والآخر المالايالامية، على نماذج Sarvam المخصصة للغات الهند، يجيبان على المكالمات أو يجريانها عبر SIP trunk الخاص بك.
تطبيق Flutter يتحدث فيه المستخدمون إلى وكيلك الصوتي عبر WebSocket، مع بقاء مفتاح API على خادمك ودون أي رقم هاتف.
قائمة عملاء محتملين اتصل بهم وكيلك عبر SIP trunk الخاص بك، على دفعات بحجم حد التزامن لديك، مع قراءة حالة كل مكالمة ونصها المكتوب.
شخصية تعريفية ناطقة في زاوية موقعك يتصل بها الزوار من المتصفح، مقيّدة بنطاقاتك وحدودك اليومية، مع قائمة بكل متصل.
شاشة Flutter فيها الشخصية التعريفية لوكيلك تحرّك فمها مع صوت الوكيل أثناء مكالمة آنية، مع بقاء مفتاح API على خادمك.
ابنِ أول وكيل صوتي لك

