للمطورين

ادمج المكالمات المترجمة في أنظمتك الخاصة

تقدم Owaa for Business واجهة برمجة تطبيقات REST لإجراء ومراجعة المكالمات المترجمة، وwebhook موقّع للتوجيه الوارد، وخادم MCP يتيح لمساعدي الذكاء الاصطناعي العمل مع حسابك ضمن حدود تتحكم فيها.

في هذه الصفحة

المصادقة

المصادقة باستخدام مفتاح API

يحمل كل طلب مفتاحك كرمز Bearer. أنشئ المفاتيح في وحدة تحكم Owaa for Business. يتم عرض المفتاح مرة واحدة عند إنشائه، لذا قم بتخزينه في مدير الأسرار الخاص بك.

عنوان URL الأساسي

https://b2b.owaa.ai/v1/b2b/admin

curl: GET /billing
curl https://b2b.owaa.ai/v1/b2b/admin/billing \
  -H "Authorization: Bearer $API_KEY"

أرسل المفتاح في رأس Authorization. لا يتم قبول المفاتيح كمعامل استعلام.

يمكن لمفاتيح API استدعاء نقاط نهاية التكامل المدرجة في هذه الصفحة فقط، وخادم MCP. تتطلب إدارة مفاتيح API وأعضاء الفريق وتعبئة الرصيد وبيانات اعتماد الناقل وحدود الإنفاق جلسة وحدة تحكم مسجلة الدخول.

قم بتدوير مفتاح من وحدة التحكم (صفحة مفاتيح API): يتم عرض المفتاح الجديد مرة واحدة ويتوقف المفتاح القديم عن العمل فورًا.

يعيد الطلب الذي يحتوي على مفتاح مفقود أو غير صالح 401. يتم حظر المحاولات الفاشلة المتكررة من عنوان واحد لفترة من الوقت.

واجهة برمجة تطبيقات REST

نقاط نهاية التكامل

جميع المسارات نسبية لعنوان URL الأساسي. الطلبات والاستجابات هي JSON، باستثناء التسجيلات التي تبث الصوت.

  • POST/calls/originate

    ابدأ مكالمة مترجمة بين هاتف وكيلك وطرف بعيد، باستخدام حساب Twilio المتصل الخاص بك.

  • GET/caller-id/preview?destination=

    تشغيل تجريبي لوجهة: يوضح معرف المتصل الذي سيتم استخدامه، بحيث تظهر مشاكل معرف المتصل قبل الاتصال.

  • GET/calls

    قائمة أرجل المكالمات، الأحدث أولاً. قم بالتصفية باستخدام limit (من 1 إلى 200) والحالة، والتصفح باستخدام المؤشر في next_cursor.

  • GET/calls/{id}

    جلب ساق مكالمة واحدة.

  • GET/calls/{id}/recording

    بث تسجيل ساق كصوت Opus. اختر الجانب باستخدام side=in أو side=out.

  • GET/billing

    اقرأ رصيدك، وسعر الدقيقة، والدقائق المتبقية، وعتبة الرصيد المنخفض.

  • GET/twilio-numbers

    قائمة أرقام Twilio الخاصة بك مع معرفها وإعدادات التوجيه والحالة. للقراءة فقط: لا يتم إرجاع أي بيانات اعتماد.

  • PUT/twilio-numbers/{id}/route

    قم بتعيين عنوان URL للتوجيه الوارد والوجهة الاحتياطية لأحد أرقام Twilio الخاصة بك.

مثال

إجراء مكالمة مترجمة

أرسل رقم الوكيل ورقم الطرف البعيد. اللغات ومعرفات المتصل اختيارية، ويتم رفض الحقول غير المعروفة.

POST /calls/originate
curl -X POST https://b2b.owaa.ai/v1/b2b/admin/calls/originate \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "agent_number": "+14165550100",
    "far_number": "+34600000000",
    "agent_language": "en",
    "far_language": "es"
  }'
201 Created
{
  "bridge_id": "...",
  "agent_call_sid": "...",
  "far_call_sid": "...",
  "agent_caller_id": "+14165550101",
  "far_caller_id": "+14165550101",
  "agent_must_confirm": false
}

يعيد الطلب الناجح 201 مع معرفات المكالمة. قم بتشغيل معاينة معرف المتصل أولاً لتجنب حالات 409.

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

curl: GET /calls
curl "https://b2b.owaa.ai/v1/b2b/admin/calls?limit=20" \
  -H "Authorization: Bearer $API_KEY"

لتعيين التوجيه، تحتاج إلى معرف الرقم. ابحث عنه باستخدام GET /twilio-numbers، الذي يسرد أرقامك (المعروضة هنا مع الحقول الرئيسية).

curl: GET /twilio-numbers
curl https://b2b.owaa.ai/v1/b2b/admin/twilio-numbers \
  -H "Authorization: Bearer $API_KEY"
200 OK
[
  {
    "id": "<number_id>",
    "phone_number_e164": "+14165550101",
    "friendly_name": "Support line",
    "country_code": "CA",
    "voice_enabled": true,
    "verified": true,
    "routes_to_owaa": true,
    "inbound_destination_e164": "+34600000000",
    "inbound_routing_url": "https://example.com/owaa/route",
    "agent_language": "es",
    "caller_language_hint": "en"
  }
]

ثم قم بتعيين التوجيه الوارد لهذا الرقم باستخدام PUT /twilio-numbers/{id}/route: عنوان URL الذي تستدعيه Owaa لكل مكالمة واردة، والوجهة الاحتياطية، واختياريًا لغة الوكيل وتلميح اللغة للمتصل.

curl: PUT /twilio-numbers/{id}/route
curl -X PUT https://b2b.owaa.ai/v1/b2b/admin/twilio-numbers/<number_id>/route \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "routing_url": "https://example.com/owaa/route",
    "destination_e164": "+34600000000",
    "agent_language": "es",
    "caller_language_hint": "en"
  }'

التوجيه الوارد

توجيه المكالمات الواردة باستخدام webhook موقّع

لكل مكالمة واردة على رقم موجه إلى عنوان URL الخاص بك، يرسل Owaa طلب POST وينتظر لمدة تصل إلى ثلاث ثوانٍ. إذا فشلت نقطة النهاية الخاصة بك، أو انتهت مهلتها، أو أعادت JSON غير صالح، تنتقل المكالمة إلى الوجهة الاحتياطية التي قمت بتكوينها ويتم تسجيل السبب.

نص الطلب

call.inbound
{
  "event": "call.inbound",
  "call_id": "...",
  "tenant_id": "...",
  "from": "+14165550100",
  "to": "+14165550101",
  "twilio_call_sid": "...",
  "received_at": "..."
}

الرد بـ 200 والاتصال أو الرفض. يتم تجاهل caller_id الذي لا تملكه.

response: connect
{ "action": "connect", "destination": "+34600000000", "caller_id": "+14165550101" }
response: reject
{ "action": "reject", "reason": "closed" }

X-Owaa-Signature يحمل كل طلب رأس X-Owaa-Signature بالصيغة t=<ثواني يونكس>,v1=<سداسي عشري>. قيمة v1 هي HMAC-SHA256 للطابع الزمني، ونقطة، ونص الطلب الخام، ومفتاحها هو سر التوجيه الخاص بك. تحقق منها مقابل النص الخام وارفض الطوابع الزمنية الأقدم من خمس دقائق.

يتم عرض سر التوجيه الخاص بك مرة واحدة في صفحة التوجيه في وحدة التحكم.

تحد نافذة الطابع الزمني عمليات إعادة التشغيل بخمس دقائق. لحظر عمليات إعادة التشغيل داخلها، تذكر أيضًا call_id لكل طلب قمت بمعالجته بالفعل.

Node.js
import { createHmac, timingSafeEqual } from "node:crypto";

// rawBody: the exact bytes received, as a string or Buffer.
// Never re-serialise parsed JSON: that changes the bytes and the signature.
export function verifyOwaaSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(
    String(header ?? "").split(",").map((p) => p.split("=")),
  );
  const t = parts.t ?? "";
  if (!/^\d+$/.test(t) || !(Math.abs(Date.now() / 1000 - Number(t)) <= 300)) return false;
  const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest();
  const given = Buffer.from(parts.v1 ?? "", "hex");
  return given.length === expected.length && timingSafeEqual(given, expected);
}
Python
import hashlib
import hmac
import time


def verify_owaa_signature(raw_body: bytes, header: str, secret: str) -> bool:
    parts = dict(p.split("=", 1) for p in (header or "").split(",") if "=" in p)
    try:
        t = int(parts["t"])
    except (KeyError, ValueError):
        return False
    if abs(time.time() - t) > 300:
        return False
    signed = f"{t}.".encode() + raw_body
    expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))

الحدود والأخطاء

حدود المعدل واستجابات الأخطاء

تنطبق الحدود لكل عمل، كل دقيقة. عند تجاوز أحدها، تعيد واجهة برمجة التطبيقات 429 مع رأس Retry-After.

  • 600 طلب قراءة في الدقيقة
  • 120 طلب كتابة في الدقيقة
  • 60 تنزيل تسجيل في الدقيقة
  • 401مفتاح API مفقود أو غير صالح.
  • 402رصيد غير كافٍ لبدء المكالمة.
  • 409لا يوجد معرف متصل قابل للاستخدام، أو لا يوجد حساب Twilio موثق متصل.
  • 422رفض Twilio المكالمة، أو معرف المتصل الذي ذكرته ليس ملكًا لك.
  • 429تجاوز حد المعدل: انتظر الوقت المحدد في Retry-After. يتم إرجاعه أيضًا إلى عنوان تم قفله مؤقتًا بعد مفاتيح غير صالحة متكررة.

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

خادم MCP

دع مساعدي الذكاء الاصطناعي يعملون مع حسابك

يتيح خادم Owaa MCP لمساعدي الذكاء الاصطناعي المتوافقين مع MCP البحث عن تكاليف المكالمات، وإجراء مكالمات مترجمة، ومراجعة النشاط لعملك، ضمن حدود الإنفاق التي تحددها.

متاح عند الطلب

يتوفر خادم MCP عند الطلب. اتصل بنا لتمكينه لعملك.

نقطة النهاية

https://mcp.owaa.ai/business

نقل HTTP قابل للتدفق.

اتصال

باستخدام مفتاح API: أرسله كرمز حامل (Bearer token) في رأس التخويل (Authorization header).

باستخدام OAuth: يمكن للعملاء الذين يدعمون OAuth 2.1 مع PKCE تسجيل الدخول ويتم منحهم الوصول من وحدة التحكم. يمكن إلغاء كل منح.

تكوين العميل

أضف الخادم إلى أي عميل MCP يدعم خوادم HTTP البعيدة، واستبدل العنصر النائب بمفتاحك.

mcp.json
{
  "mcpServers": {
    "owaa": {
      "type": "http",
      "url": "https://mcp.owaa.ai/business",
      "headers": { "Authorization": "Bearer <your-api-key>" }
    }
  }
}
Claude Code
claude mcp add --transport http owaa https://mcp.owaa.ai/business \
  --header "Authorization: Bearer <your-api-key>"

الأدوات

  • list_languagesسرد اللغات المتاحة للمكالمات المترجمة.
  • check_call_costتقدير تكلفة المكالمة قبل إجرائها.
  • get_callالحصول على مكالمة واحدة، مع حالتها وتكلفتها.
  • list_recent_activityسرد النشاط الأخير في حسابك.
  • place_translated_callإجراء مكالمة مترجمة: يرن هاتف المشغل الخاص بك، ثم الطرف البعيد. ينفق رصيدك.
  • delegate_call_taskتسليم مهمة هاتفية إلى متصل الذكاء الاصطناعي الخاص بـ Owaa، مع هدف والحقول المراد جمعها. متاح عند التمكين لعملك.
  • get_taskالتحقق من تقدم ونتيجة مهمة مفوضة.
  • cancel_taskإلغاء مهمة مفوضة.

النطاقات

  • activity:readالبحث عن اللغات والتكاليف والمكالمات والمهام. ممنوح دائمًا.
  • calls:translateإجراء مكالمات مترجمة.
  • tasks:delegateتفويض مهام الهاتف.

يتم تعيين نطاقات مفتاح API في وحدة التحكم. تُرجع الأداة خارج نطاقات المفتاح scope_not_granted.

يصدر الخادم تعليمات للمساعدين للتحقق من التكلفة والتأكيد مع المستخدم قبل أي مكالمة تنفق المال.

تعيد الأدوات الأخطاء كرمز ورسالة، على سبيل المثال insufficient_balance أو country_not_allowed أو rate_limited. لا تعيد محاولة outcome_unknown بشكل أعمى: تحقق من المكالمة أولاً.

الأمان

كيفية حماية الوصول

مشفرة أثناء النقل

تستخدم جميع حركة مرور API و MCP بروتوكول TLS، مع HSTS.

مفاتيح API

المفاتيح هي أسرار عشوائية طويلة، تظهر مرة واحدة عند الإنشاء وتخزن فقط كتجزئة. قم بإلغاء أو تدوير مفتاح في أي وقت ويتوقف المفتاح القديم عن العمل فورًا. يتم حظر المحاولات الفاشلة المتكررة.

حدود المعدل

600 قراءة، 120 كتابة، و 60 تنزيل تسجيل في الدقيقة لكل عمل، مع 429 و Retry-After عند التجاوز.

خطافات الويب الموقعة

يتم توقيع طلبات التوجيه الواردة باستخدام HMAC-SHA256 وطابع زمني. تحقق من التوقيع وارفض الطلبات الأقدم من خمس دقائق. لا يمكن للرد تقديم معرف المتصل الذي لا يملكه عملك.

حساب الناقل الخاص بك

تتم المكالمات على حساب Twilio الخاص بك، ويتم تشفير بيانات اعتماد Twilio الخاصة بك في وضع السكون.

تخويل MCP

OAuth 2.1 مع PKCE. ترتبط الرموز بمورد MCP، ورموز الوصول قصيرة الأجل، وتدور رموز التحديث مع كل استخدام، ويؤدي رمز التحديث المعاد تشغيله إلى إلغاء المنح. يتم تخزين ملخصات الرموز فقط، ويمكن إلغاء المنح من وحدة التحكم.

نطاقات منفصلة

القراءة والإنفاق نطاقات منفصلة. يحتاج المساعد إلى calls:translate أو tasks:delegate قبل أن يتمكن من إجراء مكالمة أو بدء مهمة.

حدود الإنفاق التي لا يمكن للمساعد رفعها

لكل مفتاح حد إنفاق يومي ولعملك سقف يومي، وكلاهما له قيم افتراضية متحفظة وحد أقصى للمنصة. يمكن فقط لجلسة وحدة تحكم مسجلة الدخول تغييرها، وليس مفتاح API أو عميل AI أبدًا.

قوائم السماح

المكالمات مقتصرة على قائمة سماح خاصة بالبلد، ويمكنك تقييد أرقام هواتف المشغل التي قد يتصل بها المساعد. يتم إدارة كلاهما خارج اتصال MCP.

سجل التدقيق

يتم تسجيل كل مكالمة أداة MCP مع نتيجتها والعميل الذي قام بها.

النسخ النصية اختيارية

النسخ النصية للمكالمات متوقفة افتراضيًا ويتم تمكينها لكل عمل.

احصل على إمكانية الوصول

تحدث إلينا حول الوصول إلى API و MCP

أنشئ مفاتيح API في وحدة التحكم بمجرد إعداد عملك. لتمكين خادم MCP، أو لمناقشة التكامل، اتصل بنا.

افتح وحدة التحكم
وثائق مطوري Owaa — واجهة برمجة تطبيقات التاجر وخادم MCP