ONPChat API v1
FA EN AR

واجهة ONPChat البرمجية

انشر في قنواتك ومجموعاتك وصفوفك وسنترالاتك — من أي تطبيق أو خادم.

https://api.onpchat.ir

تنزيل openapi.yaml

ملف OpenAPI 3.1: استورده مباشرة في Postman أو Insomnia، أو ولّد منه حزمة SDK للغتك.

curl https://api.onpchat.ir/v1/me \
  -H "Authorization: Bearer $ONP_TOKEN"

بداية سريعة

  1. احصل على رمز. سجّل الدخول بحساب يدير ذلك الفضاء، ثم افتح:

    المعرّف يتضمن بادئته ويجب ترميزه في الرابط — القناة #1786551855736 تصبح %231786551855736. إن لم يكن هناك رمز، يُنشأ في الحال.

  2. جرّب الرمز.
  3. أرسل رسالة.
1
https://onpchat.ir/api/space/api-token?entity_id=<id>
curl -X POST https://api.onpchat.ir/v1/channels/%231786551855736/messages \
  -H "Authorization: Bearer $ONP_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello from the API"}'

المصادقة

لكل فضاء رمز مستقل يعمل على ذلك الفضاء فقط. أرسله في الترويسة:

لا تُقبل الكوكيز ولا ?token=. هذه الواجهة للخوادم لا للمتصفحات، ولا ترسل ترويسات CORS. لا تضع الرمز في جافاسكربت جهة العميل — أي زائر يستطيع أخذه والنشر باسم فضائك. إذا تسرّب رمز فألغِه من اللوحة نفسها؛ يحلّ محلّه رمز جديد فوراً.
Header
Authorization: Bearer onp_2e09e8f0bb35088c795e5f75dc...

شكل الاستجابة

اعتمد شروطك على error.code لا على message. النص موجّه للبشر وقد يتغيّر، أما الرمز فلا.

الاستجابة
{ "ok": true,  "result": { ... } }

{ "ok": false, "error": {
    "code": "invalid_token",
    "message": "..."
} }

الفضاءات

هناك أربعة أنواع، ولكلٍّ بادئته. البادئة جزء من المعرّف ويجب ترميزها في الرابط.

النوعفي المسارالبادئةهل يظهر المُرسِل؟
قناةchannels#%23لا — تُنشر باسم القناة
مجموعةgroups@%40نعم
صفclasses%%25نعم
سنترالsantrals&%26نعم

نقاط النهاية

الطريقةالمسارالوظيفة
GET/v1/meلأي فضاء يعود هذا الرمز
GET/v1/{type}/{id}تفاصيل الفضاء
GET/v1/{type}/{id}/messagesسجل الرسائل
POST/v1/{type}/{id}/messagesنشر رسالة

السجل

الأحدث أولاً. الترقيم يعتمد seq لا الوقت — عدّاد تصاعدي يعطي ترتيباً قاطعاً حتى لرسالتين في اللحظة نفسها. مرّر next_cursor في before_seq للصفحة التالية؛ null يعني بلغتَ النهاية.

الطلب
GET /v1/channels/%231786551855736/messages
      ?limit=30&before_seq=42
الاستجابة
{
  "ok": true,
  "result": {
    "messages": [
      {
        "id": "a1b2c3",
        "text": "...",
        "seq": 42,
        "timestamp": 1788301362311
      }
    ],
    "next_cursor": 41
  }
}

البطاقات (منشور أنيق)

بدل النص الخام يمكنك إرسال «بطاقة» — نفس ما يبنيه التطبيق عبر «إنشاء بطاقة»: غلاف وعنوان ونص ورابط في إطار واحد أنيق.

أرسل card بدل text. لا يجتمعان؛ والنص المرافق للبطاقة يوضع في caption.

الحقلإلزامي؟الوصف
urlنعمالرابط الذي تفتحه البطاقة
titleلاعنوان البطاقة
descriptionلاالنص داخل البطاقة
imageلاالغلاف — يجب أن يكون رابط http/https كاملاً
captionلانص خارج البطاقة، بصوتك أنت

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

curl -X POST https://api.onpchat.ir/v1/groups/%401786579451315/messages \
  -H "Authorization: Bearer $ONP_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "card": {
      "url": "https://example.com/post",
      "title": "...",
      "description": "...",
      "image": "https://example.com/cover.jpg",
      "caption": "..."
    }
  }'

لا ترسل نسخاً مكرّرة

إذا انتهت مهلة الطلب فلن تعرف هل وصلت الرسالة. أرسل ترويسة Idempotency-Key حتى لا تُنشئ المحاولة الثانية رسالة مكرّرة:

المفتاح نفسه، الرسالة نفسها. ويصبح هذا المفتاح id الرسالة أيضاً.

Header
Idempotency-Key: order-2026-09-02-001

حدود الاستخدام

لكل رمز، في كل دقيقة:

العمليةالحد
نشر20
قراءة120

كل استجابة تحمل X-RateLimit-Limit وX-RateLimit-Remaining وX-RateLimit-Reset. وعند 429 تصلك Retry-After — انتظر تلك المدة، لا أقل.

الاستجابة
HTTP/2 429
X-RateLimit-Limit: 20
X-RateLimit-Remaining: 0
Retry-After: 37

الأخطاء

HTTPerror.codeالمعنى
400empty_messagetext فارغ
400bad_requestجسم أو معامل غير صالح
401missing_tokenلا توجد ترويسة Authorization
401invalid_tokenالرمز غير معروف
401revoked_tokenالرمز مُلغى
403entity_mismatchهذا الرمز يعود لفضاء آخر
403wrong_entity_kindنوع الفضاء في المسار لا يطابق الرمز
403missing_scopeالرمز لا يملك هذه الصلاحية
403sender_not_memberمُنشئ الرمز لم يعد عضواً في الفضاء
403read_onlyالقناة للقراءة فقط
404entity_not_foundالفضاء غير موجود
413message_too_longالنص أطول من ٨٠٠٠ حرف
429rate_limitedبلغتَ حد الاستخدام
يصلك sender_not_member؟ الرمز مرتبط بالمدير الذي أنشأه. إن غادر ذلك الشخص الفضاء توقّف النشر. الحل: يعيد أحد المديرين الحاليين توليد الرمز من اللوحة.

غير متوفر في هذه النسخة

إرسال الصور والملفات، وحذف الرسائل عبر الواجهة، و webhooks (إشعارك بأحداث الفضاء) لم تصل بعد. الرموز تحمل حقل scopes من الآن، فعند إضافة webhooks لن يُلغى رمزك.