تخطَّ إلى المحتوى
واجهات API للاتصالات الهاتفية القائمة على الوكلاء

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.

  1. 01

    اربط SIP trunk الخاص بك

    مضيف مزوّد الاتصالات وبيانات الاعتماد. كلمة المرور مشفّرة في حالة التخزين ولا تُعاد مرة أخرى أبدًا. تحمل الاستجابة platform_ip (حاليًا 187.126.120.231)، الذي يجب أن يضيفه مزوّد الاتصالات إلى قائمة السماح، وorigination_uri (حاليًا sip:187.126.120.231:5090)، وهو المكان الذي يرسل إليه مزوّد الاتصالات المكالمات الواردة.

    cURL
    curl 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": "..."
      }'
  2. 02

    سجّل رقم هاتف عليه

    رقم تملكه بالفعل لدى مزوّد الاتصالات ذاك، بصيغة E.164. لا يبيع Wixzel Voice الأرقام ولا ينقلها. إذا كان الـ trunk مرتبطًا بحسابك في Twilio أو Telnyx أو Plivo أو Vobiz أو Vonage، فيمكنك بدلًا من ذلك شراء رقم جديد على ذلك الحساب باستخدام POST /v1/phone-numbers/purchase. ويحاسبك مزوّد الاتصالات عليه بسعره.

    cURL
    curl 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"'"
      }'
  3. 03

    أنشئ وكيلًا

    تعليمات قصيرة بأسلوب الكلام المنطوق، وأول ما يقوله، وصوت: ثلاثة نماذج، أو نموذج فوري واحد. الحقل opening_message مطلوب، لأن الوكيل الذي ليس له رسالة افتتاحية يرد بالصمت. ويجعل outbound_phone_number_id الرقمَ من الخطوة 2 معرّف المتصل الخاص به.

    cURL
    curl 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"'"
      }'
  4. 04

    أجرِ المكالمة

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

    cURL
    curl 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.

TypeScript
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);
Dart
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
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، خادمك بانتهائها، فلا تحتاج إلى الاستعلام المتكرر.

الحقلما يحتويه
statusqueued أو ringing أو in-progress أو completed أو failed أو busy أو no-answer أو canceled.
direction / channeloutbound أو 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 دقيقة
classicDeepgram + GPT-4o-mini + ElevenLabs$0.0867$0.2601$0.4335
sarvamSarvam، بلغات الهند من البداية إلى النهاية$0.0617$0.1851$0.3085
gemini-liveGemini Live، صوت أصلي$0.0491$0.1473$0.2455
deepgram-agentDeepgram 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 المكالمات الهاتفية بالذكاء الاصطناعي؟

API يربط وكيل ذكاء اصطناعي بمكالمة هاتفية حقيقية: يحدد الكود الخاص بك رقمًا ووكيلًا، فيتصل API ويدير المحادثة بالتعرف على الكلام ونموذج لغوي وتركيب الكلام، ثم يعيد حالة المكالمة ونصها المكتوب وتكلفتها. وWixzel Voice واحد منها: يجري POST /v1/calls مكالمة عبر SIP trunk الخاص بك، ويرد رقم الهاتف الذي له inbound_agent_id على المكالمات بالطريقة نفسها.

هل Wixzel Voice هو API للمكالمات بالذكاء الاصطناعي أم وكيل اتصال جاهز؟

إنه API. أنت تبني الوكيل: تعليماته، وجملته الافتتاحية، ومحرك الصوت الخاص به، وما يفعله نظامك بالنتيجة. يبيع Wixzel Voice واجهات API وحزم SDK وخادم MCP، ولا يبيع وكيلًا جاهزًا أبدًا.

كم تكلّف المكالمة الهاتفية بالذكاء الاصطناعي؟

يكلّف محرك الصوت $0.0867 لكل دقيقة متصلة على classic, $0.0617 لكل دقيقة متصلة على sarvam, $0.0491 لكل دقيقة متصلة على gemini-live, $0.1851 لكل دقيقة متصلة على deepgram-agent، ويشمل كل منها رسوم التنسيق البالغة $0.012، ويُحتسب بالثانية من الاستخدام الفعلي. مكالمة مدتها ثلاث دقائق على classic تكلّف نحو $0.2601. ويحاسبك مزوّد الاتصالات على خط الهاتف بشكل منفصل، بأسعارك، دون أي هامش.

هل يمكن لوكيل الذكاء الاصطناعي الرد على المكالمات الواردة إلى جانب إجراء المكالمات الصادرة؟

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

هل يمكن لوكيل الذكاء الاصطناعي تحويل المتصل إلى شخص؟

نعم، كتحويل مباشر: عندما يطلب المتصل التحدث إلى شخص، يسلّم الوكيل المكالمة الجارية إلى إحدى الوجهات التي حددتها على الوكيل في human_transfer، ويُتصل بها عبر SIP trunk الخاص بك. التحويل بعد التمهيد، حيث يتحدث الوكيل إلى الشخص أولًا، غير مبني، والتحويل غير متاح في مكالمات الاختبار ولا في جلسات الويب أو التطبيقات.

كم مكالمة بالذكاء الاصطناعي يمكن أن تعمل في الوقت نفسه؟

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

هل توجد تجربة مجانية؟

لا باقة مجانية ولا رصيد تجريبي. API مسبق الدفع، بحد أدنى للشحن قدره $5 وبلا اشتراك. يحصل كل حساب جديد على 5 دقائق مجانية للتحدث إلى وكلائه من لوحة التحكم؛ أما المكالمات فتستخدم الرصيد دائمًا. المكالمة التي لا يكفي الرصيد لأول 15 ثانية منها تُرفض بـ 402 insufficient_credits قبل حجز أي شيء.

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