واجهة REST

اقرأ الطلبات وجهات الاتصال والمحادثات والمنتجات، وأرسل الرسائل، عبر HTTPS بمفتاح محدود الصلاحيات.

متاحة · الإصدار العام v1 للقراءة فقط؛ مسارات الكتابة تحتاج صلاحيات كتابة

curl
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/*، للقراءة فقط ومُرقَّم الإصدار) ومسارات لوحة التحكم التي يستطيع المفتاح استدعاءها بالصلاحية المناسبة. كلاهما في المرجع الحي.

المصادقة

  1. سجّل الدخول إلى Inboxy بحساب مدير الشركة وافتح المطورون ← API keys في لوحة التحكم ‏(/developer-center/keys).
  2. اختر "أنشئ مفتاح API" وسمِّ المفتاح باسم تعرفه لاحقاً (مثل "Claude على جهازي").
  3. اختر الصلاحيات التي تحتاجها فقط. لا توجد صلاحيات افتراضية، ولا يمكن إنشاء مفتاح بلا صلاحيات. أدوات القراءة تحتاج صلاحيات ":read" ‏(contacts:read وorders:read ...).
  4. اختر مدة الصلاحية: 30 أو 90 (الافتراضي) أو 180 أو 365 يوماً أو بلا انتهاء. الافتراضي 90 يوماً.
  5. انسخ المفتاح عند ظهوره، وهو يبدأ بـ"inboxy_". احفظه في مدير أسرار أو في سلسلة مفاتيح النظام، ولا تضعه أبداً في مستودع كود.

إرسال المفتاح

أرسله كرمز Bearer، عبر HTTPS فقط.

cURL
curl https://api.inboxy.chat/api/v1/public/company \
  -H "Authorization: Bearer $INBOXY_API_KEY"
Node SDK
import { InboxyClient } from '@inboxychat/sdk';

const inboxy = new InboxyClient({ apiKey: process.env.INBOXY_API_KEY! });
const { data } = await inboxy.getCompany();
CLI
inboxy auth login   # approve in the browser once
inboxy whoami
الترويسة
Authorization: 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.*"] }'
التحقق (Node.js)
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 /usageanalytics:readاستهلاك الباقة مقابل حدودها
GET /contactscontacts:readعرض جهات الاتصال والبحث فيها
GET /contacts/:idcontacts:readجلب جهة اتصال واحدة
GET /conversationsconversations:readعرض المحادثات
GET /conversations/:idconversations:readجلب محادثة واحدة
GET /conversations/:id/messagesmessages:readرسائل محادثة واحدة
GET /ordersorders:readعرض الطلبات
GET /orders/:idorders:readجلب طلب واحد
GET /productsproducts:readعرض منتجات الكتالوج
GET /products/:idproducts:readجلب منتج واحد
GET /ticketstickets:readعرض تذاكر العملاء
GET /tickets/:idtickets:readجلب تذكرة واحدة
GET /taskstasks:readعرض مهام الفريق
GET /tasks/:idtasks:readجلب مهمة واحدة
GET /campaignscampaigns:readعرض حملات واتساب ونتائجها
GET /campaigns/:idcampaigns:readجلب حملة واحدة ونتائجها
GET /templatestemplates:readعرض قوالب واتساب (ميتا)
GET /appointmentsmeetings:readعرض مواعيد التقويم

مسارات لوحة التحكم المتاحة للمفتاح (أمثلة)

القائمة الكاملة، مع جسم الطلب ومعاملات الاستعلام، في المرجع الحي ومستند OpenAPI.

المسارالصلاحيةالوظيفة
POST /api/v1/whatsapp/messages/textmessages:sendإرسال رسالة واتساب نصية
POST /api/v1/whatsapp/messages/templatemessages:sendإرسال قالب واتساب معتمد
POST /api/v1/inbox/conversations/:conversationId/messagesmessages:sendالرد داخل محادثة على أي قناة
PATCH /api/v1/inbox/conversations/:conversationId/statusconversations:writeتغيير حالة المحادثة (مفتوحة، معلقة، مغلقة)
GET /api/v1/whatsapp/templatestemplates:readعرض قوالب واتساب
POST /api/v1/webhookswebhooks:writeتسجيل Webhook
GET /api/v1/webhooks/:webhookId/logswebhooks:readعرض محاولات تسليم الـWebhook
POST /api/v1/webhooks/:webhookId/testwebhooks: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

ينشئ مدير الشركة المفاتيح من صفحة المطورين في لوحة التحكم.