إرسال الرسائل واستلامها
تنقلك هذه الجولة من مفتاح API إلى تدفق رسائل ثنائي الاتجاه يعمل: تُرسل رسالة صادرة، تتتبع تسليمها، وتستقبل الرد على خادمك. نستخدم SMS كمثال جارٍ؛ وينطبق نمط الخطوات الثلاث نفسه (إرسال → تتبع → استلام) على WhatsApp وRCS وViber والبريد الإلكتروني، كلٌ على نقطة نهاية خاصة به. ما ستفعله:المتطلبات المسبقة
- مفتاح API من الإعدادات → مفاتيح API. استخدم مفتاح sandbox (
dv_test_sk_…) أثناء البناء — إرسالات sandbox مجانية ومُحاكاة، وتُرجع إيصالات تسليم محددة مسبقاً بحيث تختبر مسارَي النجاح والفشل معاً. استبدل مفتاحًا حياً (dv_live_sk_…) عند الإنتاج. - رقم مُرسل قادر على الإرسال عبر القناة التي تستخدمها. بالنسبة إلى SMS هذا رقم مملوك لك يدعم SMS (ابحث عنه واشترِه عبر Numbers API، أو من Dashboard → Numbers). إذا حذفت
fromيختار Orbit مُرسِلًا مناسباً للوجهة. - عنوان HTTPS عام لخطوة الاستلام. أي أداة تمديد أنفاق (tunneling) تعمل أثناء التطوير.
X-API-Key.
1. إرسال رسالة
أرسل SMS باستخدامPOST /messages/sms. الحقول to وbody فقط مطلوبة؛ وfrom اختياري.
202 Accepted — تُحفظ الرسالة نهائياً وتُضاف إلى الطابور للتسليم، ولم تُسلَّم بعد إلى مشغل الشبكة. تعيش الحقول تحت data؛ ويحمل meta الـrequest_id الذي يجب عليك تسجيله لدعم العمليات.
id (msg_ متبوعاً بـ32 محرفاً سداسياً عشرياً) هو المقبض الذي تعتمد عليه كل المكالمات التابعة” — استعلامات الوضع، وويب هوكات التسليم، وأثر الرسالة كلها تعمل به. تضيف استجابات sandbox "test_mode": true إلى meta.
أرسل دائماً
Idempotency-Key عند الإرسال. إعادة تشغيل المفتاح نفسه والنص نفسهما خلال 24 ساعة تعيد الاستجابة الأصلية بدلاً من إرسال نسخة مكررة؛ وإعادة تشغيله بنص مختلف تعيد 409 IDEMPOTENCY_KEY_REUSED.القنوات الأخرى
كل قناة لها نقطة نهاية خاصة بها تحت بادئة/messages، وهيئة نص مُفَصَّلَة لتلك القناة. لا يوجد مسار واحد متعدد الأشكال بحسب القناة (polymorphic) — اختر نقطة النهاية المطابقة لقناتك:
2. تتبع التسليم
تتقدم الرسالة المعلَّقة في الطابور عبر دورة حياة من الحالات قبل الوصول إلى المستلم:id والحالة status الجديدة:
message.sent— قبِلها مشغل الشبكةmessage.delivered— تأكَّد تسليمها إلى الجهازmessage.failed— فشل نهائي (يُميِّز الـstatusفي الحمولة بينfailedوundeliveredوexpiredوsubmitted_no_receipt؛ ويحملerror_code/error_messageسبب المزود عند وجوده)
X-Orbit-Signature قبل الوثوق في أي حمولة، وأزل التكرارات باستخدام معرّف الحدث id — التسليم يُنفَّذ مرة واحدة على الأقل (at-least-once). راجع أمان webhooks لأجل مقتطف التحقق.
3. استلام الرسائل الواردة
عندما يردُّ شخص على رقمك (أو يراسله أولاً)، يسجِّل Orbit رسالة واردة و — إن كنت مشتركاً فيmessage.received في الخطوة السابقة — يُرسل POST إلى عنوان webhook لديك:
direction=inbound:
التوجيه الوارد تلقائي للأرقام المملوكة لك في Orbit — يُلتَقط أي رد على أرقامك المرسلة وباشتراك
message.received تُسلَّم إلى webhook الخاص بك. لا حاجة لربط عنوان وارد خاص لكل رقم.4. الرد على رسالة واردة
الرد هو مجرد إرسال آخر، موجَّه إلىfrom الوارد. بدِّل to وfrom وأعِد استدعاء POST /messages/sms مجدداً:
conversation_id في GET /messages.
الأخطاء الشائعة
كل خطأ يستخدم الهيئة نفسها — طابِق علىerror.code (ثابت بأحرف كبيرة)، وسجّل meta.request_id:
القائمة الكاملة: رموز الأخطاء.
الخطوات التالية
- مرجع Messaging API — كل نقطة نهاية وكل حقل رسالة
- دورة حيات حالة الرسالة — مجموعة الحالات الكاملة لكل قناة
- نظرة عامة على Webhooks — إعادات المحاولة، وضمانات التسليم، وفهرس الأحداث
- تكامل API — sandbox، وidempotency، والتصفّح، وSDKs عبر كل القنوات
- حدود المعدل — حدود لكل قناة ورؤوس إعادة المحاولة