# Webhook

<Aside type="caution" icon="setting" title="تحتاج إلى مساعدة المطور">
 ستحتاج إلى مساعدة فريق المطورين لديك لتكوين عنصر Webhook. شارك هذا الدليل معهم للبدء.
</Aside>

تتيح لك Webhooks إرسال بيانات الرحلة إلى خدمات خارجية مثل التحليلات وأنظمة CRM وأدوات التسويق. يمكنك:

* إخطار الأنظمة الخارجية عندما يتخذ العميل إجراءً في الرحلة
* إرسال بيانات العملاء إلى أدوات التحليل
* تشغيل رسائل بريد إلكتروني أو SMS أو WhatsApp من جهات خارجية عند وقوع أحداث معينة في الرحلة

<Aside type="note">
اطلع على بعض الأمثلة حول كيفية تنفيذ webhooks لحالات استخدام وخدمات مختلفة: [أمثلة تكامل Webhook](/ar/developer/guides/customer-journey/webhook-samples/)
</Aside>

## كيفية إعداد عنصر Webhook 
### إضافة عنصر Webhook
اسحب وأفلت عنصر **Webhook** إلى لوحة العمل. ضع **Webhook** في أي مكان تريده، مع الأخذ في الاعتبار معلومات الرحلة التي سترسلها إلى خدمة خارجية.

<img src="/journey-elements-README-40.webp" alt="عنصر Webhook على لوحة العمل مع إعدادات الاسم والطلب"/>

### تسمية خطوة Webhook وتحديد عنوان URL ونوع الطلب
في حقل **STEP NAME**، أدخل اسمًا لـ webhook. قد يكون من المفيد تسمية webhooks وفقًا للخدمات التي ترسل البيانات إليها أو حالة الاستخدام.

بعد ذلك، في حقل **URL**، حدد عنوان URL للطلب الذي يجب إرسال البيانات إليه. بجوار حقل URL، حدد نوع الطلب من القائمة المنسدلة **REQUEST TYPE**: `GET` أو `POST`.
<img src="/journey-elements-webhook-1.webp" alt="واجهة تكوين Webhook تظهر حقل URL والقائمة المنسدلة REQUEST TYPE لاختيار طريقة GET أو POST"/>
### تكوين الرؤوس (Headers)
في قسم **HEADERS**، قم بتعيين نوع المحتوى. 

بشكل افتراضي، نوع المحتوى هو **application/json**. إذا كانت الخدمة التي ترسل إليها webhook تتطلب نوع محتوى آخر، فأدخل النوع المناسب في قيمة رأس **Content-Type**. 

أمثلة على أنواع المحتوى هي:

* `x-www-form-urlencoded`
* `text/plain`
* `text/xml`

أضف رؤوسًا إضافية إذا لزم الأمر بالنقر فوق **+ ADD HEADER**. يمكنك إزالة أي رأس بالنقر فوق أيقونة 'x' بجواره.

على سبيل المثال، قد تتطلب بعض واجهات برمجة التطبيقات (APIs) **مصادقة HTTP الأساسية (HTTP Basic authentication)**. لمصادقة مثل هذه الطلبات، قم بما يلي:

1. افتح محرر نصوص عادي واكتب اسم المستخدم وكلمة المرور بدون مسافات، مفصولة بنقطتين رأسيتين. على سبيل المثال: `myuser:mypass`
2. قم بترميز هذه السلسلة إلى Base64.
3. انسخ سلسلة Base64 الناتجة (على سبيل المثال، `bXl1c2VyOm15cGFzcw==`).
4. في إعدادات webhook، أضف رأس Authorization بالقيمة: `Basic <YOUR BASE64 STRING>`. تأكد من وجود مسافة بعد كلمة "Basic".

<img src="/journey-elements-webhook-2.webp" alt="مثال على رأس Authorization للمصادقة الأساسية في إعدادات webhook يظهر رأسي Content-Type و Authorization"/>
### إضافة نص طلب JSON
في قسم **DATA**، أدخل نص طلب JSON الخاص بك. تأكد من أن نص الطلب بتنسيق JSON صحيح.

<Aside type="note">
إذا لم تكن هناك قيمة للعنصر النائب للبيانات الديناميكية عند إرسال طلب POST، فسيتم إرسال القيمة null.
</Aside>

مثال:
```
{
  "hwid": "{{device:hwid}}"
}
```



### استخدام البيانات الديناميكية ووحدات الماكرو

تتيح لك لوحة **DATA BUILDER** إدراج معلومات ديناميكية (مثل بيانات المستخدم أو الجهاز أو الوسم أو الحدث) مباشرة في نص طلب JSON الخاص بك. باستخدام البيانات الديناميكية، يمكنك تضمين قيم خاصة بالمستخدم الفردي الذي يتقدم عبر الرحلة.

للقيام بذلك: 
1. حدد **فئة**. يمكنك سحب البيانات من ثلاث فئات:

- **Device:** استخدم بيانات الجهاز عندما تحتاج إلى معلومات فنية مرتبطة بجهاز المستخدم.

- **Tag:** استخدم بيانات الوسم عندما تريد إرسال معلومات مخزنة في ملف تعريف المستخدم.

- **Event:** استخدم بيانات الحدث عندما يجب أن يرسل webhook القيم من الحدث الذي أدى إلى تشغيل الرحلة.

2. حدد **معلمة** (على سبيل المثال، HWID، الفئة المفضلة، إلخ).
3. يقوم Pushwoosh بإنشاء ماكرو يبدو كالتالي:

```
{{tag:Language}}
```

4. انسخ الماكرو وألصقه في نص JSON الخاص بك في قسم DATA.

عندما يتم تشغيل webhook في رحلة حية، يقوم Pushwoosh تلقائيًا باستبدال الماكرو بالقيمة الفعلية لذلك المستخدم.

<img src="/journey-elements-webhook-3.webp" alt="إدراج العناصر النائبة للبيانات الديناميكية في نص طلب webhook"/>

### ربط بيانات استجابة Webhook بالمتغيرات

بالإضافة إلى إرسال البيانات، يمكن لعنصر Webhook أيضًا التقاط البيانات من الاستجابة التي يتلقاها وتحويلها إلى متغيرات. يمكن بعد ذلك استخدام هذه المتغيرات لاحقًا في الرحلة. على سبيل المثال، قم بتعيين وسم باستخدام [**تحديث ملف تعريف المستخدم**](/ar/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response)، أو جدولة [**تأخير زمني (Time Delay)**](/ar/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response) بناءً على قيمة تم إرجاعها بواسطة الخدمة الخارجية. للحصول على مثال كامل للرحلة، راجع [استخدام بيانات استجابة webhook في رحلتك](/ar/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/).

في قسم **RESPONSE MAPPING**، انقر فوق **+ ADD MAPPING** واملأ حقلين لكل قيمة تريد التقاطها:

* **Path:** موقع القيمة داخل نص استجابة JSON
* **Attribute:** الاسم الذي تستخدمه للإشارة إلى هذه القيمة لاحقًا في الرحلة

<img src="/journey-elements-webhook-4.webp" alt="قسم ربط الاستجابة مع حقلي Path و Attribute وزر إضافة ربط في إعدادات webhook"/>

على سبيل المثال، إذا استجاب نظام CRM الخاص بك بـ:

```
{
  "data": {
    "user": {
      "id": "789xyz"
    }
  }
}
```

قم بتعيين **Path** إلى `data.user.id` و **Attribute** إلى `crm_user_id` لالتقاط هذا المعرف.

<Aside type="note">
بعض الأشياء التي يجب معرفتها حول الربط:

- **Path** هو مسار بسيط مفصول بنقاط (مفاتيح الكائنات، وبالنسبة للمصفوفات، الفهارس الرقمية، على سبيل المثال `results.0.code`). لا يدعم أحرف البدل أو المرشحات، لذلك يمكنه الإشارة فقط إلى قيمة محددة واحدة في كل مرة.
- يتم تخزين القيم تمامًا كما تأتي من استجابة JSON (نص أو رقم أو true/false). لا يوجد تحويل للنوع. إذا كنت تخطط لاستخدام قيمة كتاريخ في عنصر **Time Delay**، فتأكد من أن خدمتك تعيدها بأحد تنسيقات التاريخ التي يدعمها **Time Delay**.
- إذا لم تكن الاستجابة بتنسيق JSON صالح، أو لم يتطابق **Path** مع أي شيء، فلن يتم إنشاء المتغير المقابل لهذا المستخدم. لا يتم عرض أي خطأ، وتكتمل خطوة **Webhook** بشكل طبيعي.
</Aside>

<Aside type="caution">
لا تتم معالجة نصوص الاستجابة التي يزيد حجمها عن 64 كيلوبايت للربط على الإطلاق. حافظ على صغر حجم الاستجابة التي يرسلها نقطة النهاية الخاصة بك بشكل معقول إذا كنت تخطط لربط القيم منها.
</Aside>

<LinkCard title="استخدام بيانات استجابة webhook في رحلتك" href="/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/" />

### اختبار Webhook
انقر فوق **Test webhook** للتحقق من صحة تكوين webhook الخاص بك وأن الطلب قد تم إرساله بنجاح.

### حفظ الإعدادات الخاصة بك
انقر فوق **Apply** لحفظ تكوين webhook الخاص بك.