API المكالمات الهاتفية بالذكاء الاصطناعي: أجرِ مكالمات حقيقية ورُدّ عليها بوكيل ذكاء اصطناعي
Wixzel Voice هو API للذكاء الاصطناعي الصوتي لبناء وكلاء ذكاء اصطناعي يجرون مكالمات هاتفية حقيقية ويردّون عليها عبر SIP trunk الخاص بك، أو يتحدثون إلى الناس في تطبيقات الويب والجوال الخاصة بك. مفتاح API واحد ورصيد مدفوع مسبقًا واحد يغطيان كل محركات الصوت، مع فوترة بالثانية حسب الاستخدام الفعلي.
آخر تحديث
ما API المكالمات الهاتفية بالذكاء الاصطناعي من Wixzel Voice؟
مع API من Wixzel Voice، يجري وكيل ذكاء اصطناعي تحدده أنت مكالمات هاتفية حقيقية ويرد عليها عبر SIP trunk الخاص بك: طلب POST /v1/calls برقم ومعرّف وكيل، ويُحتسب بالثانية من الاستخدام الفعلي.
باختصار، Wixzel Voice هو API الذكاء الاصطناعي الصوتي لبناء وكلاء هاتف بالذكاء الاصطناعي: API للمكالمات بالذكاء الاصطناعي تحدد فيه أنت الوكيل ويشغّل Wixzel Voice المكالمة. في المكالمات الصادرة، يتصل POST /v1/calls برقم ويوصل وكيلك. وفي المكالمات الواردة، يرد رقم الهاتف الذي له inbound_agent_id على كل مكالمة إليه. ويمكن للوكيل نفسه أيضًا أن يتحدث إلى الناس في صفحة ويب أو تطبيق عبر API الفوري، دون خط هاتف، أو أن يقوده مساعد ذكاء اصطناعي عبر خادم MCP.
في Wixzel Voice: مفتاح API واحد، ورصيد واحد، وكل محركات الصوت. حسابات مزوّدي الكلام واللغة والصوت تابعة للمنصة، فلا مفاتيح Deepgram أو ElevenLabs أو OpenRouter تحتاج إلى إحضارها. خط الهاتف هو الشيء الوحيد الذي تحضره: أحضِر SIP trunk الخاص بك، من Twilio أو Telnyx أو Plivo أو أي مزوّد SIP.
كيف تجري مكالمة هاتفية بالذكاء الاصطناعي باستخدام Wixzel Voice؟
أربعة طلبات، بعد أن يكون لديك مفتاح API وبعض الرصيد. كل استجابة تحمل المعرّف الذي يحتاجه الطلب التالي، والمقتطفات تقرؤه من متغيرات shell.
- 01
اربط SIP trunk الخاص بك
مضيف مزوّد الاتصالات وبيانات الاعتماد. كلمة المرور مشفّرة في حالة التخزين ولا تُعاد مرة أخرى أبدًا. تحمل الاستجابة
platform_ip(حاليًا187.126.120.231)، الذي يجب أن يضيفه مزوّد الاتصالات إلى قائمة السماح، وorigination_uri(حاليًاsip:187.126.120.231:5090)، وهو المكان الذي يرسل إليه مزوّد الاتصالات المكالمات الواردة.cURLcurl https://api.voice.wixzel.com/v1/sip-trunks \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "My carrier", "host": "sip.carrier.example", "username": "acct123", "password": "..." }' - 02
سجّل رقم هاتف عليه
رقم تملكه بالفعل لدى مزوّد الاتصالات ذاك، بصيغة E.164. لا يبيع Wixzel Voice الأرقام ولا ينقلها. إذا كان الـ trunk مرتبطًا بحسابك في Twilio أو Telnyx أو Plivo أو Vobiz أو Vonage، فيمكنك بدلًا من ذلك شراء رقم جديد على ذلك الحساب باستخدام
POST /v1/phone-numbers/purchase. ويحاسبك مزوّد الاتصالات عليه بسعره.cURLcurl https://api.voice.wixzel.com/v1/phone-numbers \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "phone_number": "+14155550100", "sip_trunk_id": "'"$TRUNK_ID"'" }' - 03
أنشئ وكيلًا
تعليمات قصيرة بأسلوب الكلام المنطوق، وأول ما يقوله، وصوت: ثلاثة نماذج، أو نموذج فوري واحد. الحقل
opening_messageمطلوب، لأن الوكيل الذي ليس له رسالة افتتاحية يرد بالصمت. ويجعلoutbound_phone_number_idالرقمَ من الخطوة 2 معرّف المتصل الخاص به.cURLcurl https://api.voice.wixzel.com/v1/agents \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Support", "system_prompt": "You are a concise support agent.", "opening_message": "Hi, how can I help?", "voice": { "stt": { "model": "deepgram/nova-3" }, "llm": { "model": "openrouter/gpt-4o-mini" }, "tts": { "model": "elevenlabs/eleven_flash_v2_5" } }, "outbound_phone_number_id": "'"$NUMBER_ID"'" }' - 04
أجرِ المكالمة
وجهة ووكيل. الترويسة
Idempotency-Keyمطلوبة، لأن انتهاء مهلة الشبكة لا يخبرك بشيء عمّا إذا كانت المكالمة قد أُجريت: إعادة المحاولة بالمفتاح نفسه تعيد المكالمة الأصلية بدل الاتصال مرتين. الاستجابة201مع المكالمة، وstatus: "queued".cURLcurl https://api.voice.wixzel.com/v1/calls \ -H "Authorization: Bearer $WIXZEL_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{ "to": "+14155551234", "agent_id": "'"$AGENT_ID"'" }'
قبل أن تتصل المكالمة الأولى، يجب أن يضيف مزوّد الاتصالات platform_ip إلى قائمة السماح. تبيّن أدلة مزوّدي الاتصالات مكان هذا الإعداد لدى Twilio, Telnyx, Plivo, Vonage, Bandwidth, Exotel, Vobiz, Mobily.
كيف تجري مكالمة هاتفية بالذكاء الاصطناعي من TypeScript أو Dart؟
حزم SDK الرسمية هي wixzel-voice على npm، لـ TypeScript وJavaScript على Node والمتصفحات وبيئات edge، وwixzel_voice على pub.dev، لـ Dart وFlutter. كلتاهما تغطي كل نقطة نهاية، وتعيد المحاولة عند تجاوز حد المعدل، وتولّد Idempotency-Key على المسارات التي تنفق المال. أما اللغات الأخرى فتستخدم HTTP API المباشر ووثيقة OpenAPI.
import { WixzelVoice } from 'wixzel-voice';
const client = new WixzelVoice({ apiKey: process.env.WIXZEL_API_KEY! });
// 1. Connect your SIP trunk.
const trunk = await client.sipTrunks.create({
name: 'My carrier',
host: 'sip.carrier.example',
username: 'acct123',
password: process.env.CARRIER_PASSWORD!,
});
console.log('Allowlist', trunk.platform_ip, 'and send inbound calls to', trunk.origination_uri);
// 2. Register a number you own on it.
const number = await client.phoneNumbers.create({
phone_number: '+14155550100',
sip_trunk_id: trunk.id,
});
// 3. Create the agent, with that number as its caller ID.
const agent = await client.agents.create({
name: 'Support',
system_prompt: 'You are a concise support agent.',
opening_message: 'Hi, how can I help?',
voice: {
stt: { model: 'deepgram/nova-3' },
llm: { model: 'openrouter/gpt-4o-mini' },
tts: { model: 'elevenlabs/eleven_flash_v2_5' },
},
outbound_phone_number_id: number.id,
});
// 4. Place the call. The SDK sends the Idempotency-Key for you.
const call = await client.calls.create({ to: '+14155551234', agent_id: agent.id });
// Inbound: calls to the number are answered by the same agent.
await client.phoneNumbers.update(number.id, { inbound_agent_id: agent.id });
// Later: what happened, what it cost, what was said.
const detail = await client.calls.retrieve(call.id);
console.log(detail.status, detail.cost_micros, detail.failure_code, detail.failure_reason);
for (const line of detail.transcript) console.log(line.role, line.content);import 'dart:io';
import 'package:wixzel_voice/wixzel_voice.dart';
Future<void> main() async {
final client = WixzelVoice(apiKey: Platform.environment['WIXZEL_API_KEY']!);
// 1. Connect your SIP trunk.
final trunk = await client.sipTrunks.create(CreateSipTrunk(
name: 'My carrier',
host: 'sip.carrier.example',
username: 'acct123',
password: Platform.environment['CARRIER_PASSWORD']!,
));
print('Allowlist ${trunk.platformIp}; send inbound calls to ${trunk.originationUri}');
// 2. Register a number you own on it.
final number = await client.phoneNumbers.create(CreatePhoneNumber(
phoneNumber: '+14155550100',
sipTrunkId: trunk.id,
));
// 3. Create the agent, with that number as its caller ID.
final agent = await client.agents.create(CreateAgent(
name: 'Support',
systemPrompt: 'You are a concise support agent.',
openingMessage: 'Hi, how can I help?',
voice: VoiceConfig.composed(
stt: const SttConfig(model: 'deepgram/nova-3'),
llm: const LlmConfig(model: 'openrouter/gpt-4o-mini'),
tts: const TtsConfig(model: 'elevenlabs/eleven_flash_v2_5'),
),
outboundPhoneNumberId: number.id,
));
// 4. Place the call. The SDK sends the Idempotency-Key for you.
final call = await client.calls.create(CreateCall(
to: '+14155551234',
agentId: agent.id,
));
// Inbound: calls to the number are answered by the same agent.
await client.phoneNumbers.update(
number.id, UpdatePhoneNumber(inboundAgentId: agent.id));
// Later: what happened, what it cost, what was said.
final detail = await client.calls.retrieve(call.id);
print('${detail.status} ${detail.costMicros} ${detail.failureCode}');
for (final line in detail.transcript) {
print('${line.role}: ${line.content}');
}
client.close();
}كيف يرد وكيل الذكاء الاصطناعي على المكالمات الواردة في Wixzel Voice؟
أعطِ رقم الهاتف inbound_agent_id، فيرد ذلك الوكيل على كل مكالمة إليه. وبدونه تُرفض المكالمات الواردة إلى الرقم.
curl -X PATCH https://api.voice.wixzel.com/v1/phone-numbers/$NUMBER_ID \
-H "Authorization: Bearer $WIXZEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "inbound_agent_id": "'"$AGENT_ID"'" }'النصف الآخر لدى مزوّد الاتصالات: يجب توصيل المكالمات الواردة إلى origination_uri الخاص بالـ trunk (حاليًا sip:187.126.120.231:5090). هذا إعداد منفصل في جزء مختلف من لوحة تحكم مزوّد الاتصالات عن قائمة السماح، وإذا كان مفقودًا فلن يرن الرقم ببساطة: لا يجد مزوّد الاتصالات مكانًا يرسل إليه المكالمة، فلا يظهر شيء في أي سجل. كل مكالمة واردة تُسجَّل مع direction: "inbound" والرقمين كليهما، وتطلق webhook باسم inboundCall.
ماذا يعيد سجل المكالمة في Wixzel Voice؟
يرد POST /v1/calls فورًا بالمكالمة، وstatus: "queued". ويعيد GET /v1/calls/{id} السجل الكامل أثناء المكالمة وبعد انتهائها، ويخبر webhook باسم callCompleted، موقّع بـ X-Wixzel-Signature، خادمك بانتهائها، فلا تحتاج إلى الاستعلام المتكرر.
| الحقل | ما يحتويه |
|---|---|
| status | queued أو ringing أو in-progress أو completed أو failed أو busy أو no-answer أو canceled. |
| direction / channel | outbound أو inbound؛ وphone لمكالمة عبر الـ trunk الخاص بك، وweb لجلسة فورية من متصفح أو تطبيق. |
| duration_seconds | مدة المكالمة، بعد انتهائها. |
| engine | محرك الصوت الذي عمل عليه الوكيل. |
| cost_micros | تكلفة المكالمة بوحدة micro-USD (1,000,000 = $1.00)، وتُكتب عند تسوية المكالمة. وتكون null للمكالمة التي لم تتصل أبدًا، وهي لا تكلّف شيئًا. |
| transcript | كل دور في المحادثة، مع role (user أو assistant أو system) وcontent وطابع زمني بتوقيت UTC. ومتاح أيضًا عبر GET /v1/calls/{id}/transcript. |
| summary / recording_url | التسجيل، إن كانت المكالمة مسجّلة. الحقل summary فارغ للمكالمات التي تُجرى عبر API؛ اقرأ النص المكتوب. |
| failure_code / failure_reason | للمكالمة التي لم تتصل: سبب Q.850 من مزوّد الاتصالات، وهو القيمة الثابتة التي تبني عليها منطقك، وما يجب فعله حياله بلغة واضحة. |
| transfers | مدخل لكل محاولة لتحويل المتصل إلى شخص، مع حالتها ومدة الرنين وسبب SIP. |
| metadata | خريطة النصوص المسطحة التي أرفقتها بـ POST /v1/calls، تُعاد كما هي. ولا تُرسل إلى النموذج أبدًا. |
كل جزء من المليون من الدولار في cost_micros يفسّره سطر استهلاك في GET /v1/usage/events: ثواني الكلام المُتعرَّف عليه، والرموز الداخلة إلى النموذج والخارجة منه، والحروف المُركّبة صوتيًا، ورسوم التنسيق لكل دقيقة.
ماذا يحدث عندما لا تتصل مكالمة هاتفية بالذكاء الاصطناعي؟
المكالمة التي رفضها مزوّد الاتصالات تكون status: "failed" (أو busy أو no-answer)، ولها failure_code وfailure_reason، وcost_micros: null: لم تكلّف شيئًا، وأُفرج عن الرصيد المحجوز لها. الحقل failure_code هو سبب Q.850 من مزوّد الاتصالات، وهو القيمة الثابتة التي تبني عليها منطقك؛ ويشرح failure_reason ما يجب فعله بلغة واضحة.
بعض الطلبات تُرفض قبل الاتصال بأي رقم، ولا تكلّف شيئًا: الرصيد الذي لا يكفي لأول 15 ثانية يعيد 402 insufficient_credits، والطلب المباشر دون Idempotency-Key يعيد 400 missing_idempotency_key، والمكالمة التي تتجاوز حد المكالمات المتزامنة تُرفض بـ 503. كل رمز فشل وكل رفض، مع ما يجب فعله حيال كل منها، موجود في صفحة مزوّدي الاتصالات.
كم تكلّف المكالمة الهاتفية بالذكاء الاصطناعي على Wixzel Voice؟
تكلفة المحرك لمكالمة واحدة، بمعدلات الكلام المعتادة، محسوبة من دليل الأسعار الذي يحتسب العداد على أساسه. كل سعر يشمل رسوم التنسيق البالغة $0.012 في الدقيقة. تُحتسب المكالمات بالثانية من الاستخدام الفعلي، فمكالمة مدتها 90 ثانية تكلّف نحو نصف مكالمة مدتها ثلاث دقائق. الاتصالات عبر الـ trunk الخاص بك بسعر مزوّد الاتصالات لديك وغير مشمولة.
| المحرك | مسار المعالجة | مكالمة 1 دقيقة | مكالمة 3 دقيقة | مكالمة 5 دقيقة |
|---|---|---|---|---|
| classic | Deepgram + GPT-4o-mini + ElevenLabs | $0.0867 | $0.2601 | $0.4335 |
| sarvam | Sarvam، بلغات الهند من البداية إلى النهاية | $0.0617 | $0.1851 | $0.3085 |
| gemini-live | Gemini Live، صوت أصلي | $0.0491 | $0.1473 | $0.2455 |
| deepgram-agent | Deepgram Voice Agent | $0.1851 | $0.5553 | $0.9255 |
مسبق الدفع: أضف رصيدًا بدءًا من $5، بلا اشتراك وبلا باقة مجانية. أرخص محرك اليوم هو gemini-live بسعر $0.0491 في الدقيقة. قدّر مزيج استخدامك.
ما حدود API المكالمات الهاتفية بالذكاء الاصطناعي من Wixzel Voice؟
- Wixzel Voice منشور ويستقبل مكالمات حقيقية. تُطرح التغييرات السلوكية خلف ترويسة
Wixzel-Versionمؤرخة، ويحتفظ كل مفتاح موجود بالسلوك الذي أُنشئ عليه. - خمس مكالمات متزامنة لكل حساب افتراضيًا، ويُرفع الحد عند الطلب. وتُحسب جلسات الويب والتطبيقات ضمن الحد نفسه.
- التحويل إلى شخص تحويل مباشر فقط: يُسلَّم المتصل مباشرة إلى رقم حددته. التحويل بعد التمهيد غير مبني، والتحويل غير متاح في مكالمات الاختبار ولا في جلسات الويب أو التطبيقات.
- لا يبيع Wixzel Voice أرقام الهاتف ولا ينقلها، والمكالمات الهاتفية تحتاج إلى SIP trunk خاص بك. ويمكنه شراء رقم لك على حسابك الخاص في Twilio أو Telnyx أو Plivo أو Vobiz أو Vonage، ويحاسبك عليه مزوّد الاتصالات.
- تنقل جلسات الويب والتطبيقات صوتًا بترميز G.711 µ-law بتردد 8 kHz، وهي جودة الهاتف وليست نطاقًا عريضًا.
- 10 طلبات API في الثانية لكل مفتاح، مع دفعة قصوى قدرها 20. الطلب الذي يتجاوز حد المعدل لا يُحتسب أبدًا.
- يقع API والبيانات المخزنة في مومباي بالهند. يعالج مزوّدو الكلام واللغة في الولايات المتحدة والهند الصوت والنص طوال مدة المكالمة؛ ويعالج محرك sarvam الكلام في الهند.
- لا باقة مجانية ولا رصيد تجريبي. الحد الأدنى للشحن $5. الاستخدام المجاني الوحيد هو 5 دقائق لكل حساب للتحدث إلى وكلائك من لوحة التحكم.
الأسئلة الشائعة
ما API المكالمات الهاتفية بالذكاء الاصطناعي؟
POST /v1/calls مكالمة عبر SIP trunk الخاص بك، ويرد رقم الهاتف الذي له inbound_agent_id على المكالمات بالطريقة نفسها.هل Wixzel Voice هو API للمكالمات بالذكاء الاصطناعي أم وكيل اتصال جاهز؟
كم تكلّف المكالمة الهاتفية بالذكاء الاصطناعي؟
هل يمكن لوكيل الذكاء الاصطناعي الرد على المكالمات الواردة إلى جانب إجراء المكالمات الصادرة؟
inbound_agent_id على رقم هاتف باستخدام PATCH /v1/phone-numbers/{id} فيرد ذلك الوكيل على المكالمات إلى ذلك الرقم. ويجب أن يرسل مزوّد الاتصالات المكالمات الواردة إلى origination_uri الذي يعيده الـ trunk. وبدون inbound_agent_id تُرفض المكالمات الواردة إلى الرقم.هل يمكن لوكيل الذكاء الاصطناعي تحويل المتصل إلى شخص؟
human_transfer، ويُتصل بها عبر SIP trunk الخاص بك. التحويل بعد التمهيد، حيث يتحدث الوكيل إلى الشخص أولًا، غير مبني، والتحويل غير متاح في مكالمات الاختبار ولا في جلسات الويب أو التطبيقات.كم مكالمة بالذكاء الاصطناعي يمكن أن تعمل في الوقت نفسه؟
هل توجد تجربة مجانية؟
402 insufficient_credits قبل حجز أي شيء.إلى أين بعد ذلك
كيف يتصل الـ trunk، ودليل إعداد لكل مزوّد اتصالات شائع.
سعر الدقيقة لكل محرك، وأداة لتركيب محركك الخاص.
حجز المواعيد، وتأهيل العملاء المحتملين، وخطوط الدعم، وغيرها، مع تكلفة الشهر.
كيف تُحمى كلمات مرور مزوّدي الاتصالات ومفاتيح API والـ webhooks، وأين تقع البيانات.
مقارنة صريحة، تبيّن متى يكون كل منهما الخيار الأفضل.
المشغّل والأسعار والحدود والاسترداد وموقع البيانات، في صفحة واحدة.
ابنِ أول وكيل صوتي لك

