الانتقال إلى المحتوى الرئيسي
هذه الواجهة قيد الإهمال لصالح واجهة /chat/send-chat-message API، وستتم إزالتها بحلول نهاية يناير 2026.

تدفق المحادثة البسيط

واجهة إرسال الرسالة البسيطة هي أسرع طريقة للتفاعل مع Gorbit برمجيًا. تحتوي نقطة النهاية هذه على معلمات مطلوبة أقل وتعيد حمولة JSON مختصرة موصوفة بواسطة ChatBasicResponse.
يجب تحديد إما chat_session_id أو persona_id في طلبك.
import requests

API_BASE_URL = "https://cloud.gorbit.app/api" # أو نطاقك الخاص
API_KEY = "YOUR_KEY_HERE"

headers = {
  "Authorization": f"Bearer {API_KEY}",
  "Content-Type": "application/json"
}

'''
- لإنشاء جلسة محادثة، راجع دليل تدفق المحادثة الكامل أدناه.
- للعثور على persona_id الخاص بك، راجع نقطة نهاية قائمة الوكلاء في مرجع واجهة برمجة تطبيقات الوكلاء.
'''

response = requests.post(
  f"{API_BASE_URL}/chat/send-message-simple-api",
  headers=headers,
  json={
    "message": "ما هو Gorbit؟",
    "persona_id": 0  # وكيل بحث Gorbit الافتراضي (int)
  }
)

data = response.json()
answer = data.get("answer")
answer_citationless = data.get("answer_citationless")
message_id = data.get("message_id")
docs = data.get("top_documents") or []
top_documents = [
  {
    "id": doc.get("document_id"),
    "title": doc.get("semantic_identifier"),
    "link": doc.get("link")
  } for doc in docs
]
cited_docs_map = data.get("cited_documents") or {}

print(f"الإجابة: {answer}")
print(f"الإجابة (بدون استشهادات): {answer_citationless}")
print(f"معرف الرسالة: {message_id}")
print(f"أهم المستندات: {top_documents[:5]}") # طباعة أهم 5 مستندات
print(f"خريطة الاستشهادات: {cited_docs_map}")

تدفق المحادثة المتقدم

نقطة النهاية /send-message هي ما تستخدمه واجهة Gorbit الأمامية لإرسال واستلام الرسائل. يتم بث الردود في حزم من كائنات JSON. لفهم تنسيق الاستجابة، راجع توثيق المفاهيم الأساسية.
1

تحضير طلبك

import requests

API_BASE_URL = "https://cloud.gorbit.app/api" # أو نطاقك الخاص
API_KEY = "YOUR_KEY_HERE"

headers = {
  "Authorization": f"Bearer {API_KEY}",
  "Content-Type": "application/json"
}
2

إنشاء جلسة محادثة

session_response = requests.post(
  f"{API_BASE_URL}/chat/create-chat-session",
  headers=headers,
  json={
    "persona_id": 0, # وكيل بحث Gorbit الافتراضي
    "description": "جلسة محادثة دليل Gorbit API"
  }
)

chat_session_id = session_response.json()["chat_session_id"]
3

إرسال رسالة

payload = {
  "chat_session_id": chat_session_id,
  "parent_message_id": None,
  "message": "ما هو Gorbit؟",
  "file_descriptors": [],
  "search_doc_ids": [],
  "retrieval_options": {}
}

# استهلاك الحزم المبثوثة بالكامل ثم طباعة ملخص
# ملاحظة: الحزمة الأولى تحتوي دائمًا على معرفات الرسائل:
#   {"user_message_id": int, "reserved_assistant_message_id": int}
with requests.post(
  f"{API_BASE_URL}/chat/send-message",
  headers=headers,
  json=payload,
  stream=True,
) as resp:
  resp.raise_for_status()

  full_text = []
  docs_raw = None
  citations_map = {}
  user_message_id = None
  reserved_assistant_message_id = None

  # كل سطر هو حزمة JSON: { ind: int, obj: { type: "...", ... } }
  for line in resp.iter_lines(decode_unicode=True):
    if not line:
      continue
    try:
      packet = json.loads(line)
    except Exception:
      continue

    # الحزمة الأولى: معرفات الرسائل
    if "user_message_id" in packet and "reserved_assistant_message_id" in packet:
      user_message_id = packet.get("user_message_id")
      reserved_assistant_message_id = packet.get("reserved_assistant_message_id")
      continue

    obj = packet.get("obj", {})
    ptype = obj.get("type")

    if ptype == "message_start":
      # تتضمن مستندات البحث النهائية حسب مواصفات API
      docs_raw = obj.get("final_documents") or docs_raw
    elif ptype == "message_delta":
      delta = obj.get("content", "")
      full_text.append(delta)
    elif ptype == "citation_delta":
      # تحديث خريطة الاستشهادات باستخدام أزواج citation_num -> document_id
      if isinstance(obj.get("citations"), list):
        for c in obj["citations"]:
          cnum = c.get("citation_num")
          did = c.get("document_id")
          if cnum is not None and did is not None:
            citations_map[str(cnum)] = str(did)
    elif ptype == "stop":
      break

# تحضير المستندات (id/title/link) إذا كانت موجودة
top_documents = []
if isinstance(docs_raw, list):
  for d in docs_raw:
    top_documents.append(
      {
        "id": d.get("document_id") or d.get("id"),
        "title": d.get("semantic_identifier") or d.get("title"),
        "link": d.get("link") or d.get("url"),
      }
    )

print("الإجابة النهائية:\n" + "".join(full_text))
if user_message_id is not None:
  print(f"\nمعرف رسالة المستخدم: {user_message_id}")
if reserved_assistant_message_id is not None:
  print(f"معرف رسالة المساعد المحجوز: {reserved_assistant_message_id}")
print("\nأهم المستندات:")
print(json.dumps(top_documents, indent=2))
print("\nخريطة الاستشهادات (citation_num -> document_id):")
print(json.dumps(citations_map, indent=2))

الخطوات التالية