Webhook
تتيح لك Webhooks إرسال بيانات الرحلة إلى خدمات خارجية مثل التحليلات وأنظمة CRM وأدوات التسويق. يمكنك:
- إخطار الأنظمة الخارجية عندما يتخذ العميل إجراءً في الرحلة
- إرسال بيانات العملاء إلى أدوات التحليل
- تشغيل رسائل البريد الإلكتروني أو الرسائل القصيرة أو WhatsApp من جهات خارجية عند أحداث رحلة معينة
كيفية إعداد عنصر Webhook
Anchor link toإضافة عنصر Webhook
Anchor link toاسحب وأفلت عنصر Webhook إلى لوحة الرسم. ضع Webhook في أي مكان تريده، مع الأخذ في الاعتبار معلومات الرحلة التي سترسلها إلى خدمة جهة خارجية.

تسمية خطوة Webhook وتحديد عنوان URL ونوع الطلب
Anchor link toفي حقل STEP NAME، أدخل اسمًا للـ webhook. قد يكون من المفيد تسمية webhooks وفقًا للخدمات التي ترسل البيانات إليها أو حالة الاستخدام.
بعد ذلك، في حقل URL، حدد عنوان URL للطلب الذي يجب إرسال البيانات إليه. بجوار حقل URL، حدد نوع الطلب من القائمة المنسدلة REQUEST TYPE: GET أو POST.

تكوين الرؤوس (Headers)
Anchor link toفي قسم HEADERS، قم بتعيين نوع المحتوى.
بشكل افتراضي، نوع المحتوى هو application/json. إذا كانت الخدمة التي ترسل إليها الـ webhook تتطلب نوع محتوى آخر، فأدخل النوع المناسب في قيمة رأس Content-Type.
أمثلة على أنواع المحتوى هي:
x-www-form-urlencodedtext/plaintext/xml
أضف رؤوسًا إضافية إذا لزم الأمر بالنقر فوق + ADD HEADER. يمكنك إزالة أي رأس بالنقر فوق أيقونة ‘x’ بجواره.
أضف أي رأس مصادقة تتطلبه نقطة النهاية الخاصة بك، على سبيل المثال:
Authorization: Bearer <token>X-Api-Key: <key>Authorization: Basic <base64(user:pass)>
يتم دعم سر ثابت في رأس فقط. لا يتم دعم تدفقات تبادل رموز OAuth2 و mTLS وتوقيع الطلبات من جانب Pushwoosh. يمكنك أيضًا تقييد نقطة النهاية إلى عناوين IP الخاصة بـ Pushwoosh بدلاً من، أو بالإضافة إلى، سر الرأس. راجع عناوين IP الخاصة بـ Pushwoosh.
لمصادقة HTTP Basic على وجه التحديد، قم بما يلي:
- افتح محرر نصوص عادي واكتب اسم المستخدم وكلمة المرور بدون مسافات، مفصولة بنقطتين رأسيتين. على سبيل المثال:
<username>:<password> - قم بترميز هذه السلسلة إلى Base64.
- انسخ سلسلة Base64 الناتجة (على سبيل المثال،
<base64-encoded-string>). - في إعدادات webhook، أضف رأس Authorization بالقيمة:
Basic <base64-encoded-string>. تأكد من وجود مسافة بعد كلمة “Basic”.

تمييز قيمة رأس كسرية
Anchor link toانقر على أيقونة العين بجوار قيمة الرأس لإخفائها. يخفي Pushwoosh هذه القيمة في كل مكان قد تترك فيه الخدمة: في واجهة المستخدم، وفي استجابات API، وفي سجل إصدارات الرحلة.

- الإخفاء التلقائي. يتم إخفاء الرؤوس التي تبدو أسماؤها كبيانات اعتماد تلقائيًا، حتى لو لم تنقر أبدًا على أيقونة العين. وهذا يشمل
Authorization،Proxy-Authorization،Cookie،Set-Cookie، وأي اسم يحتوي علىtoken،secret،password،credential،auth، أوapi-key/api_key/apikey(بواصلة، أو شرطة سفلية، أو بدون فاصل). - تغيير قيمة مخفية. انقر في الحقل الذي يظهر
••••••••واكتب القيمة الجديدة. لا يوجد زر للكشف عن القيمة المخزنة. تظل أيقونة العين مقفلة أثناء عرض القناع. لإزالة علامة السر من رأس، اكتب قيمة جديدة أولاً، ثم انقر على الأيقونة. - إعادة تسمية رأس مخفي. إعادة تسمية رأس تظهر قيمته حاليًا كقناع يمسح تلك القيمة. أدخلها مرة أخرى تحت الاسم الجديد. إعادة تسمية رأس يحمل حاليًا قيمة كتبتها للتو يحتفظ بتلك القيمة.
إضافة نص طلب JSON
Anchor link toفي قسم DATA، أدخل نص طلب JSON الخاص بك. تأكد من أن نص الطلب بتنسيق JSON صحيح.
مثال:
{ "hwid": "{{device:hwid}}"}استخدام البيانات الديناميكية ووحدات الماكرو
Anchor link toتتيح لك لوحة DATA BUILDER إدراج معلومات ديناميكية (مثل بيانات المستخدم أو الجهاز أو العلامة أو الحدث) مباشرة في نص طلب JSON الخاص بك. باستخدام البيانات الديناميكية، يمكنك تضمين قيم خاصة بالمستخدم الفردي الذي يتقدم عبر الرحلة.
لهذا:
- حدد فئة. يمكنك سحب البيانات من ثلاث فئات:
-
الجهاز (Device): استخدم بيانات الجهاز عندما تحتاج إلى معلومات فنية مرتبطة بجهاز المستخدم.
-
العلامة (Tag): استخدم بيانات العلامة عندما تريد إرسال معلومات مخزنة في ملف تعريف المستخدم.
-
الحدث (Event): استخدم بيانات الحدث عندما يجب أن يرسل webhook القيم من الحدث المشغل للرحلة.
- حدد معلمة (على سبيل المثال، HWID، الفئة المفضلة، إلخ).
- يقوم Pushwoosh بإنشاء ماكرو يبدو كالتالي:
{{tag:Language}}- انسخ الماكرو والصقه في نص JSON الخاص بك في قسم DATA.
عندما يتم تشغيل webhook في رحلة حية، يستبدل Pushwoosh الماكرو تلقائيًا بالقيمة الفعلية لذلك المستخدم.

كتابة عناصر نائبة إضافية يدويًا
Anchor link toالعنصر النائب هو ماكرو تكتبه يدويًا بدلاً من إنشائه من فئة DATA BUILDER. تغطي لوحة DATA BUILDER فقط بيانات الجهاز (Device) و العلامة (Tag) و الحدث (Event). اكتب هذه العناصر النائبة مباشرة في قسم URL أو HEADERS أو DATA بدلاً من ذلك. لا تظهر في اللوحة:
| العنصر النائب | القيمة |
|---|---|
{{application_code}} | رمز التطبيق الخاص بالتطبيق الذي ينتمي إليه المسافر. |
{{traveler:id}} | المعرف الذي يخصصه Pushwoosh لهذا المسافر لتشغيل هذه الرحلة. |
{{journey:uuid}} | UUID الخاص بهذه الرحلة. |
{{journey:name}} | اسم هذه الرحلة. |
{{point:uuid}} | UUID الخاص بخطوة Webhook هذه. |
{{point:name}} | STEP NAME الخاص بخطوة Webhook هذه. |
{{event:name}} | اسم الحدث الذي أدى إلى دخول هذا المسافر إلى الرحلة. |
{{device:platform}} | منصة الجهاز، على سبيل المثال Android أو iOS. |
{{device:push_subscribed}} | ما إذا كان المسافر مشتركًا في إشعارات الدفع — true أو false. |
{{now}} | التاريخ والوقت الحاليان، ISO 8601، UTC. |
{{now:unix_ms}} | الوقت الحالي بالمللي ثانية يونكس. |
{{tags:all}} | كل قيمة علامة لجهاز المسافر، ككائن JSON واحد. استخدمه بدون علامات اقتباس، على سبيل المثال "user_properties": {{tags:all}}. وضعه بين علامات اقتباس يحول الكائن إلى سلسلة مهربة بدلاً من ذلك. |
الحفاظ على نوع العنصر النائب في نص JSON
Anchor link toيصبح العنصر النائب داخل علامات الاقتباس دائمًا سلسلة JSON، بغض النظر عن نوع القيمة الفعلي. نفس العنصر النائب بمفرده، بدون علامات اقتباس حوله، يحتفظ بنوع القيمة الخاص به بدلاً من ذلك: يبقى الرقم رقمًا، وتبقى true/false قيمة منطقية، وتصبح القائمة مصفوفة JSON. يجب أن يكون العنصر النائب غير المقتبس هو القيمة الكاملة للحقل — يعمل "age": {{tag:Age}}، لكن "note": prefix{{tag:Age}}suffix لا يعمل، لأن كل شيء خارج علامات الاقتباس يُكتب تمامًا كما هو مكتوب والأحرف الإضافية تكسر JSON.
{ "age": {{tag:Age}}, "age_as_text": "{{tag:Age}}"}هنا يرسل age القيمة الرقمية للعلامة (34)، بينما يرسل age_as_text السلسلة "34". استخدم أيهما يتوقعه الحقل في الطرف المتلقي. إذا لم يكن للعلامة قيمة، فإن العنصر النائب غير المقتبس لا يزال يحل إلى سلسلة فارغة، وليس رقمًا أو false. راجع الملاحظة تحت إضافة نص طلب JSON.
تعيين بيانات استجابة webhook للمتغيرات
Anchor link toبالإضافة إلى إرسال البيانات، يمكن لخطوة Webhook الاحتفاظ بالقيم من الرد الذي ترسله خدمتك. أنت تعطي كل قيمة اسمًا (Attribute). يمكن للخطوات اللاحقة استخدام هذا الاسم بنفس الطريقة التي تستخدم بها قيم استجابة webhook الأخرى. على سبيل المثال، قم بتعيين علامة باستخدام تحديث ملف تعريف المستخدم، أو جدولة تأخير زمني من تاريخ أعادته الخدمة. للحصول على مثال كامل للرحلة، راجع استخدام بيانات استجابة webhook في رحلتك.
مثال: يعيد CRM معرف مستخدم. تقوم بتخزينه كـ Attribute crm_user_id. ثم يقوم تحديث ملف تعريف المستخدم بكتابته إلى علامة.
قبل أن تقوم بتعيين أي شيء، احصل على استجابة عينة واحدة من الخدمة. اسأل المطور الخاص بك، أو افتح مكالمة ناجحة في سجل المكالمات (Calls log) بعد اختبار وانظر إلى نص الاستجابة. تحتاج إلى أسماء الحقول من ذلك الرد لبناء Path.
في قسم RESPONSE MAPPING، انقر فوق + ADD MAPPING واملأ حقلين لكل قيمة تريد التقاطها:
- المسار (Path): موقع القيمة داخل نص استجابة JSON، مع نقاط بين المستويات
- السمة (Attribute): الاسم الذي ستستخدمه لاحقًا في الرحلة

على سبيل المثال، إذا استجاب CRM الخاص بك بـ:
{ "data": { "user": { "id": "789xyz" } }}- قم بتعيين Path إلى
data.user.id. - قم بتعيين Attribute إلى
crm_user_id.
بعد أن يجتاز المستخدم هذه الخطوة، يمكن للعناصر اللاحقة اختيار Attribute crm_user_id بنفس الطريقة التي تختار بها قيم استجابة webhook الأخرى.
لا يمكن لـ تقسيم الشرط (Condition split) استخدامها مباشرة. قيم webhook المعينة ليس لها نوع. احفظ القيمة كعلامة أولاً، ثم تفرع بناءً على تلك العلامة. راجع مقارنة قيمة webhook في تقسيم الشرط.
لحقل واحد، يعمل Path والقيم على النحو التالي:
تعيين كل عنصر في مصفوفة
Anchor link toفي بعض الأحيان، لا تحتوي استجابة webhook على قيمة واحدة فقط. بل تحتوي على قائمة، مثل كل منتج في طلب، أو كل عنصر في عربة تسوق، أو كل نتيجة من بحث. عادةً ما يلتقط تعيين الاستجابة قيمة واحدة لكل حقل، لذا بدون هذا ستحصل فقط على قيمة واحدة معينة من تلك القائمة، وسيتم فقدان الباقي.
ضع * في حقل Path حيث توجد القائمة. ثم يلتقط Pushwoosh قيمة من كل عنصر في القائمة، وليس فقط من موضع واحد. على سبيل المثال، إذا كانت القائمة تسمى items وكل عنصر يحتوي على item_name، فقم بتعيين Path إلى items.*.item_name.
في RESPONSE MAPPING، انقر فوق + ADD MAPPING واملأ الحقلين كالمعتاد، مع * لتحديد القائمة:
- المسار (Path): موقع القيمة داخل الاستجابة، مع
*حيث توجد القائمة. مثال:items.*.item_name. - السمة (Attribute): الاسم الذي ستستخدمه لاحقًا. ما تكتبه هنا يقرر كيف ستحصل على النتائج:
- قم بتضمين
{n}في الاسم، على سبيل المثالitem_{n}، للحصول على كل عنصر كقيمة خاصة به، مرقمة من 1:item_1،item_2،item_3، وهكذا. يمكن أن يكون{n}في أي مكان في الاسم، على سبيل المثالitem_{n}_sku. - اترك
{n}خارجًا، على سبيل المثالitem_names، لدمج كل عنصر في قيمة واحدة، مفصولة بفواصل:Sofa, Lamp, Rug.
- قم بتضمين

تبدأ مواضع قائمة المسار من 0 (items.0.item_name هو العنصر الأول). تبدأ أسماء السمات المبنية بـ {n} من 1 (item_1 هو ذلك العنصر الأول). هذان ترقيمان مختلفان.
إذا كنت تحتاج فقط إلى عنصر واحد من القائمة، فاستخدم رقمًا في Path بدلاً من *، على سبيل المثال items.0.item_name.
مثال
Anchor link toإذا استجاب CRM الخاص بك بـ:
{ "items": [ { "item_name": "Sofa" }, { "item_name": "Lamp" }, { "item_name": "Rug" } ]}- قم بتعيين Path إلى
items.*.item_nameو Attribute إلىitem_{n}للحصول على ثلاث قيم منفصلة:item_1هو Sofa، وitem_2هو Lamp، وitem_3هو Rug. - قم بتعيين Attribute إلى
item_namesبدلاً من ذلك للحصول على قيمة واحدة:item_namesهوSofa, Lamp, Rug.
يمكنك استخدام القيم المعينة لاحقًا في الرحلة مثل أي سمة استجابة webhook أخرى:
- تحديث ملف تعريف المستخدم: حفظ قيمة إلى علامة
- تأخير زمني: الانتظار حتى تاريخ من الاستجابة
- المحتوى الديناميكي: تخصيص محتوى الرسالة
لا يمكن لـ تقسيم الشرط (Condition split) استخدامها مباشرة. قيم webhook المعينة ليس لها نوع. احفظ القيمة كعلامة أولاً، ثم تفرع بناءً على تلك العلامة. راجع مقارنة قيمة webhook في تقسيم الشرط.
المهلة، وإعادة المحاولة، والطلبات الفاشلة
Anchor link toينتظر Pushwoosh لمدة تصل إلى 10 ثوانٍ للحصول على استجابة. تقتصر خطوة Webhook بأكملها، بما في ذلك إرسال الطلب ومعالجة الاستجابة، على 30 ثانية.
إعادة المحاولة
Anchor link toعند استجابة 500 أو 502 أو 503 أو 504، أو خطأ في الشبكة مثل فشل الاتصال، يعيد Pushwoosh محاولة الطلب مرة واحدة قبل الاستسلام. لا يتم إعادة محاولة الطلب الذي تنتهي مهلته — راجع ماذا يحدث عند فشل الطلب أدناه. لا يتم إعادة محاولة أي استجابة أخرى غير 2xx أيضًا.
حدود المعدل
Anchor link toيحد Pushwoosh من عدد طلبات webhook التي يمكن للحساب إرسالها في الثانية. تم تحديد الحد بشكل جيد فوق ذروات حركة المرور الحقيقية، لذلك لا تتأثر الرحلات العادية. ينتظر الاندفاع الذي يتجاوزه لفترة وجيزة للحصول على مساحة قبل الفشل.
فترة تهدئة نقطة النهاية
Anchor link toإذا فشلت نقطة النهاية عدة مرات متتالية، يتوقف Pushwoosh عن إرسال طلبات إليها لفترة من الوقت بدلاً من إعادة محاولة نقطة نهاية معطلة على كل مسافر، بدءًا من 30 ثانية وتتضاعف عند الفشل الإضافي حتى 5 دقائق. يمسح طلب ناجح واحد هذا ويستأنف التسليم العادي.
ماذا يحدث عند فشل الطلب
Anchor link toلا يحتوي عنصر Webhook على فرع منفصل للطلبات الفاشلة. أي مما يلي يسقط المسافر من الرحلة في هذه الخطوة:
| السبب | ما الذي يثيره |
|---|---|
| عنوان نقطة النهاية محظور | عنوان URL خاص أو داخلي أو استرجاعي أو محلي للارتباط، بما في ذلك نقاط نهاية البيانات الوصفية السحابية |
| حد المعدل | تم تجاوز حد طلبات webhook للحساب في الثانية ولم تفتح مساحة خلال الانتظار القصير |
| فترة تهدئة نقطة النهاية | فشلت نقطة النهاية عدة مرات متتالية ويقوم Pushwoosh بتخطيها مؤقتًا |
| المهلة | لا توجد استجابة في غضون 10 ثوانٍ، أو تتجاوز الخطوة سقفها البالغ 30 ثانية |
| خطأ في الشبكة | لم يتمكن الطلب من الوصول إلى نقطة النهاية على الإطلاق |
| استجابة غير 2xx | أعادت نقطة النهاية حالة خطأ لم تتم إعادة محاولتها، أو تمت إعادة محاولتها مرة واحدة وفشلت مرة أخرى |
راجع خطأ في الطلب.
إذا كنت لا تستطيع تحمل خسارة المسافرين هنا، فاجعل نقطة النهاية الخاصة بك تعيد دائمًا استجابة 2xx وضع أي حالة فشل في نص الاستجابة بدلاً من ذلك، على سبيل المثال كقيمة يمكن لـ تعيين الاستجابة التقاطها.
ينطبق هذا على كل خطوة Webhook، بما في ذلك تلك التي تم إنشاؤها سابقًا. سيبدأ عنوان نقطة النهاية الذي يطابق الآن قاعدة العنوان المحظور أعلاه في الفشل بنفس الطريقة.
على عكس الطلب الفاشل، فإن الاستجابة التي تصل ولكن لا يتم تعيينها بشكل نظيف، مثل JSON غير صالح، أو Path غير محلول، أو نص يزيد عن 64 كيلوبايت، لا تسقط المسافر. راجع الملاحظة تحت تعيين الاستجابة أعلاه.
اختبار Webhook
Anchor link toانقر فوق Test webhook للتحقق من أن تكوين webhook الخاص بك صحيح وأن الطلب يتم إرساله بنجاح.
إذا كان الرأس لا يزال يظهر القناع المخزن، يقوم Pushwoosh بملء القيمة الحقيقية المحفوظة لطلب الاختبار. لا تظهر القيمة أبدًا في متصفحك.
يعمل هذا الاستبدال فقط لرأس تم حفظه بالفعل في هذه الخطوة بالضبط. الخطوة التي لم تحفظها بعد، أو التي نسختها للتو، ليس لها قيمة محفوظة خلف القناع، لذلك يرسل Pushwoosh طلب الاختبار بدون هذا الرأس.
بعد اختبار ناجح (أو مكالمة حية)، افتح Calls log، وقم بتوسيع الصف، وقارن نص الاستجابة بكل Path. يجب أن يوجد الحقل تمامًا كما في Path. إذا نجح الطلب ولكن خطوة لاحقة ليس لها قيمة، فعادةً ما لا يتطابق Path مع الاستجابة. لن تظهر خطوة Webhook خطأ لذلك.
حفظ التكوين الخاص بك
Anchor link toانقر فوق Save لحفظ تكوين webhook الخاص بك.
سجل المكالمات (Calls log)
Anchor link toافتح علامة التبويب Calls log في درج النقطة لترى ما أرسله Pushwoosh بالفعل لهذه الخطوة: الوقت، والمستخدم، والنتيجة، والمدة، بالعودة إلى 30 يومًا.
قم بالتصفية حسب النتيجة (Success، HTTP error، No response) أو ابحث عن طريق User ID أو HWID الدقيق. انقر فوق صف لتوسيعه ورؤية الطلب (الطريقة، وعنوان URL، والنص) و، اعتمادًا على النتيجة، إما الاستجابة (الحالة والنص) أو نص الخطأ. تغطي Duration الخطوة بأكملها، بما في ذلك الوقت الذي يقضيه في إعادة المحاولة التلقائية.