WebhooksAPI

اعرف لحظة وصول المنشور، أو عدم وصوله

سجّل رابطًا مرة واحدة ويستدعيه FoPost كلما استقرت نتيجة تسليم. يحمل كل حدث معرّف المنشور والحساب والمنصة والرابط الدائم أو نص الخطأ، فيتفاعل نظامك دون استعلام متكرر.

POST /v1/webhooks
curl -X POST https://api.fopost.com/v1/webhooks \
  -H "X-API-Key: $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "workspaceId": "9b2f6c1e-...",
    "url": "https://yourbrand.com/hooks/social",
    "events": ["delivery.published", "delivery.failed", "post.published", "post.failed"]
  }'

يُطلَق عند الاستقرار

حدث واحد لكل تسليم إلى حساب، يُرسل فور تأكيد الشبكة أو رفضها.

موقّع

يحمل كل طلب ترويسة توقيع لتتحقق من أنه صادر منا.

يُعاد إرساله

أي استجابة غير 2xx تُعاد محاولتها مع تمهّل متزايد قبل التخلي عن الحدث.

الأحداث

أحداث تغطي دورة النشر كاملة

يُطلَق delivery.published حين تقبل شبكة تسليم حساب واحد، ويتضمن الرابط الدائم. ويُطلَق delivery.failed حين يتعذّر النشر، ويتضمن نص خطأ المنصة. أما post.published وpost.failed فيُطلَقان مرة واحدة لكل منشور، بعد استقرار نتيجة كل الحسابات.

اقرأ مرجع webhooks
delivery.published
{
  "event": "delivery.published",
  "data": {
    "postId": "7d3e0a52-...",
    "postAccountId": "a3c5e7f9-...",
    "accountId": "4a71d80b-...",
    "platform": "linkedin",
    "externalUrl": "https://linkedin.com/feed/update/..."
  },
  "timestamp": "2026-09-01T09:00:07Z"
}

delivery.published

الرابط الدائم، جاهز للتخزين أو للربط إليه من نظام إدارة المحتوى لديك.

delivery.failed

رسالة الخطأ الصادرة عن الشبكة نفسها، فتعالج السبب بدلًا من التخمين.

لكل مساحة عمل

ينتمي webhook إلى مساحة عمل واحدة ولا يرى إلا منشوراتها.

تحقّق

تحقّق من الحمولة قبل أن تتصرف بناءً عليها

يُوقَّع كل طلب بالسر الذي يُعاد إليك عند إنشاء webhook. احسب التوقيع على الجسم الخام، وقارنه بالترويسة، وارفض أي شيء لا يطابق. استجب بـ 2xx بسرعة ونفّذ العمل بعد ذلك.

اطّلع على التحقق من التوقيع
المعالج
app.post('/hooks/social', async (req, res) => {
  const signature = req.header(SIGNATURE_HEADER) // header name is in the docs;
  if (!verify(req.rawBody, signature, process.env.WEBHOOK_SECRET)) {
    return res.status(401).end();
  }
  const { event, data } = req.body;
  await queue.add(event, data);
  res.status(200).end();
});

ترويسة التوقيع

تحقّق بالسر الذي حصلت عليه عند الإنشاء. ولتدويره، أعد الإنشاء.

مختوم بالوقت

يتيح لك timestamp تجاهل الإعادات القديمة وترتيب الأحداث بشكل صحيح.

منع التكرار بالمعرّف

تحمل إعادات المحاولة معرّف الحدث نفسه، فيسهل تجاهل التسليم المزدوج.

الإدارة

أنشئ نقاط الاستقبال واعرضها واحذفها من الكود

Webhooks كائنات API عادية. أنشئ واحدًا لكل بيئة، واعرضها لمراجعة ما هو مسجّل، واحذف ما لم تعد تحتاجه. وجّهها إلى رابط staging أثناء التطوير وانتقل إلى الإنتاج بطلب واحد.

ابدأ البناء
عمليات أتمتة تعمل وفق جدول وعلى خلاصة وعبر الشبكات

عرض نقاط الاستقبال

تعرض GET /v1/webhooks كل رابط والأحداث المشترك فيها.

لكل بيئة

سجّل رابطًا منفصلًا لبيئة staging فلا تصل منشورات الاختبار إلى الإنتاج أبدًا.

صلاحية webhooks

إدارة نقاط الاستقبال تحتاج إلى صلاحية خاصة بها. ولا يستطيع مفتاح النشر وحده إضافة واحدة.

أسئلة حول Webhooks، مع إجاباتها

ما الأحداث المتاحة؟

أحداث المنشورات والتسليم والحسابات وصندوق الوارد والأتمتة. يُطلَق delivery.published وdelivery.failed مرة لكل حساب، فالمنشور على ثلاث شبكات ينتج ما يصل إلى ثلاثة منها، بينما يُطلَق post.published وpost.failed مرة واحدة لكل منشور.

كيف أتحقق من webhook؟

أنشئ webhook واحفظ السر من الاستجابة. احسب توقيعًا على جسم الطلب الخام بهذا السر وقارنه بترويسة التوقيع في كل طلب.

ماذا لو كانت نقطة الاستقبال لديّ متوقفة؟

أي استجابة غير 2xx أو انتهاء مهلة تُعاد محاولته مع تمهّل متزايد. استجب بـ 2xx بسرعة وعالج الحدث في الخلفية لتبقى ضمن المهلة بأمان.

هل يمكنني استقبال أحداث حساب واحد فقط؟

تحمل أحداث التسليم accountId والمنصة، فصفِّها من جهتك. Webhooks محصورة في مساحة عمل، لا في حساب بعينه.

هل يمكنني الاختبار دون نشر فعلي؟

وجّه webhook إلى رابط لالتقاط الطلبات وجدول منشورًا على حساب تجريبي. تبدو الأحداث متطابقة في كل بيئة.

هل أحتاج إلى webhooks أصلًا؟

لا. تُعيد GET /v1/posts/:id/deliveries الحالة نفسها عند الطلب. Webhooks توفّر عليك الاستعلام المتكرر.

ابنِ على Webhooks اليوم

البداية مجانية وواجهة API كاملة مُضمَّنة. أنشئ مفتاحًا ونفّذ أول طلب خلال دقائق.

احصل على مفتاح API