> ## Documentation Index
> Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# استخدم polling وwebhooks لتوليد الفيديو

> تتبّع توليد الفيديو في CometAPI باستخدام polling وwebhooks عبر تخزين معرّفات المهام، والتحقق من حالة المهمة، ومعالجة حالات فشل تسليم callback.

استخدم polling كأساس لتوليد الفيديو لأن كل مهمة async تُرجع task ID يمكنك الاستعلام عنه. أضف webhooks فقط عندما تدعم نقطة نهاية الفيديو المحددة callback URLs، واحتفظ بـ polling كمصدر الحقيقة في حالات callback الفائتة أو التسليم الخاص بمزوّد معيّن.

## أنشئ مهمة فيديو

ينشئ الطلب التالي مهمة فيديو بسيطة ويخزّن المعرّف المُعاد. أضف حقول المدة أو الدقة أو callback فقط عندما توثّق صفحة النموذج المحدد هذه الحقول.

```bash theme={null}
curl https://api.cometapi.com/v1/videos \
  -H "Authorization: Bearer $COMETAPI_KEY" \
  -F "model=doubao-seedance-2-0" \
  -F "prompt=A cinematic shot of a paper airplane crossing a desk"
```

تتضمن الاستجابة task ID وحالة:

```json theme={null}
{
  "id": "task_example",
  "task_id": "task_example",
  "object": "video",
  "model": "doubao-seedance-2-0",
  "status": "queued",
  "progress": 0,
  "created_at": 1779872000
}
```

## استطلاع الحالة

يفحص الطلب التالي حالة مهمة الفيديو:

```bash theme={null}
curl https://api.cometapi.com/v1/videos/task_example \
  -H "Authorization: Bearer $COMETAPI_KEY"
```

تتغير الاستجابة مع تقدم المهمة. قد تتضمن الاستجابات المكتملة `video_url` عندما يحتوي model adapter على result URL؛ وإلا فاستخدم حقول النتائج الخاصة بالنموذج أو مسار المحتوى `/v1/videos/{id}/content` عندما يدعم ذلك النموذج التنزيلات عبر proxy.

```json theme={null}
{
  "id": "task_example",
  "object": "video",
  "model": "doubao-seedance-2-0",
  "status": "completed",
  "progress": 100,
  "completed_at": 1779872300,
  "video_url": "<generated-video-url>"
}
```

## استقبل webhook

لا يعرّف CometAPI حمولة callback موحّدة واحدة لكل نماذج الفيديو. تعامل مع callbacks على أنها أحداث تمرير مباشر خاصة بالمزوّد، وخزّن body الخام، وطابق الحالة النهائية باستخدام polling.

يعالج معالج Express التالي callback للفيديو ويخزّن الحدث:

```javascript theme={null}
import express from "express";

const app = express();
app.use(express.json({ limit: "2mb" }));

app.post("/cometapi/video-webhook", async (request, response) => {
  const event = request.body;

  console.log("Task ID:", event.task_id || event.id);
  console.log("Status:", event.status);

  response.status(200).json({ received: true });
});

app.listen(3000);
```

تتضمن حمولة callback عادةً هوية المهمة وحقول الحالة، لكن البنية الدقيقة تعتمد على النموذج أو المزوّد المحدد:

```json theme={null}
{
  "task_id": "task_example",
  "status": "completed",
  "progress": 100,
  "result": {
    "video_url": "https://example.com/result.mp4"
  }
}
```

## الأخطاء الشائعة

| الخطأ                         | الحل                                                                                                                                   |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| فقدان callback                | استخدم polling بواسطة task ID حتى يخزّن تطبيقك حالة نهائية.                                                                            |
| تكرار callback                | اجعل معالجة callback idempotent باستخدام task ID.                                                                                      |
| رفض callback                  | أرجِع استجابة `2xx` بسرعة، ثم عالج المهمة في الخلفية.                                                                                  |
| عدم تطابق حمولة خاصة بالمزوّد | خزّن حمولة callback الخام وقم بتطبيعها داخل تطبيقك.                                                                                    |
| غياب `video_url`              | تعامل مع `video_url` على أنه اختياري واستخدم polling بالإضافة إلى حقول النتائج الخاصة بالنموذج أو `/v1/videos/{id}/content` عند توفره. |

## روابط ذات صلة

* [نماذج الفيديو](/api/video)
* [إنشاء فيديو](/api/video/sora-2/create)
* [استرجاع فيديو](/api/video/sora-2/retrieve)
* [صفحة النماذج](/ar/overview/models)
* [دليل النماذج](https://www.cometapi.com/models/)
* [الأسعار](https://www.cometapi.com/pricing/)

<script type="application/ld+json">
  {`
    {
    "@context": "https://schema.org",
    "@graph": [
      {
        "@type": "TechArticle",
        "@id": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation",
        "headline": "كيف أستخدم webhooks وpolling لإنشاء الفيديو؟",
        "description": "استخدم polling وwebhooks لإنشاء الفيديو عبر CometAPI من خلال تخزين معرّفات المهام، والتحقق من حالة المهمة، والتعامل مع حالات فشل تسليم callback.",
        "url": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation",
        "author": {
          "@type": "Organization",
          "name": "CometAPI"
        },
        "publisher": {
          "@type": "Organization",
          "name": "CometAPI",
          "url": "https://www.cometapi.com"
        }
      },
      {
        "@type": "BreadcrumbList",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "name": "مستندات CometAPI",
            "item": "https://apidoc.cometapi.com/"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "الأدلة",
            "item": "https://apidoc.cometapi.com/guides/use-cometapi-with-openai-sdk"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "كيف أستخدم webhooks وpolling لإنشاء الفيديو؟",
            "item": "https://apidoc.cometapi.com/guides/webhook-and-polling-for-video-generation"
          }
        ]
      }
    ]
    }
    `}
</script>
