أرسل رسائل، استقبل أحداثًا، ابنِ على بنية تحتية حقيقية.
واجهة REST وwebhooks تعمل فعليًا في الإنتاج منذ v3.10.0
أرسل رسائل واتساب من كودك الخاص
endpoint واحد مصادَق عليه يرسل نصًا أو وسائط أو قوالب معتمدة من Meta من أي خلفية أو سكريبت أو تكامل تشغّله فعلاً — بدون الحاجة لـSDK منفصل، فقط طلب HTTP قياسي.
- endpoint واحد بطلب POST للنص والوسائط وإرسال القوالب
- مصادقة بمفتاح API محدد النطاق لفريقك
- يعمل من أي لغة قادرة على إرسال طلب HTTP
curl -X POST https://rabtcrm.com/api/v1/send \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instanceName": "sales-line",
"number": "201061711867",
"type": "text",
"message": "Your order #4021 has shipped."
}'احصل على إشعار لحظة حدوث أي شيء
اشترك بنقطة النهاية الخاصة بك في أحداث message.received وmessage.status. كل تسليم موقّع بـHMAC-SHA256 حتى تتحقق أنه جاء فعلاً من RABTCRM قبل الوثوق بالمحتوى.
- أنواع أحداث message.received وmessage.status
- توقيع HMAC-SHA256 في ترويسة X-RabtCRM-Signature لكل تسليم
- معرّف X-RabtCRM-Delivery ثابت لإزالة التكرار في المحاولات المعادة
import { createHmac } from "crypto";
// Verify an inbound webhook delivery from RABTCRM
function verifySignature(rawBody, signatureHeader, secret) {
const expected =
"sha256=" + createHmac("sha256", secret)
.update(rawBody, "utf8")
.digest("hex");
return signatureHeader === expected;
}
app.post("/webhooks/rabtcrm", (req, res) => {
const signature = req.headers["x-rabtcrm-signature"];
const deliveryId = req.headers["x-rabtcrm-delivery"]; // dedupe key
if (!verifySignature(req.rawBody, signature, WEBHOOK_SECRET)) {
return res.status(401).send("invalid signature");
}
// req.body.event === "message.received" | "message.status"
res.status(200).send("ok");
});تسليم مرة واحدة على الأقل، مدعوم بـoutbox حقيقي
تُكتب أحداث webhook في outbox دائم وتُعاد المحاولة تلقائيًا إذا كانت نقطة النهاية الخاصة بك متوقفة مؤقتًا — لا تفقد أحداثًا بسبب انقطاع لحظي، ويمكن إرسال القوالب بنفس طريقة النص والوسائط.
- نمط outbox دائم، وليس طلب HTTP يُرسل ويُنسى
- إعادة محاولة تلقائية عند فشل التسليم
- نفس endpoint الـ/v1/send يرسل القوالب والنص والوسائط
import requests
resp = requests.post(
"https://rabtcrm.com/api/v1/send",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"instanceName": "sales-line",
"number": "201061711867",
"type": "template",
"templateName": "order_confirmation",
"templateLanguage": "en",
"templateBodyVariables": ["4021", "3"],
},
)
resp.raise_for_status()
print(resp.json())ما الذي تحصل عليه
كل ما تقدمه واجهة المطورين ونظام webhooks
مبني على /v1/send ونظام webhooks الخارجي v3.10.0 — موقّع بـHMAC، دائم، مرة واحدة على الأقل.
أسئلة شائعة
أسئلة شائعة عن واجهة المطورين وWebhooks
Qكيف أرسل رسالة واتساب برمجيًا؟
عبر طلب POST إلى /api/v1/send مع مفتاح API الخاص بك، اسم الاتصال، الرقم، ونوع الرسالة (نص، وسائط، أو قالب). راجع كود عينة curl أعلاه.
Qكيف أتحقق من صحة webhook وارد؟
كل webhook موقّع بـ HMAC-SHA256 في ترويسة X-RabtCRM-Signature. احسب نفس التوقيع من جسم الطلب الخام باستخدام سر Webhook الخاص بك وقارنه — راجع كود عينة JavaScript أعلاه.
Qماذا يحدث إذا فشل استقبال endpoint الخاص بي لحدث webhook؟
يستخدم RABTCRM نمط outbox دائم مع تسليم "مرة واحدة على الأقل" — تتم إعادة محاولة التسليم تلقائيًا. استخدم ترويسة X-RabtCRM-Delivery كمفتاح لإزالة التكرار في نظامك.
Qهل يمكنني إرسال قوالب معتمدة عبر الـAPI؟
نعم — استخدم type: "template" مع اسم القالب ولغته ومتغيرات النص، كما في كود عينة Python أعلاه.