Events panel
تابع كل حدث webhook حسابك أنتجه، وادخل بالتفصيل على التسليمات والمحاولات، وأعد إرسال أي واحد منهم.
تاب Events هو أداة المطوّر اللي هتقضي فيها أكتر وقت بمجرد ما تربط الـ webhooks. بيعرض كل حدث حسابك أنتجه، وكل محاولة تسليم لكل نقطة نهاية، وطلب ورد كل محاولة. وإعادة الإرسال اليدوية (Resend) موجودة هنا كمان.
افتح التاب
اضغط أيقونة webhook اللي في القائمة أسفل يمين لوحة التحكم. الـ Workbench بيفتح على تاب Events. لميكانيكية الدرج (السحب، الشاشة الكاملة، الإغلاق) وجولة على باقي التابات، شوف مقدمة الـ Workbench.
القائمة بتظهر مفلترة مسبقًا على أحداث آخر 24 ساعة. غيّر الفلتر أو امسحه (في القسم اللي جاي) علشان تبصّ أبعد.
فلتر القائمة
الهيدر اللي فوق القائمة فيه أربع فلاتر وزرار مسح.
| الفلتر | بيقبل إيه | ملاحظات |
|---|---|---|
| Event ID | معرّف evt_* بالظبط | استخدمه لما يكون عندك معرّف من سطر سجل وعايز توصّله على طول. |
| Date | آخر N ساعة / يوم، في يوم معيّن، أو بين تاريخين | افتراضيًا آخر 24 ساعة. وسّع النطاق علشان تبصّ أبعد. |
| Event Type | نوع حدث بالظبط أو wildcard | افتح الـ popover، ابحث، اختار. الـ wildcards بتطابق مورد بالكامل. |
| Resource | معرّف مورد بالظبط زي pi_test_... أو cs_test_... | خانة اختيارية Include related resources بتضمّ الأحداث الخاصة بالكائنات المرتبطة بالمعرّف ده (مثلًا الـ Charges والـ Refunds اللي تحت Payment Intent). |
الـ wildcards في فلتر Event Type شكلها زي customer.*، charge.*، refund.*. اختيار customer.* بيعرض كل أحداث العميل بغض النظر عن النوع الفرعي. الـ popover بيطلّع الـ wildcards في أول القائمة، وأنواع الأحداث المحدّدة مجمّعة حسب المورد تحتها.
الفلاتر بتتركّب مع بعض. type=charge.* + date=last 24 hours + resourceId=pi_test_xyz + Include related بيحصر القائمة في "كل أحداث الـ charge في آخر يوم على الـ Payment Intent ده أو فروعه".
زرار Clear بيظهر بمجرد ما تظبط أي فلتر. العدد الكلي على اليمين (مثلًا 42 events) بيعكس الفلتر الحالي.
قائمة الأحداث
الأحداث متعروضة من الأحدث للأقدم، مجمّعة تحت عناوين التواريخ. كل صف بيحمل:
- نوع الحدث (مثلًا
checkout.session.completed). - وصف من سطر واحد مستخرَج من حمولة الحدث.
- شارة صغيّرة بعدد وأيقونة webhook لما يكون للحدث تسليمات معلّقة (طايرة أو بتعيد المحاولة). مفيدة في رصد التسليمات اللي لسه ما وصلتش.
- توقيت على اليمين. مرّر عليه بالماوس علشان تشوف الوقت المطلق.
اضغط على صف علشان تدخل بالتفصيل على تفاصيل الحدث. استخدم Load more في آخر القائمة علشان تتصفّح التاريخ.
عنوان الصف لما يكون أحمر معناه إن الحدث كان فشل (*.failed / *.error).
تفاصيل الحدث
لوحة التفاصيل بتعرض نفس البيانات اللي كنت هتشوفها على السلك، زائد حالة التسليم لكل نقطة نهاية مشتركة في الحدث.
الهيدر فيه نوع الحدث كعنوان ومعرّف evt_* كسطر فرعي بخط ثابت العرض (mono-spaced).
تحت كده، شريط بيانات وصفية فيه:
| الحقل | يعني إيه |
|---|---|
| Origin date | إمتى الحدث اتسجّل أول مرة. الثانية بالظبط اللي الكيان أطلقه فيها. |
| API version | إصدار الـ API المستخدَم في عرض data.object. |
| Source ID | الـ id بتاع المورد اللي الحدث بيخصّه (cs_*، pi_*، re_*، إلخ). |
| Source type | نوع المورد. نفس قيمة data.object.object في الحمولة. |
بعدها قسم Deliveries to webhook endpoints فيه تلات تابات فلترة (All، Succeeded، Failed) وأكورديون لكل نقطة نهاية استلمت الحدث. التسليمات الفاشلة واللي بتعيد المحاولة بتتوسّع تلقائيًا.
في الأسفل، عارض Event data بإبراز بناء الجملة (syntax-highlighted) بيعرض الـ data.object كامل بالظبط زي ما اتسلّم.
التسليمات والمحاولات
قسم التسليمات بيجمّع الصفوف حسب رابط نقطة النهاية. الصف الواحد بيغطي كل التسليمات لرابط واحد، شامل التسليم الأصلي وأي ضغطات Resend لاحقة على نقطة النهاية دي. الصف بيلمّ الزحمة علشان تشوف مدخل واحد لكل نقطة نهاية لكل حدث.
كل صف تسليم بيحمل:
- شارة حالة (نجاح، إعادة محاولة، أو فشل) زائد آخر كود حالة HTTP.
- رابط نقطة النهاية.
- عدد المحاولات.
- يا إما وقت إعادة المحاولة الجاية (لو بتعيد المحاولة) أو توقيت آخر محاولة.
- زرار Resend.
وسّع الصف (أو هو بيتوسّع تلقائيًا لما يكون فشل/بيعيد المحاولة) علشان تشوف المحاولات الفردية.
| حقل المحاولة | يعني إيه |
|---|---|
| شارة حالة HTTP | بلون مميّز: أخضر لـ 2xx، أحمر لأي حاجة تانية. |
| نص النتيجة | "Delivered successfully" عند النجاح، أو محتوى الرد أو رسالة الخطأ عند الفشل. |
| رقم المحاولة | Attempt #1، #2، إلخ. المحاولة الأولى هي الإرسال الأصلي؛ الأرقام اللي بعدها إعادات محاولة تلقائية على نفس التسليم. |
| زمن الرد | زمن الذهاب والعودة بالميلي ثانية. |
| الملاحظة | "Retried automatically" للمحاولات اللي بعد #1 على التسليم الأصلي، أو "Resent manually" للمحاولات اللي جت من ضغطة Resend. |
| التوقيت | إمتى المحاولة اتبعتت. |
اضغط على محاولة علشان تفتح لوحة Delivery attempt: ترويسات الطلب، ومحتوى الطلب، وحالة الرد، وترويسات الرد، ومحتوى الرد، وزمن الرد. مفيدة علشان تقارن اللي معالِجك استلمه فعلًا باللي كنت متوقّعه.
محتوى الطلب والرد لكل محاولة بيتخزّن لمدة 90 يوم. المحاولات الأقدم بتفضل بتعرض صف الملخص بتاعها (حالة HTTP، ورقم المحاولة، والتوقيت) جوّه أكورديون التسليم، لكن الضغط عليها مش هيعرض حمولات الطلب والرد الكاملة. الأحداث نفسها وسجلات التسليم اللي حواليها مش بتتمسح؛ اللي بيتشال بس هو محتوى تفاصيل كل محاولة.
أعد إرسال حدث
اضغط زرار Resend على أي صف تسليم. XPay بينشئ تسليم جديد لنفس رابط نقطة النهاية بنفس الحمولة، مع timestamp جديد لـ t، وتوقيع جديد. معالِجك بيستلم POST جديد.
الإعادات اليدوية لقطة واحدة (single-shot): لو معالِجك رجّع رد مش 2xx على إعادة، XPay مش هيعيد المحاولة. اضغط Resend تاني لما تكون جاهز لمحاولة تانية. الإعادات مش بتغيّر حالة التسليم الأصلي؛ بتظهر كمحاولة جديدة مجمّعة تحت نفس رابط نقطة النهاية.
لدورة الحياة (إعادات المحاولة التلقائية مقابل الإعادات اليدوية، وعدم التكرار على event.id)، شوف الإعادة وإعادات المحاولة.
دورة debug نموذجية
- شغّل الإجراء اللي بينتج الحدث (دفعة اختبار، استرداد، إلخ).
- افتح الـ Workbench، ولاقي الحدث في قائمة Events.
- افتح لوحة تفاصيله وبصّ على التسليم الفاشل: محتوى الرد والترويسات هيقولولك معالِجك رجّع إيه.
- صلّح المعالِج، وأعد النشر.
- اضغط Resend على التسليم الفاشل.
- اتفرّج على المحاولة الجديدة وهي بتوصل بنجاح.
مش محتاج تاخد دفعة اختبار جديدة علشان تتأكد من الإصلاح. الإعادات بتستخدم الحمولة المخزّنة للحدث الأصلي، فأي حدث لسه في القائمة ممكن يتعاد إدخاله لمعالِج متصلّح.
رايح فين بعد كده
الإعادة وإعادات المحاولة
جدول إعادات المحاولة التلقائية، وعقد الإعادات اليدوية، ونمط عدم التكرار على event.id.
التحقق من التواقيع
خلّي كل إعادة بتضغطها هنا تعدّي التحقق. HMAC-SHA256 على المحتوى الخام، بنفس السرّ بتاع الأصلي.
إعداد نقطة نهاية
أضِف أو عدّل رابط نقطة النهاية اللي تاب Events بيسلّم ليه.
مرجع الأحداث
كل حدث هتشوفه في القائمة دي، وإمتى بيتطلق، والكائن اللي بيحمله.