Your AI Connector Docs

بناء تكامل من البداية إلى النهاية

يرشدك هذا الدليل عبر كل ما تحتاجه لتشغيل Your AI Connector من الكود الخاص بك، دون الحاجة إلى فتح لوحة التحكم. بحلول النهاية، ستكون قد بنيت تكاملاً بسيطاً يقوم بما يلي:

  1. المصادقة باستخدام مفتاح API
  2. إنشاء وكيل ذكاء اصطناعي (AI Agent) وتهيئة سلوك المساعد الخاص به
  3. توصيل قناة مراسلة (نستخدم WhatsApp Web كمثال عملي) وتوجيهها إلى الوكيل
  4. استيراد جهات الاتصال
  5. إرسال وقراءة الرسائل
  6. قراءة التحليلات
  7. الاشتراك في خطافات الويب (webhooks) للأحداث في الوقت الفعلي

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

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

جميع المسارات أدناه نسبية إلى عنوان URL الأساسي:

https://api.youraiconnector.com/v1

الخطوة 1 — احصل على مفتاح API وقم بإجراء طلبك الأول

يوجد مفتاح API الخاص بك في التطبيق تحت الإعدادات ← عمليات التكامل ← مفتاح API — وهو قسم خاص به ضمن عمليات التكامل، منفصل عن خطافات الويب، ولا يظهر إلا عند تفعيل الوصول إلى API في خطة اشتراكك. قم بإنشاء مفتاح، وانسخه، واحفظه في مكان آمن (مخزن أسرار من جانب الخادم أو متغير بيئة — لا تضعه أبداً في كود المتصفح). التعليمات الكاملة موجودة في الوصول إلى API.

بمجرد حصولك على مفتاح، تأكد من أنه يعمل عن طريق استدعاء نقطة نهاية الحالة (health endpoint). هناك عدة طرق لإرسال المفتاح؛ أبسطها هو معلمة الاستعلام ?apiKey=، ولكن بالنسبة للكود الفعلي، يفضل استخدام رأس X-API-Key حتى لا ينتهي المطاف بالمفتاح في سجلات الخادم أو سجل المتصفح.

cURL

curl "https://api.youraiconnector.com/v1/health?apiKey=YOUR_API_KEY"

JavaScript

const BASE = "https://api.youraiconnector.com/v1";
const headers = { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" };

const res = await fetch(`${BASE}/health`, { headers });
const data = await res.json();
console.log(data); // { "success": true, ... }

Python

import requests

BASE = "https://api.youraiconnector.com/v1"
HEADERS = {"X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json"}

res = requests.get(f"{BASE}/health", headers=HEADERS)
print(res.json())  # { "success": true, ... }

يتم تغليف كل استجابة ناجحة في نفس الغلاف — حقل success: true بالإضافة إلى بيانات النتيجة. تُرجع الأخطاء success: false مع رسالة error و error_code. راجع الأخطاء والترقيم للحصول على القائمة الكاملة ولمعرفة كيفية ترقيم نقاط نهاية القائمة باستخدام ?limit و ?cursor.

حد المعدل. الطلبات الموثقة محدودة بـ 300 طلب في الدقيقة (مع سقف أوسع يصل إلى 1,200 طلب في الدقيقة لكل حساب). تجاوز هذا الحد يؤدي إلى إرجاع 429؛ توقف مؤقتاً ثم أعد المحاولة.


الخطوة 2 — إنشاء وكيل ذكاء اصطناعي (AI Agent)

يُعد وكيل الذكاء الاصطناعي (AI Agent) الوحدة التي تحتوي على سلوك مساعدك: تعليماته، وهدفه، وساعات عمله، وكيفية تواصله مع جهات الاتصال. هو المسؤول عن الرد على المحادثات، لذا فهو أول شيء يجب إنشاؤه بشكل طبيعي.

قم بإنشاء واحد باستخدام POST /agents. name هو الحقل الوحيد الذي يستحق الإرسال في البداية؛ يمكن ضبط كل شيء آخر باستخدام استدعاء تهيئة البوت (bot-config) أدناه.

cURL

curl -X POST "https://api.youraiconnector.com/v1/agents" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Inbound WhatsApp Leads",
    "language": "en"
  }'

JavaScript

const res = await fetch(`${BASE}/agents`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    name: "Inbound WhatsApp Leads",
    language: "en",
  }),
});
const { agent_id } = await res.json();

Python

res = requests.post(
    f"{BASE}/agents",
    headers=HEADERS,
    json={"name": "Inbound WhatsApp Leads", "language": "en"},
)
agent_id = res.json()["agent_id"]

الإنشاء الناجح يُرجع 201 مع المعرف الجديد:

{
  "success": true,
  "agent_id": "abc123agent"
}

احفظ agent_id — ستحتاج إليه عند توجيه القنوات.

تهيئة المساعد

يقوم PUT /agents/{agentId}/bot-config بضبط سلوك المساعد. إنه يدمج الحقول التي ترسلها مع التهيئة الحالية، لذا يتم الاحتفاظ بأي شيء تتركه خارجاً:

curl -X PUT "https://api.youraiconnector.com/v1/agents/abc123agent/bot-config" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instructions": "Greet warmly, answer questions about our services, and offer to book a call.",
    "goal": "Book a discovery call.",
    "ai_speed": "balanced"
  }'

اضبط ساعات العمل باستخدام PUT /agents/{agentId}/active-hours بحيث لا يرد المساعد إلا خلال ساعات العمل؛ خارج هذه النوافذ الزمنية، لن يرد المساعد تلقائياً.

قاعدة المعرفة. لكي يجيب المساعد بناءً على المحتوى الخاص بك، قم بإرفاق الأسئلة الشائعة (FAQs). راجع دليل الأسئلة الشائعة.

الإصدارات القديمة: الحملات الكلاسيكية. الحسابات التي لا تزال تحتوي على صفحة الحملات (Campaigns) تنشئ نفس سلوك المساعد على حملة بدلاً من ذلك (POST /campaigns مع كائن type و bot، ثم PUT /campaigns/{campaignId}/bot-config). قائمة حقول الحملة الكاملة وعناصر التحكم في دورة الحياة موجودة في دليل الحملات. إذا كنت تبني شيئاً جديداً، فقم بإنشاء وكيل (Agent).


الخطوة 3 — توصيل قناة

يحتاج الوكيل إلى طريقة لإرسال واستقبال الرسائل. يمكن تشغيل سبعة تدفقات اتصال من خلال API: WhatsApp Business، وWhatsApp Web، وInstagram وMessenger معاً (تدفق Meta مشترك واحد)، وحسابات Instagram الشخصية، وTelegram، وLINE، وViber. أما القنوات المتبقية — مثل الرسائل القصيرة (SMS)، والبريد الإلكتروني، وعنصر واجهة الدردشة (chat widget)، والقنوات المخصصة — فيتم إعدادها في لوحة التحكم بدلاً من REST، وبمجرد توصيلها، تعمل نقاط نهاية المراسلة وجهات الاتصال والتوجيه عليها بنفس الطريقة تماماً. GET /channels هو المصدر المباشر للمعلومات حول ما تم توصيله فعلياً بحساب معين:

curl "https://api.youraiconnector.com/v1/channels?apiKey=YOUR_API_KEY"

تم توثيق المجموعة الكاملة لتدفقات الاتصال/قطع الاتصال لكل قناة في دليل القنوات. نستعرض أدناه WhatsApp Web من البداية إلى النهاية، لأنه يوضح النمط الأكثر أهمية: تدفق اقتران عبر رمز QR الذي يجب على الغلاف (wrapper) الخاص بك عرضه ومتابعته.

مثال عملي: اقتران WhatsApp Web عبر رمز QR

اقتران WhatsApp Web هو عملية تتكون من ثلاثة طلبات — البدء، جلب رمز QR، المتابعة حتى الاتصال.

1. بدء جلسة الاقتران. مرر الرقم الذي تريد توصيله بتنسيق E.164.

curl -X POST "https://api.youraiconnector.com/v1/channels/whatsapp-web/connections" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "phone_number": "+15551230000" }'
await fetch(`${BASE}/channels/whatsapp-web/connections`, {
  method: "POST",
  headers,
  body: JSON.stringify({ phone_number: "+15551230000" }),
});
requests.post(
    f"{BASE}/channels/whatsapp-web/connections",
    headers=HEADERS,
    json={"phone_number": "+15551230000"},
)

2. جلب رمز QR وعرضه للمستخدم. قم بالاستعلام عن هذا كل 10–15 ثانية. تتضمن الاستجابة حمولة qr_code الخام (قم بعرضها كصورة QR بنفسك) وqr_data_url جاهز للعرض.

curl "https://api.youraiconnector.com/v1/channels/whatsapp-web/connections/+15551230000/qr?apiKey=YOUR_API_KEY"
{
  "success": true,
  "phone_number": "+15551230000",
  "status": "qr_pending",
  "qr_code": "2@abc...",
  "qr_data_url": "data:image/png;base64,iVBORw0KGgo..."
}

في واجهة المستخدم الخاصة بالغلاف (wrapper)، ضع qr_data_url مباشرة في <img src="..."> واطلب من المستخدم مسحه ضوئياً من WhatsApp → الأجهزة المرتبطة على هاتفه. إذا انتهت صلاحية رمز QR (استجابة 410)، ابدأ من الخطوة 1 للحصول على رمز جديد.

3. متابعة الحالة حتى يتم الاتصال. بعد أن يقوم المستخدم بالمسح الضوئي، استمر في الاستعلام عن نقطة نهاية الحالة حتى تبلغ عن connected (قد تبلغ الخدمة أيضاً عن open). تعامل مع disconnected وnot_initialized كحالات فشل نهائية.

import time

PHONE = "+15551230000"
while True:
    res = requests.get(
        f"{BASE}/channels/whatsapp-web/connections/{PHONE}/status",
        headers=HEADERS,
    )
    status = res.json()["status"]
    if status in ("connected", "open"):
        print("Connected!")
        break
    if status in ("disconnected", "not_initialized"):
        raise RuntimeError(f"Pairing failed: {status}")
    time.sleep(5)
async function waitForConnection(phone) {
  while (true) {
    const res = await fetch(
      `${BASE}/channels/whatsapp-web/connections/${encodeURIComponent(phone)}/status`,
      { headers }
    );
    const { status } = await res.json();
    if (status === "connected" || status === "open") return;
    if (status === "disconnected" || status === "not_initialized") {
      throw new Error(`Pairing failed: ${status}`);
    }
    await new Promise((r) => setTimeout(r, 5000));
  }
}

تنبيه. يتحمل كل رقم WhatsApp Web متصل رسوم صيانة شهرية متكررة حتى تقوم بقطع اتصاله (DELETE /channels/whatsapp-web/connections/{phoneNumber}).

توجيه القناة إلى الوكيل الخاص بك

توصيل القناة يجعلها تعمل؛ وتوجيهها يخبر المنصة أي وكيل ذكاء اصطناعي يجب أن يرد على المحادثات الواردة الجديدة عليها. قم بتعيين نقطة الدخول الافتراضية للقناة، مع تسمية الوكيل الذي أنشأته في الخطوة 2:

curl -X PUT "https://api.youraiconnector.com/v1/entry-points/channel-defaults" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "channel": "whatsapp_web", "agent_id": "abc123agent" }'

كرر الاستدعاء مرة واحدة لكل قناة — نقطة دخول افتراضية واحدة لكل قناة. لترك قناة بدون وكيل يرد عليها، اتصل بـ DELETE /entry-points/channel-defaults?channel=whatsapp_web؛ وللتحقق مما إذا كان تسلسل نقاط الدخول مفعلاً للحساب، اتصل بـ GET /entry-points/routing-status. تم الاحتفاظ بخريطة POST /channels/campaign القديمة للتراجع فقط ولم يعد يتم الرجوع إليها لتوجيه الرسائل الواردة. راجع دليل القنوات لمعرفة أنواع القنوات الأخرى وللحصول على تدفق OAuth الخاص بـ WhatsApp Business.


الخطوة 4 — استيراد جهات الاتصال الخاصة بك

بعد تفعيل القناة، قم بتحميل الأشخاص الذين تريد الوصول إليهم. تقبل نقطة نهاية الاستيراد ما يصل إلى 500 سجل لكل استدعاء. يحتاج كل سجل إلى phone_number بالتنسيق الدولي؛ وكل شيء آخر اختياري. يتم تخطي السجلات التي تحتوي على أرقام خاطئة، أو قنوات غير مدعومة، أو أرقام موجودة بالفعل — ويتم الإبلاغ عن كل تخطي مع فهرسه وسببه، حتى تتمكن من إعادة محاولة الفاشل منها فقط.

cURL

curl -X POST "https://api.youraiconnector.com/v1/contacts/import" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "contacts": [
      { "phone_number": "+12025551234", "first_name": "Ann", "last_name": "Lee" },
      { "phone_number": "+12025551235", "first_name": "Bob" }
    ],
    "defaultChannel": "whatsapp_web"
  }'

JavaScript

const res = await fetch(`${BASE}/contacts/import`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    contacts: [
      { phone_number: "+12025551234", first_name: "Ann", last_name: "Lee" },
      { phone_number: "+12025551235", first_name: "Bob" },
    ],
    defaultChannel: "whatsapp_web",
  }),
});
const result = await res.json();
console.log(`${result.imported} imported, ${result.skipped.length} skipped`);

Python

res = requests.post(
    f"{BASE}/contacts/import",
    headers=HEADERS,
    json={
        "contacts": [
            {"phone_number": "+12025551234", "first_name": "Ann", "last_name": "Lee"},
            {"phone_number": "+12025551235", "first_name": "Bob"},
        ],
        "defaultChannel": "whatsapp_web",
    },
)
result = res.json()
print(f"{result['imported']} imported, {len(result['skipped'])} skipped")

يخبرك الرد بما حدث بالضبط:

{
  "success": true,
  "imported": 2,
  "contact_ids": ["contactId1", "contactId2"],
  "skipped": []
}

لإنشاء جهات اتصال واحدة تلو الأخرى، أو القوائم/البحث، أو القوائم، أو العلامات، أو الحقول المخصصة، راجع دليل جهات الاتصال.


الخطوة 5 — إرسال وقراءة الرسائل

إرسال رسالة

أبسط عملية إرسال هي غير مرتبطة بقناة محددة: قدم هوية جهة الاتصال ونص الرسالة، وستقوم المنصة بتسليمها عبر أي قناة تتواجد عليها جهة الاتصال. يمكنك الاستهداف حسب contact_id، أو حسب channel بالإضافة إلى حقل الهوية المطابق (phone_number لـ WhatsApp/WhatsApp Web/SMS، وinstagram_id لـ Instagram، وهكذا).

cURL

curl -X POST "https://api.youraiconnector.com/v1/contacts/send" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "whatsapp_web",
    "phone_number": "+12025551234",
    "body": "Hi Ann! Thanks for reaching out."
  }'

JavaScript

const res = await fetch(`${BASE}/contacts/send`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    channel: "whatsapp_web",
    phone_number: "+12025551234",
    body: "Hi Ann! Thanks for reaching out.",
  }),
});
const { message_id } = await res.json();

Python

res = requests.post(
    f"{BASE}/contacts/send",
    headers=HEADERS,
    json={
        "channel": "whatsapp_web",
        "phone_number": "+12025551234",
        "body": "Hi Ann! Thanks for reaching out.",
    },
)
message_id = res.json()["message_id"]

التسليم غير متزامن — يعني الرد 201 أن الرسالة قُبلت ووُضعت في قائمة الانتظار، ولم يتم تسليمها بعد. (يتم رفض جهات الاتصال التي لديها وضع “عدم الإزعاج” أو الوضع الخاص مفعل بالرد 422.)

{
  "success": true,
  "message_id": "aB3dE5fG7hI9jK1lM2nO",
  "contact_id": "contact123",
  "channel": "whatsapp_web"
}

قراءة محادثة

لقراءة الرسائل الواردة، قم بإدراجها حسب جهة الاتصال، مع عرض الأحدث أولاً، باستخدام ترقيم الصفحات بالمؤشر. مرر next_cursor من رد واحد كـ cursor للرد التالي للتنقل عبر السجل.

curl "https://api.youraiconnector.com/v1/contacts/contact123/messages?limit=50&apiKey=YOUR_API_KEY"
res = requests.get(
    f"{BASE}/contacts/contact123/messages",
    headers=HEADERS,
    params={"limit": 50},
)
page = res.json()
for msg in page["messages"]:
    print(msg)
next_cursor = page["next_cursor"]  # pass back as ?cursor= for the next page

يمكنك أيضاً التصفية حسب نوع المحتوى (?filter=text|media|tool_use) أو الاتجاه (?direction=inbound|outbound). يغطي دليل الرسائل مرفقات الوسائط، ووضع علامة “مقروء” على الرسائل، وطرق عرض الرسائل لكل جلسة.

لا تستخدم الاستطلاع (Polling) للردود. يعمل إدراج الرسائل باستخدام مؤقت، ولكنه يهدر الطلبات ويضيف تأخيراً. بالنسبة للرسائل الواردة، استخدم خطافات الويب (webhooks) بدلاً من ذلك — هذه هي الخطوة 7.


الخطوة 6 — قراءة التحليلات

بمجرد تدفق الرسائل، يمنحك ملخص التحليلات أعداداً مجمعة عبر نطاق زمني: الرسائل المرسلة، والمُسلمة، والمقروءة، والردود، والحجوزات، وجهات الاتصال التي تم إنشاؤها، والأرصدة المستهلكة/المُعاد شحنها. ستحصل على إجمالي النطاق الزمني وسلسلة بيانات يومية مملوءة بالأصفار — وهي مثالية لمخطط لوحة التحكم. يمكنك اختيارياً حصر النتائج في حملة واحدة باستخدام campaign_id (تستخدم الأمثلة أدناه معرف حملة نائباً، abc123campaign)؛ اترك المعلمة فارغة للحصول على إجماليات الحساب بالكامل.

curl "https://api.youraiconnector.com/v1/analytics/summary?from=2026-05-01&to=2026-05-31&campaign_id=abc123campaign&apiKey=YOUR_API_KEY"
const params = new URLSearchParams({
  from: "2026-05-01",
  to: "2026-05-31",
  campaign_id: "abc123campaign",
});
const res = await fetch(`${BASE}/analytics/summary?${params}`, { headers });
const { totals, by_date } = await res.json();
res = requests.get(
    f"{BASE}/analytics/summary",
    headers=HEADERS,
    params={"from": "2026-05-01", "to": "2026-05-31", "campaign_id": "abc123campaign"},
)
data = res.json()
totals = data["totals"]
by_date = data["by_date"]

النطاق الافتراضي هو آخر 30 يوماً وبحد أقصى 366 يوماً. للحصول على سجلات استخدام الرصيد بالتفصيل وتحليلات تكاليف الذكاء الاصطناعي، راجع دليل التحليلات.


الخطوة 7 — الاشتراك في خطافات الويب (Webhooks) للأحداث في الوقت الفعلي

يعد الاستطلاع (Polling) مناسباً للبرامج النصية السريعة، ولكن التكامل الحقيقي يجب أن يعتمد على الدفع (Push-based). تتيح خطافات الويب للمنصة الاتصال بخادمك فور حدوث أي شيء — مثل جهة اتصال جديدة، أو رد، أو موعد محجوز، أو انتهاء محادثة.

أولاً، اكتشف أسماء الأحداث الدقيقة التي يمكنك الاشتراك فيها:

curl "https://api.youraiconnector.com/v1/webhooks/events?apiKey=YOUR_API_KEY"
{
  "success": true,
  "events": [
    "Contact Created",
    "Human Alerted",
    "Appointment Booked",
    "Replies",
    "New Message",
    "Chat Concluded",
    "Task Created",
    "Daily Summary Created"
  ]
}

ثم قم بإنشاء اشتراك يشير إلى عنوان URL يستخدم بروتوكول HTTPS على خادمك. استخدم سلاسل الأحداث الدقيقة من الاستدعاء أعلاه.

cURL

curl -X POST "https://api.youraiconnector.com/v1/webhooks" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://hooks.example.com/incoming",
    "subscribed_to": ["Contact Created", "Replies"],
    "name": "Lead updates hook"
  }'

JavaScript

const res = await fetch(`${BASE}/webhooks`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    url: "https://hooks.example.com/incoming",
    subscribed_to: ["Contact Created", "Replies"],
    name: "Lead updates hook",
  }),
});
const { webhook_id } = await res.json();

Python

res = requests.post(
    f"{BASE}/webhooks",
    headers=HEADERS,
    json={
        "url": "https://hooks.example.com/incoming",
        "subscribed_to": ["Contact Created", "Replies"],
        "name": "Lead updates hook",
    },
)
webhook_id = res.json()["webhook_id"]
{
  "success": true,
  "webhook_id": "1",
  "webhook": {
    "id": "1",
    "name": "Lead updates hook",
    "url": "https://hooks.example.com/incoming",
    "subscribed_to": ["Contact Created", "Replies"],
    "subscribed_to_tags": [],
    "created_at": "2026-06-09T12:00:00.000Z"
  }
}

يجب أن يستخدم عنوان URL بروتوكول HTTPS وأن يكون قابلاً للوصول بشكل عام. من الآن فصاعداً، سيتلقى خادمك طلب POST لكل حدث مشترك فيه. يمكنك إرسال تجربة تسليم، والتحقق من سلامة الاشتراك، وإعادة تفعيل اشتراك تم تعطيله تلقائياً بعد فشل متكرر — راجع دليل خطافات الويب وصفحة خطافات الويب على مستوى التكامل لمعرفة أشكال الحمولة (payload) والتحقق منها.


تجميع كل شيء معاً

إليك نظرة عامة على سير العمل بالكامل:

الخطوة الهدف الاستدعاء الرئيسي
1 المصادقة GET /health
2 إنشاء وتعديل المساعد POST /agents, PUT /agents/{id}/bot-config, PUT /agents/{id}/active-hours
3 توصيل قناة وتوجيهها POST /channels/whatsapp-web/connections → مسح رمز QR + الحالة → PUT /entry-points/channel-defaults
4 تحميل جهات الاتصال POST /contacts/import
5 الإرسال والقراءة POST /contacts/send, GET /contacts/{id}/messages
6 القياس GET /analytics/summary
7 التفاعل في الوقت الفعلي POST /webhooks

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

Stuck on something this guide does not cover? Email hi@youraiconnector.com.