← مركز التعلم English

واجهة المطورين API مُتاح في كل الباقات

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

المصادقة إرسال رسالة قوالب واتساب حالة الحساب ويب هوك الاستقبال أنواع الأحداث ربط القنوات التعليقات أحداث المنصة مفتاح AI الخاص بك الأخطاء n8n / Make / Zapier / CRM →

🔑 المصادقة وعنوان الواجهة

أنشئ مفاتيح API من لوحة التحكم: صفحة Messaging API (كل مفتاح نسخة مستقلة بقنواتها المسموحة وويب هوك خاص بها). يظهر المفتاح مرة واحدة فقط — احفظه بأمان.

Base URL:  https://thikaa.com/<your-store>/api/messaging/

Authorization: Bearer <api_key>      (أو X-API-Key: <api_key>)
واجهة الرسائل متاحة في جميع الباقات. الرسائل المرسلة عبر الواجهة تُخصم من رصيد رسائلك المعتاد.

POST إرسال رسالة

POST /api/messaging/?action=send

الحقلمطلوبالوصف
channel✓واحدة من: wd (WhatsApp QR) · wa (WhatsApp API) · tg · fb · ig · tt
to✓المستلم — رقم الهاتف بكود الدولة لواتساب؛ في واتساب QR (wd) يمكنك أيضاً استخدام معرّف مجموعة Baileys مثل 120363012345678901@g.us؛ أو معرّف المستخدم للمنصات الأخرى
message✓نص الرسالة (UTF-8، العربية مدعومة بالكامل)
media_url—رابط HTTPS عام لصورة أو ملف لإرفاقه (اختياري)
media_type—نوع الوسائط مثل image أو document

cURL

curl -X POST "https://thikaa.com/<your-store>/api/messaging/?action=send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "wd",
    "to": "9647701234567",
    "message": "تحديث الوظائف الأسبوعي 👇 ..."
  }'

الاستجابة

{ "ok": true, "message_id": "...", "channel": "wd", "to": "9647701234567" }
الإرسال الجماعي: كرّر الطلب على قائمة المستلمين مع مهلة قصيرة بين الطلبات والتزم بحد المفتاح (افتراضيًا 60/دقيقة). للحملات الكبيرة المتكررة (مثل تحديث أسبوعي لآلاف الطلاب) قناة واتساب الرسمية (wa) هي الإعداد الموصى به على المدى الطويل.

💬 قوالب رسائل واتساب

القالب المعتمد مسبقًا هو الطريقة الوحيدة المسموحة لمراسلة عميل على واتساب API (wa) لم يراسلك من قبل، أو لإعادة فتح محادثة بعد انتهاء نافذة الـ24 ساعة. بدونه يعيد action=send الخطأ 409 no_existing_conversation.

1. اعرض قوالبك المعتمدة

GET /api/messaging/?action=templates

curl "https://thikaa.com/<your-store>/api/messaging/?action=templates" \
  -H "Authorization: Bearer YOUR_API_KEY"

{ "ok": true, "count": 1, "templates": [
    { "name": "order_update", "language": "en", "status": "APPROVED",
      "category": "UTILITY", "body": "Hi {{1}}, your order {{2}} is ready.", "variables": 2 }
] }
القوالب موجودة في حساب واتساب للأعمال الخاص بك. أنشئها من Meta Business Manager أو من لوحة التحكم (صفحة واتساب API ← قوالب الرسائل) التي ترسلها إلى Meta للموافقة. الموافقة قرار Meta، عادة خلال دقائق.

2. أرسل قالبًا

POST /api/messaging/?action=send — القناة wa فقط

الحقلمطلوبالوصف
template.name✓اسم القالب المعتمد
template.language—كود اللغة مثل en أو ar أو en_US. الافتراضي en
template.variables—مصفوفة نصوص تُملأ في متغيرات النص {{1}} و{{2}} بالترتيب
template.components—مصفوفة مكوّنات Meta الكاملة بدل variables — لوسائط الترويسة والأزرار والمعاملات المسماة
from—أي أرقام واتساب لديك تُرسل منه — معرّف الرقم أو الرقم المعروض أو الاسم. الافتراضي أول رقم
curl -X POST "https://thikaa.com/<your-store>/api/messaging/?action=send" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "channel": "wa",
    "to": "+994105156977",
    "template": {
      "name": "order_update",
      "language": "en",
      "variables": ["Nurlan", "#1042"]
    }
  }'

{ "ok": true, "message_id": "wamid...", "conversation_id": 87,
  "template": "order_update", "language": "en", "delivery": "sent" }
الرد يصل في نفس المحادثة. القالب المرسل عبر الواجهة ينشئ المحادثة في صندوق الوارد، فعندما يرد العميل تصلك message.received بنفس conversation_id، ويعمل الإرسال النصي العادي بعدها — بدون محادثة ثانية وبدون خطأ 409.
الرمز 200 يعني أن Meta قبلت الرسالة، لا أنها وصلت. التسليم غير متزامن: الرقم غير الصالح يعيد معرّف رسالة ثم يفشل لاحقًا. النتيجة الحقيقية تظهر على الرسالة في صندوق الوارد وعلى ويب هوك حالة التسليم.
اختر التصنيف الصحيح. قوالب MARKETING تتطلب موافقة مسبقة وتُحتسب ضمن حدود التسويق لرقمك. للرسائل الخدمية — طلب اتصال أو تحديث طلب أو تذكير موعد — استخدم UTILITY: أرخص وبحدود أعلى واحتمال تعليمها أقل بكثير.
تسعير القوالب تحاسب عليه Meta على حسابك الخاص بأسعارها لكل محادثة. ثقة تحتسب المحادثة التي يفتحها القالب كأي محادثة أخرى: مرة واحدة لكل محادثة في الفترة.

GET حالة الحساب

GET /api/messaging/?action=status — يعيد حالة المفتاح والقنوات المسموحة والرصيد الحالي.

curl "https://thikaa.com/<your-store>/api/messaging/?action=status" \
  -H "Authorization: Bearer YOUR_API_KEY"

📥 ويب هوك استقبال الرسائل

حدّد رابط ويب هوك لكل مفتاح (من صفحة Messaging API). كل رسالة واردة من عملائك على قنوات المفتاح تُرسل POST إلى نقطتك بصيغة JSON وموقّعة بسرّ المفتاح:

POST <your-webhook-url>
Content-Type: application/json
X-Thikaa-Event: message.received
X-Thikaa-Signature: sha256=<hmac_sha256(body, webhook_secret)>

{ "event": "message.received", "instance_id": "...", "data": {
    "channel": "wa",
    "conversation_id": 1290,
    "message_id": 84990,
    "from": "+9665XXXXXXXX",
    "account": { "id": "1297236690138576", "number": "+994 10 515 69 77", "label": "nurlan_dev" },
    "text": "Where is my order?",
    "attachments": []
} }
account هو رقمك الذي استقبل الرسالة — معرّف الرقم لدى Meta (أو معرّف اتصال واتساب QR أو معرّف الصفحة) مع الرقم المقروء واسمه. عندما يكون لديك أكثر من رقم، هذا الحقل يحدد لأي رقم تعود الرسالة.
مجموعات واتساب (QR / Baileys فقط). تستخدم رسائل المجموعة معرّف المجموعة (المنتهي بـ @g.us) كهوية المحادثة، لذلك تصل رسائل جميع المشاركين إلى محادثة واحدة في ثقة. يتضمن كل حدث للمجموعة كائن whatsapp_group مع is_group وgroup_jid وparticipant وparticipant_name. الإرسال باستخدام channel: wd ونفس معرّف المجموعة يعود إلى المجموعة. القنوات الإعلانية والنشرات مستثناة. واتساب Cloud API (wa) لا يدعم مجموعات الدردشة العادية.

التحقق من التوقيع (PHP)

$body = file_get_contents('php://input');
$sig  = $_SERVER['HTTP_X_THIKAA_SIGNATURE'] ?? '';
$ok   = hash_equals('sha256=' . hash_hmac('sha256', $body, $secret), $sig);

التحقق من التوقيع (Node.js)

const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-thikaa-signature'] || ''));

🧾 أنواع أحداث واجهة الرسائل

فعّل الأحداث التي تريدها لكل مفتاح. ترويسة X-Thikaa-Event وحقل event يوضّحان دائماً أي حدث تتعامل معه.

الحدثيُطلق عند
message.receivedإرسال العميل رسالة لك
message.sentخروج أي رسالة من حسابك — origin يكون api أو bot أو dashboard أو phone لرد كُتب مباشرة من واتساب على الجهاز المربوط
message.statusإيصال يحرّك رسالة للأمام: sent ثم delivered ثم read. واتساب يُبلّغ عن الثلاثة؛ ماسنجر يُبلّغ عن delivered و read؛ إنستقرام يُبلّغ عن read. تيك توك وتيليجرام لا توفّران إيصالات، فلا يُرسَل شيء لهما.
message.reactionإضافة تفاعل أو إزالته
comment.receivedتعليق شخص على منشور فيسبوك أو إنستقرام أو فيديو تيك توك
channel.connectedاكتمال ربط قناة — انتهاء موافقة OAuth أو اقتران رقم واتساب
channel.disconnectedإزالة قناة، عبر الـ API أو من لوحة التحكم

🔌 اربط قنوات عملائك من لوحتك الخاصة

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

اعرف ما هو مربوط

curl "https://thikaa.com/<your-store>/api/messaging/?action=channels" \
  -H "Authorization: Bearer YOUR_API_KEY"

{ "ok": true, "channels": [
    { "channel": "wd", "id": "1000017", "name": "Lavida Travel", "identifier": "96555060830", "status": "connected" },
    { "channel": "fb", "id": "100877191952677", "name": "Pawlo Butchery", "status": "connected" },
    { "channel": "ig", "id": "17841478342647968", "name": "Pawlo Butchery", "status": "connected" },
    { "channel": "tt", "id": "-000HFd...", "name": "pawlo_butcher", "status": "connected" } ],
  "counts": { "wd": 1, "fb": 1, "ig": 1, "tt": 1 } }

فيسبوك وإنستقرام وتيك توك — رابط واحد

GET /api/messaging/?action=connect-link&channel=fb        # fb | ig | tt
      &redirect_url=https://your-app.com/done?client=42

{ "ok": true, "channel": "fb",
  "connect_url": "https://www.facebook.com/v21.0/dialog/oauth?...",
  "redirect_url": "https://your-app.com/done?client=42" }

أرسل عميلك إلى connect_url. عند الانتهاء نعيده إلى redirect_url مع النتيجة مضافة — ?thikaa_status=success&channel=fb&connected=2&ids=... — ونرسل لك حدثاً موقّعاً channel.connected لكل قناة تم ربطها.

اعرض نتيجة إعادة التوجيه، وثِق بالوويب هوك. إعادة التوجيه يتحكم بها المستخدم — أي شخص يستطيع كتابة ?thikaa_status=success. استخدمها لعرض صفحة نتيجة، واكتب في قاعدة بياناتك عند وصول الحدث الموقّع.

موافقة واحدة على Meta تغطي الاثنين: ربط صفحة فيسبوك يربط رسائل إنستقرام معها، وتصلك حدثان channel.connected لذلك.

تيليجرام — بدون OAuth، الرمز فقط

POST /api/messaging/?action=connect-telegram
{ "bot_token": "8765196861:AAG..." }      # من @BotFather
{ "ok": true, "channel": "tg", "status": "connected", "bot_username": "YourBot" }

واتساب QR — اقترن برقم عميلك

رمز الاقتران هو الطريقة الأساسية: عميلك عادةً يحمل نفس الهاتف الذي يُربَط، ولا يمكن مسح QR على نفس الشاشة.

POST /api/messaging/?action=create-session   { "label": "Clinic Riyadh" }
   -> { "session_token": "wds_...", "account_id": 1000021 }
POST /api/messaging/?action=pair-code        { "session_token": "wds_...", "phone": "+9665XXXXXXXX" }
   -> { "pairing_code": "ABCD-EFGH" }        # العميل يكتبه في واتساب
GET  /api/messaging/?action=session-status&session_token=wds_...
GET  /api/messaging/?action=session-qr&session_token=wds_...      # بديل لسطح المكتب
POST /api/messaging/?action=delete-session
الاقتران ينتهي على هاتف عميلك حيث لا تراه، لذلك انتظر channel.connected بدلاً من استعلام session-status في حلقة.

إلغاء الربط

POST /api/messaging/?action=disconnect-channel
{ "channel": "fb", "id": "100877191952677" }       # fb | ig | tg | tt

{ "ok": true, "channel": "fb", "status": "disconnected",
  "also_disconnected": [ { "channel": "ig", "id": "17841478342647968" } ] }

في فيسبوك هذه إزالة كاملة: نلغي اشتراك تطبيقنا بالصفحة عند Meta حتى يتوقف الاستقبال فعلاً، ثم نحذف توجيهها وروابط البوت. أما channel=ig فيفصل حساب إنستقرام فقط ويُبقي ماسنجر يعمل. واتساب QR يستخدم delete-session.

💭 التعليقات — فيسبوك وإنستقرام وتيك توك

التعليقات سطح منفصل عن الرسائل الخاصة، لها معرّفاتها وطريقة ردّها. حدث واحد لاستقبالها ونقطتان لقراءتها والرد عليها.

{ "event": "comment.received", "data": {
    "platform": "fb",                      # fb | ig | tt
    "comment_id": "1221...._1795...",
    "post_id": "113700101731161_1220987...",
    "parent_id": null,
    "text": "بكم هذا؟",
    "from": { "id": "7051...", "name": "Adham Ammar" },
    "conversation_id": 1841
} }
POST /api/messaging/?action=comment-reply
{ "comment_id": "1221...._1795...",
  "message": "السعر ٢٠٠ ريال",
  "private_message": "هذه القائمة كاملة..." }   # رد خاص عبر Meta، يفتح محادثة حقيقية

GET /api/messaging/?action=comments&platform=tt&limit=50
التوقيت يختلف بحسب المنصّة، ونفضّل قول ذلك بصراحة. Meta ترسل التعليقات إلينا، فتصل أحداث fb وig لحظة نشر التعليق. تيك توك لا توفّر وويب هوك للتعليقات لنوع تطبيقنا، لذلك تعليقاتها تُستجلب دورياً وتصل خلال دقائق. الردود فورية على المنصّات الثلاث.
حدود كل منصّة. تيك توك لا تدعم الرد الخاص — تمرير private_message هناك يُرجع خطأً واضحاً بدل أن يُهمَل بصمت، وردود تعليقاتها نصّية فقط. الردود العلنية على إنستقرام تحتاج صلاحية instagram_manage_comments من Meta لتطبيقنا.

🔔 ويب هوك أحداث المنصة

بشكل منفصل عن واجهة الرسائل، يمكن للمنصة إرسال أحداث إدارية إلى رابط واحد (الإعدادات ← Webhooks). من أهم الأحداث:

الحدثيُطلق عند
message-sentإرسال رسالة في أي محادثة
bot-messageرد البوت الذكي
new-messagesوصول رسائل جديدة من عميل
new-conversation / new-conversation-createdبدء محادثة جديدة
conversation-status-updatedحل المحادثة أو أرشفتها
sms-sent · email-sentإرسال إشعار SMS أو بريد

🧠 اربط مفتاح الذكاء الاصطناعي الخاص بك

يمكنك تشغيل بوتاتك على حسابك الخاص في مزود الذكاء الاصطناعي بدل رصيد المنصة: اربط مفتاح OpenAI أو Google Gemini أو Anthropic Claude من صفحة مزودي الذكاء الاصطناعي في لوحة التحكم، ثم اختر هذا الاتصال في إعدادات نموذج البوت. مفتاحك محفوظ داخل حسابك فقط ويُستخدم لبوتاتك وحدها.

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

HTTPالخطأالمعنى
401missing_api_key / invalid_api_keyالمفتاح غائب أو معطّل أو ملغى
402insufficient_balanceنفاد الرصيد أو الحساب غير نشط
403channel_not_allowedهذا المفتاح غير مسموح له باستخدام تلك القناة
400bad_redirect_urlredirect_url ليس رابط HTTPS مطلقاً على نطاق عام قابل للاستبانة
404unknown_comment · not_connectedهذا التعليق لم يُسلَّم إليك، أو لا يوجد شيء بهذا المعرّف مربوط هنا
405method_not_allowedطريقة HTTP خاطئة
429rate_limitedتجاوز حد المفتاح (افتراضيًا 60 طلبًا/دقيقة)
502graph_error · tiktok_errorميتا أو تيك توك رفضت الطلب — رسالتها تُنقَل كما هي
متاح في كل الباقات، بما فيها Starter. لا توجد إضافة خاصة للـ API ولا رسوم منفصلة — الرسائل الصادرة تستهلك رصيد حسابك المعتاد تماماً كردود البوت.

عندك سؤال؟ راسلنا على واتساب من الموقع — سيساعدك فريقنا (أو بوتنا نفسه 😄).