# ইমেইলে প্রোডাক্ট রেকমেন্ডেশন কীভাবে সেট আপ করবেন

প্রোডাক্টস ব্লকের **সোর্স**-কে **রেকমেন্ডেশনস**-এ সেট করলে, আপনাকে প্রোডাক্ট বাছাই বা ক্যাটালগ রুল লেখা ছাড়াই **বেস্টসেলার**, **ব্যাক ইন স্টক**, **প্রাইস ড্রপ**, **নিউ অ্যারাইভালস**, **বট টুগেদার**, বা **বেসড অন হোয়াট দে ভিউড** অনুযায়ী প্রোডাক্ট র‍্যাঙ্ক করা যায়। এই সোর্সটি যে সমস্ত ফিল্ড যোগ করে, তার জন্য দেখুন [প্রস্তাবিত পণ্য পান](/bn/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)। এই স্ট্র্যাটেজিগুলির মধ্যে তিনটির কাজ করার জন্য আপনার ক্যাটালগের বাইরের ডেটা প্রয়োজন: **বেস্টসেলার** আপনার অর্ডারের ইতিহাস পড়ে, এবং **বট টুগেদার** ও **বেসড অন হোয়াট দে ভিউড** ক্রেতারা কী দেখেছেন এবং কিনেছেন তা পড়ে। এই গাইডটি কভার করে যে প্রতিটি স্ট্র্যাটেজির র‍্যাঙ্ক করার জন্য কী পাঠাতে হবে।

<Aside type="tip">
ইতিমধ্যে [পরিত্যক্ত কার্ট পুনরুদ্ধারের](/bn/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/) জন্য `PW_AbandonedCart` এবং `PW_OrderCreated` পাঠাচ্ছেন? পড়তে থাকুন। **বেস্টসেলার**-এর জন্য `PW_OrderCreated`-এ আরও একটি ফিল্ড প্রয়োজন যা পরিত্যক্ত কার্ট গাইডে কভার করা হয়নি।
</Aside>

## শুরু করার আগে

নিশ্চিত করুন আপনার অ্যাকাউন্টের ক্যাটালগে প্রোডাক্ট আছে। **Content → Product Catalog**-এ যান এবং একটি ফিড সংযোগ করুন, একটি CSV ইম্পোর্ট করুন, বা হাতে করে প্রোডাক্ট যোগ করুন। [আপনার ক্যাটালগ কীভাবে পূরণ করবেন তা জানুন](/bn/product/content/product-catalog/#ways-to-populate-your-catalog)।

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

<Aside type="note" title="নতুন অ্যাকাউন্টগুলি প্রথমে নিয়মিত ক্যাটালগ দেখে">
নীচের প্রতিটি স্ট্র্যাটেজির র‍্যাঙ্কিং করার আগে ইতিহাস জমা হওয়া প্রয়োজন। ততক্ষণ পর্যন্ত, ব্লকটি পরিবর্তে নিয়মিত ক্যাটালগ দেখায়। [প্রস্তাবিত পণ্য পান](/bn/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)-এর অধীনে নোটটি দেখুন।
</Aside>

## কোন স্ট্র্যাটেজিগুলির জন্য ইভেন্ট প্রয়োজন

ছয়টি স্ট্র্যাটেজির মধ্যে তিনটি আপনার পাঠানো ইভেন্ট থেকে প্রোডাক্ট র‍্যাঙ্ক করে; অন্য তিনটি সরাসরি আপনার ক্যাটালগ থেকে র‍্যাঙ্ক করে এবং আপনার কাছ থেকে কিছুর প্রয়োজন হয় না।

| স্ট্র্যাটেজি | ইভেন্ট প্রয়োজন? | ডেটা সোর্স |
| :---- | :---- | :---- |
| **ব্যাক ইন স্টক** | না | ক্যাটালগ স্টক পরিবর্তন |
| **প্রাইস ড্রপ** | না | ক্যাটালগ মূল্য পরিবর্তন |
| **নিউ অ্যারাইভালস** | না | ক্যাটালগ "যোগ করা" তারিখ |
| **বেস্টসেলার** (৭/৩০ দিন) | হ্যাঁ | `PW_OrderCreated` / `PW_OrderUpdated` with `items` |
| **বেসড অন হোয়াট দে ভিউড** | হ্যাঁ | প্রোডাক্ট আইডি বহনকারী যেকোনো ইভেন্ট |
| **বট টুগেদার** | হ্যাঁ | প্রোডাক্ট আইডি বহনকারী যেকোনো ইভেন্ট, সাথে একটি ডিভাইস ট্যাগ |

আপনার ফিডে স্টক বা মূল্যের পরিবর্তন, বা পরবর্তী নির্ধারিত সিঙ্ক, **ব্যাক ইন স্টক**, **প্রাইস ড্রপ**, এবং **নিউ অ্যারাইভালস** স্বয়ংক্রিয়ভাবে আপডেট করে। এই তিনটির জন্য কিছু পাঠানোর প্রয়োজন নেই।

## বেস্টসেলার: আপনার অর্ডার ইভেন্টে আইটেম যোগ করুন

**বেস্টসেলার (৭ দিন)** এবং **বেস্টসেলার (৩০ দিন)** সেই সময়ের মধ্যে কতগুলি ইউনিট বিক্রি হয়েছে তার উপর ভিত্তি করে প্রোডাক্ট র‍্যাঙ্ক করে। তারা `PW_OrderCreated` এবং `PW_OrderUpdated`-এর `items` অ্যারে পড়ে, বিশেষ করে প্রতিটি আইটেমের `productId` এবং `quantity`।

যদি আপনি ইতিমধ্যে [পরিত্যক্ত কার্ট ট্যাগ পরিষ্কার করতে](/bn/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/#what-happens-when-you-send-pw_ordercreated) `PW_OrderCreated` পাঠান, তবে সেই ন্যূনতম কল (শুধু `orderId`) কার্টটি পরিষ্কার করে, কিন্তু এটি বেস্টসেলারকে গণনা করার জন্য কিছু দেয় না। একই কলে অর্ডারের লাইন আইটেমগুলি যোগ করুন:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_OrderCreated",
    "attributes": {
      "orderId": "ORDER-10293",
      "items": [
        {
          "productId": "SKU-4821",
          "quantity": 1
        },
        {
          "productId": "SKU-5190",
          "quantity": 2
        }
      ]
    },
    "userId": "shopper@example.com"
  }
}
```

`productId` অবশ্যই আপনার [প্রোডাক্ট ক্যাটালগ](/bn/product/content/product-catalog/) দ্বারা ব্যবহৃত আইটেমের আইডির সাথে মিলতে হবে, যাতে বেস্টসেলার দেখানোর জন্য প্রোডাক্টটি খুঁজে পেতে পারে। অতিরিক্ত আইটেম ফিল্ড (মূল্য, নাম, ইত্যাদি) এই স্ট্র্যাটেজির জন্য উপেক্ষা করা হয়। শুধুমাত্র `productId` এবং `quantity` র‍্যাঙ্কিংয়ের জন্য গণনা করা হয়। অর্ডার সম্পাদনা, রিফান্ড বা আংশিক বাতিলের জন্য `PW_OrderUpdated`-এ একই `items` অ্যারে পাঠান, কারণ বেস্টসেলার সেই অর্ডারের সর্বশেষ ইভেন্ট থেকে পুনরায় গণনা করে।

<Aside type="tip">
আপনি যদি [Shopify ইন্টিগ্রেশন](/bn/product/integrations/shopify-integration/) ব্যবহার করেন, তবে `PW_OrderCreated` প্রতিটি অর্ডারের জন্য `productId` এবং `quantity` সহ `items` বহন করে — আপনার পক্ষ থেকে কিছু যোগ করার প্রয়োজন নেই। তবে, ইন্টিগ্রেশনটি `PW_OrderUpdated` পাঠায় না, তাই বেস্টসেলার অর্ডারগুলি মূলত যেমন ছিল তেমনই গণনা করে এবং পরবর্তী সম্পাদনা, রিফান্ড বা বাতিল থেকে ইউনিটগুলি বাদ দেয় না।
</Aside>

<Aside type="caution" title="পরিমাণ একটি সংখ্যা হিসাবে পাঠান">
`quantity`-এর জন্য একটি আসল JSON নম্বর ব্যবহার করুন, কোটেড স্ট্রিং নয়। Pushwoosh প্রতিটি অ্যাট্রিবিউটের মান শুধুমাত্র সেই টাইপে সংরক্ষণ করে যা দিয়ে এটি প্রথম ঘোষণা বা অনুমান করা হয়েছিল; একটি বেমানান মান নীরবে বাদ দেওয়া হয়, এবং `postEvent` এখনও সাফল্য প্রদান করে। `PW_AbandonedCart`-এর জন্য একই সতর্কতার জন্য দেখুন [সঠিক অ্যাট্রিবিউট টাইপ ব্যবহার করুন](/bn/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/#create-the-events-in-your-control-panel)।
</Aside>

<Aside type="note">
**বেস্টসেলার** বিশেষভাবে অর্ডারের ইতিহাসের উপর ভিত্তি করে র‍্যাঙ্ক করে। ভিউ এবং কার্ট অ্যাক্টিভিটি গণনা করা হয় না। ব্রাউজিং এবং কার্ট অ্যাক্টিভিটি অন্তর্ভুক্ত করে এমন র‍্যাঙ্কিংয়ের জন্য, পরিবর্তে **বেসড অন হোয়াট দে ভিউড** বা **বট টুগেদার** ব্যবহার করুন।
</Aside>

## বেসড অন হোয়াট দে ভিউড এবং বট টুগেদার: প্রোডাক্ট অ্যাক্টিভিটি ট্র্যাক করুন

উভয় স্ট্র্যাটেজি একই সংকেত থেকে তৈরি হয়: যে ইভেন্টগুলি একটি প্রোডাক্ট আইডি বহন করে। আপনার একটি ডেডিকেটেড "প্রোডাক্ট ভিউড" ইভেন্টের নামের প্রয়োজন নেই — [postEvent](/bn/developer/api-reference/user-centric-api/#postevent) এর মাধ্যমে পাঠানো যেকোনো [কাস্টম ইভেন্ট](/bn/product/audience-data-and-segmentation/events/custom-events/) গণনা করা হয়, যতক্ষণ না এর `attributes`-এ এই কীগুলির মধ্যে একটি অন্তর্ভুক্ত থাকে:

* একটি একক প্রোডাক্ট, একটি টপ-লেভেল অ্যাট্রিবিউট হিসাবে: `product_id`, `productId`, `productid`, `item_id`, বা `sku`।
* একাধিক প্রোডাক্ট, একটি `products` অ্যারে হিসাবে যেখানে প্রতিটি আইটেমের `product_id`, `productId`, `id`, বা `sku` আছে।

উদাহরণস্বরূপ, আপনার বিদ্যমান প্রোডাক্ট-ভিউ ইভেন্টটি একটি প্রোডাক্ট আইডি অ্যাট্রিবিউট সহ ফায়ার করুন যা ইতিমধ্যে এতে রয়েছে:

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "ProductViewed",
    "attributes": {
      "product_id": "SKU-4821",
      "category": "Audio"
    },
    "userId": "shopper@example.com"
  }
}
```

**বেসড অন হোয়াট দে ভিউড** প্রতিটি ক্রেতার নিজের সম্প্রতি ইন্টারঅ্যাক্ট করা প্রোডাক্টগুলিকে র‍্যাঙ্ক করে — উপরের ইভেন্টগুলি প্রবাহিত হতে শুরু করলে আর কোনো সেটআপের প্রয়োজন নেই।

<Aside type="tip">
আপনি যদি [Shopify ইন্টিগ্রেশন](/bn/product/integrations/shopify-integration/) ব্যবহার করেন, তবে স্টোরফ্রন্ট থিম এম্বেড প্রতিটি প্রোডাক্ট পেজ ভিউতে `productId` সহ `PW_ProductViewed` পাঠায় — আপনার পক্ষ থেকে কিছু যোগ করার প্রয়োজন নেই, যতক্ষণ **Push Init Embed** টগলটি চালু থাকে (এটি ডিফল্টরূপে বন্ধ থাকে)। দেখুন [স্টোরফ্রন্ট ব্রাউজিং ইভেন্টস](/bn/product/integrations/shopify-integration/#storefront-browsing-events)।
</Aside>

**বট টুগেদার** আপনার সম্পূর্ণ অ্যাকাউন্টের ইতিহাস জুড়ে একটি অ্যাঙ্কর প্রোডাক্টের সাথে প্রায়শই কেনা প্রোডাক্টগুলিকে র‍্যাঙ্ক করে। এর জন্য আরও একটি জিনিস প্রয়োজন: একটি **প্রোডাক্ট ট্যাগ**, একটি [ডিভাইস ট্যাগ](/bn/developer/api-reference/tags/) যা বর্তমান অ্যাঙ্কর প্রোডাক্টের আইডি ধারণ করে। [প্রোডাক্টস ব্লকে](/bn/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products) স্ট্র্যাটেজি কনফিগার করার সময় ফিল্ডের নাম সেট করুন (উদাহরণস্বরূপ `PW_LastViewedProductID`), তারপর প্রতিটি ডিভাইসে সেই ট্যাগটি আপডেট রাখুন। উদাহরণস্বরূপ, ক্রেতা যখনই কোনো প্রোডাক্ট দেখে, তখন এটিকে [সেট করুন](/bn/developer/api-reference/tags/) প্রোডাক্টের আইডিতে। কোনো প্রাপকের উপর ট্যাগ সেট না থাকলে, ব্লকটি তাদের জন্য নিয়মিত ক্যাটালগে ফিরে যায়।

<Aside type="caution" title="ট্যাগের নামের নিয়ম">
ট্যাগের নামে শুধুমাত্র অক্ষর, সংখ্যা, আন্ডারস্কোর এবং স্পেস গ্রহণ করা হয়, কারণ এটি Liquid-এ অ্যাড্রেসযোগ্য হতে হবে। দেখুন [বট টুগেদারের জন্য একটি প্রোডাক্ট ট্যাগ প্রয়োজন](/bn/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)।
</Aside>

## আপনার ইভেন্টগুলি পৌঁছাচ্ছে কিনা তা নিশ্চিত করুন

ব্লকটি যোগ করার আগে, পরীক্ষা করুন যে Pushwoosh আসলে উপরের ইভেন্টগুলি গ্রহণ করছে: **Audience → Events**-এ যান, আপনার পাঠানো ইভেন্টটি খুলুন (`PW_OrderCreated` বা প্রোডাক্ট আইডি বহনকারী কাস্টম ইভেন্ট), এবং সাম্প্রতিক হিটগুলি দেখা যাচ্ছে কিনা তা নিশ্চিত করুন। দেখুন [ইভেন্ট পরিসংখ্যান](/bn/product/audience-data-and-segmentation/events/)।

<Aside type="note">
একটি খালি প্রোডাক্টস ব্লক মানে হতে পারে "ইভেন্টগুলি কখনও আসেনি" অথবা "এখনও যথেষ্ট ইতিহাস জমা হয়নি" (উপরের নোটটি দেখুন)। ইভেন্ট পরিসংখ্যান দ্বিতীয় কারণটি খোঁজার আগে প্রথম কারণটি বাতিল করে দেয়।
</Aside>

## আপনার ইমেইলে ব্লকটি যোগ করুন

আপনার [ইমেইল কন্টেন্টে](/bn/product/content/email-content/drag-and-drop-email-editor/create-email-content-with-drag-and-drop-editor/) একটি [প্রোডাক্টস](/bn/product/content/email-content/drag-and-drop-email-editor/blocks/#products) ব্লক যোগ করুন, **সোর্স**-কে **রেকমেন্ডেশনস**-এ সেট করুন, এবং একটি **স্ট্র্যাটেজি** বেছে নিন। সেটিংস প্যানেলের প্রতিটি ফিল্ডের জন্য দেখুন [প্রস্তাবিত পণ্য পান](/bn/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)। পাঠানোর আগে ক্যানভাসটি আসল প্রোডাক্ট দিয়ে পূর্ণ হয়েছে কিনা তা পরীক্ষা করতে **রিফ্রেশ প্রিভিউ**-তে ক্লিক করুন।