واجهة REST
اقرأ الطلبات وجهات الاتصال والمحادثات والمنتجات، وأرسل الرسائل، عبر HTTPS بمفتاح محدود الصلاحيات.
متاحة · الإصدار العام v1 للقراءة فقط؛ مسارات الكتابة تحتاج صلاحيات كتابة
curl https://api.inboxy.chat/api/v1/public/company -H "Authorization: Bearer inboxy_YOUR_KEY"لمن هذا
المطورون والوكالات الذين يربطون متجراً أو CRM أو ERP أو أداة داخلية بـInboxy.
ماذا يستطيع
- إصدار v1 ثابت للقراءة فقط تحت /api/v1/public: الشركة والاستهلاك وجهات الاتصال والمحادثات والرسائل والطلبات والمنتجات.
- بصلاحيات الكتابة، يستطيع المفتاح نفسه استدعاء مسارات لوحة التحكم المذكورة في المرجع الحي: إرسال رسائل وقوالب واتساب، والرد في أي محادثة، وتغيير حالة المحادثة، وإدارة جهات الاتصال والـWebhooks وغيرها.
- Webhooks موقّعة لأحداث مثل الرسائل والطلبات الجديدة.
- مستند OpenAPI يُولَّد من الواجهة العاملة، فلا يختلف المرجع عن الكود.
نظرة عامة
كل طلب يُرسل إلى https://api.inboxy.chat مع مفتاح API في ترويسة Authorization. المفتاح يحدد الشركة، ولا يوجد معرّف شركة في أي طلب.
طبقتان: عقد v1 العام (/api/v1/public/*، للقراءة فقط ومُرقَّم الإصدار) ومسارات لوحة التحكم التي يستطيع المفتاح استدعاءها بالصلاحية المناسبة. كلاهما في المرجع الحي.
المصادقة
- سجّل الدخول إلى Inboxy بحساب مدير الشركة وافتح المطورون ← API keys في لوحة التحكم (/developer-center/keys).
- اختر "أنشئ مفتاح API" وسمِّ المفتاح باسم تعرفه لاحقاً (مثل "Claude على جهازي").
- اختر الصلاحيات التي تحتاجها فقط. لا توجد صلاحيات افتراضية، ولا يمكن إنشاء مفتاح بلا صلاحيات. أدوات القراءة تحتاج صلاحيات ":read" (contacts:read وorders:read ...).
- اختر مدة الصلاحية: 30 أو 90 (الافتراضي) أو 180 أو 365 يوماً أو بلا انتهاء. الافتراضي 90 يوماً.
- انسخ المفتاح عند ظهوره، وهو يبدأ بـ"inboxy_". احفظه في مدير أسرار أو في سلسلة مفاتيح النظام، ولا تضعه أبداً في مستودع كود.
إرسال المفتاح
أرسله كرمز Bearer، عبر HTTPS فقط.
curl https://api.inboxy.chat/api/v1/public/company \
-H "Authorization: Bearer $INBOXY_API_KEY"import { InboxyClient } from '@inboxychat/sdk';
const inboxy = new InboxyClient({ apiKey: process.env.INBOXY_API_KEY! });
const { data } = await inboxy.getCompany();inboxy auth login # approve in the browser once
inboxy whoamiAuthorization: Bearer inboxy_YOUR_KEYمعلومات مهمة
- مدير الشركة فقط يستطيع إنشاء المفاتيح. يعمل المفتاح لشركته فقط، ولا يقبل أي طلب معرّف شركة.
- يمكن للشركة الاحتفاظ بـ10 مفاتيح فعالة كحد أقصى. ألغِ أي مفتاح من الصفحة نفسها.
- يعمل المفتاح باسم المدير الذي أنشأه، ويتوقف عند انتهائه أو إلغائه أو إيقاف الشركة أو إذا لم يعد منشئه مديراً.
- كل طلب ينفّذه المفتاح يظهر في صفحة المطورون ← Request logs.
البدء السريع
تحقّق من المفتاح ثم اقرأ أحدث خمسة طلبات. ضع مفتاحك مكان المثال (واحفظه في متغير بيئة).
export INBOXY_API_KEY="inboxy_YOUR_KEY"
curl -s https://api.inboxy.chat/api/v1/public/company \
-H "Authorization: Bearer $INBOXY_API_KEY"curl -s "https://api.inboxy.chat/api/v1/public/orders?limit=5" \
-H "Authorization: Bearer $INBOXY_API_KEY"يحتاج orders:read.
{
"success": true,
"data": [ { "id": "...", "orderNumber": "..." } ],
"meta": { "limit": 5, "hasMore": true, "nextCursor": "..." }
}أدلة الاستخدام
التنقل بين صفحات القائمة
القوائم تستخدم المؤشرات (cursor). مرّر limit (1-100، الافتراضي 20)، وما دام meta.hasMore يساوي true أرسل meta.nextCursor في المعامل cursor.
curl -s "https://api.inboxy.chat/api/v1/public/contacts?limit=100&cursor=NEXT_CURSOR" \
-H "Authorization: Bearer $INBOXY_API_KEY"إرسال رسالة واتساب نصية
يحتاج messages:send ورقم واتساب مربوطاً. الرسالة النصية الحرة تُرسل فقط داخل نافذة خدمة العملاء (24 ساعة)؛ وخارجها أرسل قالباً معتمداً.
curl -s -X POST https://api.inboxy.chat/api/v1/whatsapp/messages/text \
-H "Authorization: Bearer $INBOXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "to": "966500000000", "body": "Your order has shipped." }'الرد داخل محادثة
يعمل على أي قناة مربوطة. يحتاج messages:send.
curl -s -X POST https://api.inboxy.chat/api/v1/inbox/conversations/CONVERSATION_ID/messages \
-H "Authorization: Bearer $INBOXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "type": "text", "content": "Thanks, we are on it." }'استقبال الـWebhooks والتحقق منها
سجّل عنوان HTTPS (webhooks:write) مع الأحداث التي تريدها؛ قائمة الأحداث في https://api.inboxy.chat/api/v1/webhooks/catalog. كل تسليم يحمل X-Inboxy-Timestamp وX-Inboxy-Signature: sha256=HMAC-SHA256(secret, "<timestamp>.<raw body>"). ارفض أي تسليم أقدم من 300 ثانية.
curl -s -X POST https://api.inboxy.chat/api/v1/webhooks \
-H "Authorization: Bearer $INBOXY_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Order sync", "url": "https://example.com/webhooks/inboxy", "events": ["ecommerce.order.*"] }'import crypto from 'node:crypto';
export function verifyInboxy(rawBody, headers, secret) {
const ts = headers['x-inboxy-timestamp'];
const sig = headers['x-inboxy-signature'] || '';
if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(`${ts}.${rawBody}`).digest('hex');
const a = Buffer.from(sig);
const b = Buffer.from(expected);
return a.length === b.length && crypto.timingSafeEqual(a, b);
}المرجع
الإصدار العام v1 (قراءة فقط)
كل المسارات تحت https://api.inboxy.chat/api/v1/public.
| المسار | الصلاحية | يعيد |
|---|---|---|
GET /company | — | المفتاح وشركته وحدود الطلبات |
GET /usage | analytics:read | استهلاك الباقة مقابل حدودها |
GET /contacts | contacts:read | عرض جهات الاتصال والبحث فيها |
GET /contacts/:id | contacts:read | جلب جهة اتصال واحدة |
GET /conversations | conversations:read | عرض المحادثات |
GET /conversations/:id | conversations:read | جلب محادثة واحدة |
GET /conversations/:id/messages | messages:read | رسائل محادثة واحدة |
GET /orders | orders:read | عرض الطلبات |
GET /orders/:id | orders:read | جلب طلب واحد |
GET /products | products:read | عرض منتجات الكتالوج |
GET /products/:id | products:read | جلب منتج واحد |
GET /tickets | tickets:read | عرض تذاكر العملاء |
GET /tickets/:id | tickets:read | جلب تذكرة واحدة |
GET /tasks | tasks:read | عرض مهام الفريق |
GET /tasks/:id | tasks:read | جلب مهمة واحدة |
GET /campaigns | campaigns:read | عرض حملات واتساب ونتائجها |
GET /campaigns/:id | campaigns:read | جلب حملة واحدة ونتائجها |
GET /templates | templates:read | عرض قوالب واتساب (ميتا) |
GET /appointments | meetings:read | عرض مواعيد التقويم |
مسارات لوحة التحكم المتاحة للمفتاح (أمثلة)
القائمة الكاملة، مع جسم الطلب ومعاملات الاستعلام، في المرجع الحي ومستند OpenAPI.
| المسار | الصلاحية | الوظيفة |
|---|---|---|
POST /api/v1/whatsapp/messages/text | messages:send | إرسال رسالة واتساب نصية |
POST /api/v1/whatsapp/messages/template | messages:send | إرسال قالب واتساب معتمد |
POST /api/v1/inbox/conversations/:conversationId/messages | messages:send | الرد داخل محادثة على أي قناة |
PATCH /api/v1/inbox/conversations/:conversationId/status | conversations:write | تغيير حالة المحادثة (مفتوحة، معلقة، مغلقة) |
GET /api/v1/whatsapp/templates | templates:read | عرض قوالب واتساب |
POST /api/v1/webhooks | webhooks:write | تسجيل Webhook |
GET /api/v1/webhooks/:webhookId/logs | webhooks:read | عرض محاولات تسليم الـWebhook |
POST /api/v1/webhooks/:webhookId/test | webhooks:write | إرسال تسليم تجريبي |
الحدود والأمان
- 60 طلباً في الدقيقة لكل مفتاح، إضافة إلى حد دقيقة واحد مشترك بين كل مفاتيح الشركة. GET /api/v1/public/company يعيد الرقمين.
- عند تجاوز الحد يصلك الرمز 429 مع ترويسة Retry-After؛ انتظر عدد الثواني المذكور.
- حدود الباقة تنطبق على المفاتيح كما تنطبق في لوحة التحكم تماماً.
- أعطِ كل تكامل مفتاحاً خاصاً بأقل الصلاحيات ومع تاريخ انتهاء. لا تضع المفتاح أبداً في كود المتصفح أو في مستودع عام.
حل المشكلات
كل الأخطاء بصيغة واحدة: { "success": false, "error": { "code", "message", "details" } }. وأمر CLI inboxy doctor يفحص المفتاح من البداية للنهاية.
| الرمز | المعنى | ما العمل |
|---|---|---|
401 | المفتاح مفقود أو غير معروف أو ملغى أو منتهٍ | أنشئ مفتاحاً جديداً |
403 INSUFFICIENT_PERMISSIONS | المفتاح لا يملك الصلاحية (مذكورة في details.requiredScope) | أنشئ مفتاحاً بهذه الصلاحية |
403 COMPANY_PAUSED | الشركة موقوفة | تواصل مع دعم Inboxy |
404 | غير موجود في هذه الشركة أو المعرّف خاطئ | تحقق من المعرّف ومن شركة المفتاح |
429 | تجاوز حد الطلبات (للمفتاح أو للشركة) | انتظر عدد ثواني Retry-After |
5xx | خطأ من جهتنا | أعد المحاولة لاحقاً وأرسل للدعم قيمة X-Request-Id |
روابط
أنشئ مفتاح API
ينشئ مدير الشركة المفاتيح من صفحة المطورين في لوحة التحكم.
