# ওয়েব্হুক

<Aside type="caution" icon="setting" title="ডেভেলপারের সহায়তা প্রয়োজন">
 ওয়েব্হুক এলিমেন্টটি কনফিগার করার জন্য আপনার ডেভেলপার টিমের সাহায্যের প্রয়োজন হবে। শুরু করার জন্য তাদের সাথে এই গাইডটি শেয়ার করুন।
</Aside>

ওয়েব্হুক আপনাকে Journey ডেটা অ্যানালিটিক্স, CRM সিস্টেম এবং মার্কেটিং টুলের মতো এক্সটার্নাল সার্ভিসে পাঠাতে দেয়। আপনি যা করতে পারেন:

* Journey-তে কোনো গ্রাহক কোনো অ্যাকশন নিলে এক্সটার্নাল সিস্টেমকে অবহিত করা
* অ্যানালিটিক্স টুলে গ্রাহকের ডেটা পাঠানো
* নির্দিষ্ট Journey ইভেন্টে থার্ড-পার্টি ইমেল, SMS বা WhatsApp ট্রিগার করা

<Aside type="note">
বিভিন্ন ব্যবহারের ক্ষেত্র এবং পরিষেবার জন্য কীভাবে ওয়েব্হুক প্রয়োগ করা যায় তার কিছু উদাহরণ দেখুন: [ওয়েব্হুক ইন্টিগ্রেশন স্যাম্পেল](/bn/developer/guides/customer-journey/webhook-samples/)
</Aside>

## ওয়েব্হুক এলিমেন্ট কীভাবে সেট আপ করবেন 
### ওয়েব্হুক এলিমেন্ট যোগ করুন
ক্যানভাসে **ওয়েব্হুক** এলিমেন্টটি ড্র্যাগ-এন্ড-ড্রপ করুন। আপনি যে Journey তথ্য থার্ড-পার্টি সার্ভিসে পাঠাতে যাচ্ছেন তা মাথায় রেখে **ওয়েব্হুক** এলিমেন্টটি আপনার পছন্দমতো যেকোনো জায়গায় রাখুন।

<img src="/journey-elements-README-40.webp" alt="ক্যানভাসে ওয়েব্হুক এলিমেন্ট, নাম এবং অনুরোধ সেটিংস সহ"/>

### ওয়েব্হুক স্টেপের নাম দিন এবং অনুরোধের URL ও টাইপ উল্লেখ করুন
**STEP NAME** ফিল্ডে, ওয়েব্হুকের জন্য একটি নাম লিখুন। ওয়েব্হুকগুলিকে তারা যে পরিষেবাগুলিতে ডেটা পাঠায় বা ব্যবহারের ক্ষেত্র অনুযায়ী নাম দেওয়া সুবিধাজনক হতে পারে।

এরপর, **URL** ফিল্ডে, অনুরোধের URL উল্লেখ করুন যেখানে ডেটা পাঠানো উচিত। URL ফিল্ডের পাশে, **REQUEST TYPE** ড্রপডাউন থেকে অনুরোধের টাইপ নির্বাচন করুন: `GET` বা `POST`।
<img src="/journey-elements-webhook-1.webp" alt="ওয়েব্হুক কনফিগারেশন ইন্টারফেস যা URL ফিল্ড এবং GET বা POST মেথড নির্বাচনের জন্য REQUEST TYPE ড্রপডাউন দেখাচ্ছে"/>
### হেডার কনফিগার করুন
**HEADERS** সেকশনে, কন্টেন্ট টাইপ সেট করুন।

ডিফল্টভাবে, কন্টেন্ট টাইপ হল **application/json**। যদি আপনি যে সার্ভিসে ওয়েব্হুক পাঠাচ্ছেন তার জন্য অন্য কোনো কন্টেন্ট টাইপ প্রয়োজন হয়, তাহলে **Content-Type** হেডার ভ্যালুতে উপযুক্ত একটি লিখুন।

কন্টেন্ট টাইপের উদাহরণ হল:

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

প্রয়োজনে **+ ADD HEADER** ক্লিক করে অতিরিক্ত হেডার যোগ করুন। আপনি যেকোনো হেডারের পাশের 'x' আইকনে ক্লিক করে সেটি মুছে ফেলতে পারেন।

উদাহরণস্বরূপ, কিছু API-এর জন্য **HTTP Basic authentication** প্রয়োজন হতে পারে। এই ধরনের অনুরোধ প্রমাণীকরণের জন্য, নিম্নলিখিতগুলি করুন:

1. একটি প্লেইন টেক্সট এডিটর খুলুন এবং আপনার ইউজারনেম ও পাসওয়ার্ড কোনো স্পেস ছাড়া, একটি কোলন দ্বারা পৃথক করে টাইপ করুন। উদাহরণস্বরূপ: `myuser:mypass`
2. এই স্ট্রিংটিকে Base64-এ এনকোড করুন।
3. ফলস্বরূপ Base64 স্ট্রিংটি কপি করুন (উদাহরণস্বরূপ, `bXl1c2VyOm15cGFzcw==`)।
4. ওয়েব্হুক সেটিংসে, একটি Authorization হেডার যোগ করুন যার ভ্যালু হবে: `Basic <YOUR BASE64 STRING>`। নিশ্চিত করুন যে "Basic" শব্দের পরে একটি স্পেস আছে।

<img src="/journey-elements-webhook-2.webp" alt="ওয়েব্হুক সেটিংসে বেসিক অথেন্টিকেশনের জন্য অথরাইজেশন হেডারের উদাহরণ, যা Content-Type এবং Authorization হেডার দেখাচ্ছে"/>
### JSON রিকোয়েস্ট বডি যোগ করুন
**DATA** সেকশনে, আপনার JSON রিকোয়েস্ট বডি লিখুন। নিশ্চিত করুন যে রিকোয়েস্ট বডি সঠিক JSON ফরম্যাটে আছে।

<Aside type="note">
POST রিকোয়েস্ট পাঠানোর সময় ডাইনামিক ডেটা প্লেসহোল্ডারের জন্য কোনো ভ্যালু না থাকলে, null ভ্যালু পাঠানো হবে।
</Aside>

উদাহরণ:
```
{
  "hwid": "{{device:hwid}}"
}
```



### ডাইনামিক ডেটা এবং ম্যাক্রো ব্যবহার করুন

**DATA BUILDER** প্যানেল আপনাকে সরাসরি আপনার JSON রিকোয়েস্ট বডিতে ডাইনামিক তথ্য (যেমন ব্যবহারকারী, ডিভাইস, ট্যাগ বা ইভেন্ট ডেটা) প্রবেশ করাতে দেয়। ডাইনামিক ডেটার মাধ্যমে, আপনি Journey-এর মধ্য দিয়ে অগ্রসর হওয়া প্রতিটি ব্যবহারকারীর জন্য নির্দিষ্ট ভ্যালু অন্তর্ভুক্ত করতে পারেন।

এর জন্য: 
1. একটি **ক্যাটাগরি** নির্বাচন করুন। আপনি তিনটি ক্যাটাগরি থেকে ডেটা নিতে পারেন:

- **ডিভাইস:** যখন আপনার ব্যবহারকারীর ডিভাইসের সাথে সম্পর্কিত প্রযুক্তিগত তথ্যের প্রয়োজন হয় তখন ডিভাইস ডেটা ব্যবহার করুন।

- **ট্যাগ:** যখন আপনি ব্যবহারকারীর প্রোফাইলে সংরক্ষিত তথ্য পাঠাতে চান তখন ট্যাগ ডেটা ব্যবহার করুন।

- **ইভেন্ট:** যখন ওয়েব্হুককে Journey-এর ট্রিগারিং ইভেন্ট থেকে ভ্যালু পাঠাতে হবে তখন ইভেন্ট ডেটা ব্যবহার করুন।

2. একটি **প্যারামিটার** নির্বাচন করুন (উদাহরণস্বরূপ, HWID, পছন্দের ক্যাটাগরি, ইত্যাদি)।
3. Pushwoosh এইরকম একটি ম্যাক্রো তৈরি করে:

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

4. ম্যাক্রোটি কপি করুন এবং DATA সেকশনে আপনার JSON বডিতে পেস্ট করুন।

যখন ওয়েব্হুক একটি লাইভ Journey-তে চলে, Pushwoosh স্বয়ংক্রিয়ভাবে ম্যাক্রোটিকে সেই ব্যবহারকারীর জন্য আসল ভ্যালু দিয়ে প্রতিস্থাপন করে।

<img src="/journey-elements-webhook-3.webp" alt="ওয়েব্হুক রিকোয়েস্ট বডিতে ডাইনামিক ডেটা প্লেসহোল্ডার প্রবেশ করান"/>

### ওয়েব্হুক রেসপন্স ডেটা ভেরিয়েবলে ম্যাপ করুন

ডেটা পাঠানোর পাশাপাশি, ওয়েব্হুক এলিমেন্টটি তার প্রাপ্ত রেসপন্স থেকে ডেটা ক্যাপচার করতে এবং সেগুলিকে ভেরিয়েবলে পরিণত করতে পারে। এই ভেরিয়েবলগুলি পরে Journey-তে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, [**Update user profile**](/bn/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response) দিয়ে একটি ট্যাগ সেট করুন, অথবা এক্সটার্নাল সার্ভিস দ্বারা ফেরত দেওয়া একটি ভ্যালুর উপর ভিত্তি করে একটি [**Time Delay**](/bn/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response) নির্ধারণ করুন। একটি সম্পূর্ণ Journey উদাহরণের জন্য, দেখুন [Using webhook response data in your journey](/bn/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/)।

**RESPONSE MAPPING** সেকশনে, **+ ADD MAPPING** ক্লিক করুন এবং প্রতিটি ভ্যালু যা আপনি ক্যাপচার করতে চান তার জন্য দুটি ফিল্ড পূরণ করুন:

* **Path:** রেসপন্স JSON বডির ভিতরে ভ্যালুটির অবস্থান
* **Attribute:** Journey-তে পরে এই ভ্যালুটি রেফারেন্স করার জন্য আপনি যে নামটি ব্যবহার করবেন

<img src="/journey-elements-webhook-4.webp" alt="ওয়েব্হুক সেটিংসে পাথ এবং অ্যাট্রিবিউট ফিল্ড এবং অ্যাড ম্যাপিং বাটন সহ রেসপন্স ম্যাপিং সেকশন"/>

উদাহরণস্বরূপ, যদি আপনার CRM প্রতিক্রিয়া জানায়:

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

ঐ ID ক্যাপচার করতে **Path**-কে `data.user.id` এবং **Attribute**-কে `crm_user_id` হিসেবে সেট করুন।

<Aside type="note">
ম্যাপিং সম্পর্কে কয়েকটি বিষয় জেনে রাখা ভালো:

- **Path** হল একটি প্লেইন ডট-সেপারেটেড পাথ (অবজেক্ট কী এবং, অ্যারের জন্য, নিউমেরিক ইনডেক্স, যেমন `results.0.code`)। এটি ওয়াইল্ডকার্ড বা ফিল্টার সমর্থন করে না, তাই এটি একবারে শুধুমাত্র একটি নির্দিষ্ট ভ্যালুকে নির্দেশ করতে পারে।
- ভ্যালুগুলি JSON রেসপন্স থেকে যেভাবে আসে ঠিক সেভাবেই (টেক্সট, নম্বর, বা ট্রু/ফলস) সংরক্ষণ করা হয়। কোনো টাইপ কনভার্সন হয় না। যদি আপনি একটি **Time Delay** এলিমেন্টে একটি ভ্যালুকে তারিখ হিসাবে ব্যবহার করার পরিকল্পনা করেন, তাহলে নিশ্চিত করুন যে আপনার সার্ভিসটি **Time Delay** দ্বারা সমর্থিত তারিখ ফরম্যাটগুলির মধ্যে একটিতে এটি ফেরত দেয়।
- যদি রেসপন্সটি বৈধ JSON না হয়, বা একটি **Path** কোনো কিছুর সাথে মেলে না, তাহলে সেই ব্যবহারকারীর জন্য সংশ্লিষ্ট ভেরিয়েবল তৈরি হয় না। কোনো ত্রুটি দেখানো হয় না, এবং **ওয়েব্হুক** স্টেপটি এখনও স্বাভাবিকভাবে সম্পন্ন হয়।
</Aside>

<Aside type="caution">
64 KB-এর চেয়ে বড় রেসপন্স বডি ম্যাপিংয়ের জন্য একেবারেই প্রসেস করা হয় না। যদি আপনি রেসপন্স থেকে ভ্যালু ম্যাপ করার পরিকল্পনা করেন, তাহলে আপনার এন্ডপয়েন্ট থেকে পাঠানো রেসপন্সটি যথেষ্ট ছোট রাখুন।
</Aside>

<LinkCard title="আপনার Journey-তে ওয়েব্হুক রেসপন্স ডেটা ব্যবহার করা" href="/product/customer-journey/journey-elements/using-webhook-response-data-in-journeys/" />

### ওয়েব্হুক পরীক্ষা করুন
আপনার ওয়েব্হুক কনফিগারেশন সঠিক কিনা এবং অনুরোধটি সফলভাবে পাঠানো হয়েছে কিনা তা যাচাই করতে **Test webhook** ক্লিক করুন।

### আপনার কনফিগারেশন সেভ করুন
আপনার ওয়েব্হুক কনফিগারেশন সেভ করতে **Apply** ক্লিক করুন।