انتقل إلى المحتوى الرئيسي

واجهة برمجة التطبيقات OMTrader v1.0 لتكامل CRM

المقدمة

تتضمن واجهة برمجة التطبيقات OMTrader v1.0 لتكامل تطبيقات CRM كلاً من REST API و WebSocket API.

  • إذا كان نظام CRM يدعم عميل WebSocket، فنُفضل هذا الخيار.
  • معظم موفري CRM يدعمون REST فقط ويستخدمون الاستعلام الدوري لجلب البيانات من OMTrader.

مستويات الوصول إلى API

مستوى APIالنطاقالأمان
التاجرحساب التاجرمفتاح API
المديرالوصول لجميع المجموعات أو بعضهاالمصادقة الأساسية
المسؤولللمسؤول فقطالمصادقة الأساسية

يتطلب تكامل CRM مستوى API المدير.

المتطلبات المسبقة

قبل استخدام API للمدير:

  • يجب على المسؤول إنشاء حساب بدور المدير عبر بوابة الإدارة.
  • سيتم استخدام هذا الحساب لأغراض الانتحال عبر API.
  • يجب أن يبقى الحساب نشطًا أثناء استخدام تطبيق CRM.
  • لمنح صلاحية الوصول الكاملة، يجب ربط الحساب بأعلى مجموعة.

💡 نصيحة: سَمِّ الحساب باسم CRM API لتسهيل التعرّف عليه.

نظرة عامة على API

تحتوي واجهة API للمدير على العديد من الإمكانيات. في ما يلي أكثر النقاط استخدامًا في CRM.

التوثيق

  • قم بتسجيل الدخول إلى: http://manager.dev.omtrader.io
  • استعرض API من خلال لوحة Swagger.
  • ستجد هناك تنسيق JSON الكامل للطلبات والاستجابات وأكواد الأخطاء.

المصادقة

نقطة تسجيل الدخول

POST {{url}}/api/v1/oauth2/login?remember_me=false

الرؤوس:

Authorization: Basic <base64(username:password)>

مثال (cURL):

curl --location --request POST 'api.dev.omtrader.io/api/v1/oauth2/login?remember_me=false' \
--header 'Authorization: Basic bWFuYWdlcjoxMjM='

الاستجابة:

{
"success": true,
"code": 200,
"data": {
"account_id": 2,
"access_token": "...",
"refresh_token": "...",
"session_id": "...",
"expires_in": 3600,
"ip_address": "94.249.48.3",
"scope": "Manager"
},
"error": "",
"message": ""
}

استخدم access_token في جميع الطلبات اللاحقة:

مثال (REST API):

curl --location --globoff '{{url}}/api/v1/manager/accounts?page=2&limit=5' \
--header 'Authorization: Bearer <access_token>'

مثال (WebSocket):

{{ws}}/ws/v1?session_id={{session_id}}&access_token={{token}}

بنية API

المكونالوصف
الفعلGET، POST، PUT، DELETE، BATCH
الخادمخادم API المستهدف
APIثابت /api
الإصدارv1، v2، ...
النطاقtrader، manager، admin
الكيانaccounts، groups، commissions ...
الصفحة / الحدللطلبات من نوع GET فقط

API حساب المدير

الوصفالفعلالرابط
جلب جميع الحساباتGET/api/v1/manager/accounts
جلب حساب محددGET/api/v1/manager/accounts/:id
تحديث الحسابPUT/api/v1/manager/accounts/:id
حذف الحسابDELETE/api/v1/manager/accounts/:id
إنشاء حسابPOST/api/v1/manager/accounts
تحويل الأموالPOST/api/v1/manager/accounts/1/money
عرض المعاملاتGET/api/v1/manager/accounts/1/transactions/history

API المجموعات للمدير

الوصفالفعلالرابط
جلب جميع المجموعاتGET/api/v1/manager/groups
جلب مجموعة حسب IDGET/api/v1/manager/group/:id
تحديث مجموعةPUT/api/v1/manager/group/:id

API العمولات للمجموعات

الوصفالفعلالرابط
جلب العمولاتGET/api/v1/manager/groups/1/commissions
إنشاء عمولةPOST/api/v1/manager/commissions
تحديث عمولةPUT/api/v1/manager/commissions/:id
حذف عمولةDELETE/api/v1/manager/commissions/:id

WebSocket API

تنسيق URL لـ WebSocket

{{ws}}/ws/v1?session_id={{session_id}}&access_token={{token}}
  • استخدم wss:// في بيئة الإنتاج.

الاتصال

GET {{ws}}/ws/v1?session_id={{session_id}}&access_token={{token}}

مثال استجابة:

Connected to api.dev.omtrader.io/ws/v1?session_id=...&access_token=...

تنسيق حدث WebSocket

{
"type": "event_name",
"data": { ... }
}

أحداث الاشتراك

الحدثالبياناتالوصف
subscribe_groupgroup_idالاشتراك في بيانات مجموعة معينة
subscribe_group_sessiongroup_idالاشتراك في جميع جلسات المجموعة

أحداث إلغاء الاشتراك

الحدثالبياناتالوصف
unsubscribe_groupgroup_idإلغاء الاشتراك في مجموعة معينة
unsubscribe_group_sessiongroup_idإلغاء الاشتراك في جميع جلسات المجموعة

الحفاظ على اتصال WebSocket

لضمان بقاء الاتصال نشطًا، أرسل "نبض" كل 30 ثانية بالقيمة 9:

private startHeartbeat() {
if (this.heartbeatInterval) {
clearInterval(this.heartbeatInterval);
}
this.heartbeatInterval = setInterval(() => {
if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {
this.sendString("9");
}
}, 30000); // كل 30 ثانية
}