# วิธีตั้งค่าการแนะนำผลิตภัณฑ์ในอีเมล

การตั้งค่า **Source** ของบล็อก Products เป็น **Recommendations** สามารถจัดอันดับผลิตภัณฑ์ตาม **Bestsellers**, **Back in stock**, **Price drop**, **New arrivals**, **Bought together** หรือ **Based on what they viewed** โดยที่คุณไม่ต้องเลือกผลิตภัณฑ์หรือเขียนกฎแคตตาล็อก ดู [รับผลิตภัณฑ์ที่แนะนำ](/th/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products) สำหรับทุกฟิลด์ที่ source นี้เพิ่มเข้ามา สามในกลยุทธ์เหล่านั้นต้องการข้อมูลจากภายนอกแคตตาล็อกของคุณเพื่อทำงาน: **Bestsellers** จะอ่านประวัติการสั่งซื้อของคุณ และ **Bought together** และ **Based on what they viewed** จะอ่านสิ่งที่ผู้ซื้อได้ดูและซื้อไป คู่มือนี้จะครอบคลุมถึงสิ่งที่ต้องส่งเพื่อให้แต่ละกลยุทธ์มีข้อมูลในการจัดอันดับ

<Aside type="tip">
กำลังส่ง `PW_AbandonedCart` และ `PW_OrderCreated` สำหรับ [การกู้คืนตะกร้าสินค้าที่ถูกทิ้ง](/th/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/) อยู่แล้วใช่ไหม อ่านต่อได้เลย **Bestsellers** ต้องการอีกหนึ่งฟิลด์ใน `PW_OrderCreated` ที่คู่มือการกู้คืนตะกร้าสินค้าที่ถูกทิ้งไม่ได้ครอบคลุมไว้
</Aside>

## ก่อนที่คุณจะเริ่ม

ตรวจสอบให้แน่ใจว่าแคตตาล็อกของบัญชีของคุณมีผลิตภัณฑ์อยู่ ไปที่ **Content → Product Catalog** และเชื่อมต่อฟีด, นำเข้า CSV, หรือเพิ่มผลิตภัณฑ์ด้วยตนเอง [เรียนรู้วิธีการเติมข้อมูลในแคตตาล็อกของคุณ](/th/product/content/product-catalog/#ways-to-populate-your-catalog)

<Aside type="caution" icon="setting" title="ต้องการความช่วยเหลือจากนักพัฒนา">
การส่ง event ด้านล่างนี้ต้องการความช่วยเหลือจากทีมนักพัฒนาของคุณ เว้นแต่ว่าการผสานรวมร้านค้าของคุณจะส่งให้คุณอยู่แล้ว กรุณาแชร์คู่มือนี้กับพวกเขา
</Aside>

<Aside type="note" title="บัญชีใหม่จะเห็นแคตตาล็อกปกติก่อน">
ทุกกลยุทธ์ด้านล่างนี้ต้องการประวัติเพื่อสะสมข้อมูลก่อนที่จะสามารถจัดอันดับอะไรได้ จนกว่าจะถึงตอนนั้น บล็อกจะแสดงแคตตาล็อกปกติแทน ดูหมายเหตุใต้ [รับผลิตภัณฑ์ที่แนะนำ](/th/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)
</Aside>

## กลยุทธ์ใดบ้างที่ต้องการ event

สามในหกกลยุทธ์จะจัดอันดับผลิตภัณฑ์จาก event ที่คุณส่ง ส่วนอีกสามกลยุทธ์จะจัดอันดับโดยตรงจากแคตตาล็อกของคุณและไม่ต้องการอะไรจากคุณ

| กลยุทธ์ | ต้องการ event หรือไม่ | แหล่งข้อมูล |
| :---- | :---- | :---- |
| **Back in stock** | ไม่ | การเปลี่ยนแปลงสต็อกในแคตตาล็อก |
| **Price drop** | ไม่ | การเปลี่ยนแปลงราคาในแคตตาล็อก |
| **New arrivals** | ไม่ | วันที่ 'เพิ่ม' ในแคตตาล็อก |
| **Bestsellers** (7/30 วัน) | ใช่ | `PW_OrderCreated` / `PW_OrderUpdated` พร้อม `items` |
| **Based on what they viewed** | ใช่ | Event ใดๆ ที่มี ID ผลิตภัณฑ์ |
| **Bought together** | ใช่ | Event ใดๆ ที่มี ID ผลิตภัณฑ์ พร้อม device tag |

การเปลี่ยนแปลงสต็อกหรือราคาในฟีดของคุณ หรือการซิงค์ตามกำหนดการครั้งถัดไป จะอัปเดต **Back in stock**, **Price drop** และ **New arrivals** โดยอัตโนมัติ ไม่จำเป็นต้องส่งอะไรสำหรับสามกลยุทธ์นี้

## Bestsellers: เพิ่มรายการสินค้าใน event การสั่งซื้อของคุณ

**Bestsellers (7 days)** และ **Bestsellers (30 days)** จัดอันดับผลิตภัณฑ์ตามจำนวนหน่วยที่ขายได้ในช่วงเวลานั้นๆ โดยจะอ่านอาร์เรย์ `items` ใน `PW_OrderCreated` และ `PW_OrderUpdated` โดยเฉพาะ `productId` และ `quantity` ของแต่ละรายการ

หากคุณส่ง `PW_OrderCreated` เพื่อ [ล้างแท็กตะกร้าสินค้าที่ถูกทิ้ง](/th/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/#what-happens-when-you-send-pw_ordercreated) อยู่แล้ว การเรียกแบบน้อยที่สุด (แค่ `orderId`) ก็ยังคงล้างตะกร้าได้ แต่จะไม่มีข้อมูลให้ Bestsellers นับ เพิ่มรายการสินค้าในคำสั่งซื้อเข้าไปในการเรียกเดียวกัน:

```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` ต้องตรงกับ ID ที่ [แคตตาล็อกผลิตภัณฑ์](/th/product/content/product-catalog/) ของคุณใช้สำหรับสินค้านั้น เพื่อให้ Bestsellers สามารถค้นหาผลิตภัณฑ์ที่จะแสดงได้ ฟิลด์รายการสินค้าเพิ่มเติม (ราคา, ชื่อ, และอื่นๆ) จะถูกละเว้นสำหรับกลยุทธ์นี้ มีเพียง `productId` และ `quantity` เท่านั้นที่นับรวมในการจัดอันดับ ส่งอาร์เรย์ `items` เดียวกันใน `PW_OrderUpdated` สำหรับการแก้ไขคำสั่งซื้อ, การคืนเงิน, หรือการยกเลิกบางส่วน เนื่องจาก Bestsellers จะนับใหม่จากข้อมูลล่าสุดของ event สำหรับคำสั่งซื้อนั้นๆ

<Aside type="tip">
หากคุณใช้ [การผสานรวม Shopify](/th/product/integrations/shopify-integration/) `PW_OrderCreated` จะมี `items` พร้อม `productId` และ `quantity` สำหรับทุกคำสั่งซื้ออยู่แล้ว — ไม่ต้องเพิ่มอะไรจากฝั่งคุณ อย่างไรก็ตาม การผสานรวมไม่ได้ส่ง `PW_OrderUpdated` ดังนั้น Bestsellers จะนับคำสั่งซื้อตามที่สั่งซื้อครั้งแรกและจะไม่หักหน่วยสินค้าออกจากการแก้ไข, การคืนเงิน, หรือการยกเลิกในภายหลัง
</Aside>

<Aside type="caution" title="ส่ง quantity เป็นตัวเลข">
ใช้ตัวเลข JSON จริงสำหรับ `quantity` ไม่ใช่สตริงที่อยู่ในเครื่องหมายคำพูด Pushwoosh จะจัดเก็บค่า attribute แต่ละค่าในประเภทที่ประกาศหรืออนุมานครั้งแรกเท่านั้น ค่าที่ไม่ตรงกันจะถูกทิ้งไปอย่างเงียบๆ และ `postEvent` จะยังคงส่งคืนค่าว่าสำเร็จ ดู [ใช้ประเภท attribute ที่ถูกต้อง](/th/tutorials/product-guides/email-marketing-campaigns/how-to-set-up-an-abandoned-cart-campaign/#create-the-events-in-your-control-panel) สำหรับข้อควรระวังเดียวกันใน `PW_AbandonedCart`
</Aside>

<Aside type="note">
**Bestsellers** จัดอันดับตามประวัติการสั่งซื้อโดยเฉพาะ การดูสินค้าและกิจกรรมในตะกร้าจะไม่ถูกนับ สำหรับการจัดอันดับที่รวมการเข้าชมและกิจกรรมในตะกร้าด้วย ให้ใช้ **Based on what they viewed** หรือ **Bought together** แทน
</Aside>

## Based on what they viewed และ Bought together: ติดตามกิจกรรมเกี่ยวกับผลิตภัณฑ์

ทั้งสองกลยุทธ์สร้างขึ้นจากสัญญาณเดียวกัน: event ที่มี ID ผลิตภัณฑ์ คุณไม่จำเป็นต้องมีชื่อ event "product viewed" โดยเฉพาะ — [custom event](/th/product/audience-data-and-segmentation/events/custom-events/) ใดๆ ที่ส่งผ่าน [postEvent](/th/developer/api-reference/user-centric-api/#postevent) จะถูกนับ ตราบใดที่ `attributes` ของมันมีคีย์ใดคีย์หนึ่งต่อไปนี้:

*   ผลิตภัณฑ์เดียว เป็น attribute ระดับบนสุด: `product_id`, `productId`, `productid`, `item_id` หรือ `sku`
*   ผลิตภัณฑ์หลายรายการ เป็นอาร์เรย์ `products` ที่แต่ละรายการมี `product_id`, `productId`, `id` หรือ `sku`

ตัวอย่างเช่น ส่ง event การดูผลิตภัณฑ์ที่มีอยู่ของคุณพร้อมกับ attribute ID ผลิตภัณฑ์ที่มีอยู่แล้ว:

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

**Based on what they viewed** จะจัดอันดับผลิตภัณฑ์ที่ผู้ซื้อแต่ละคนมีปฏิสัมพันธ์ด้วยล่าสุด — ไม่จำเป็นต้องตั้งค่าเพิ่มเติมเมื่อ event ข้างต้นเริ่มทำงาน

<Aside type="tip">
หากคุณใช้ [การผสานรวม Shopify](/th/product/integrations/shopify-integration/) การฝังธีมหน้าร้านจะส่ง `PW_ProductViewed` พร้อม `productId` ในทุกๆ การดูหน้าผลิตภัณฑ์อยู่แล้ว — ไม่ต้องเพิ่มอะไรจากฝั่งคุณ ตราบใดที่สวิตช์ **Push Init Embed** เปิดอยู่ (ค่าเริ่มต้นคือปิด) ดู [Event การเข้าชมหน้าร้าน](/th/product/integrations/shopify-integration/#storefront-browsing-events)
</Aside>

**Bought together** จัดอันดับผลิตภัณฑ์ที่มักจะถูกซื้อพร้อมกับผลิตภัณฑ์หลักหนึ่งรายการ จากประวัติทั้งหมดของบัญชีของคุณ มันต้องการอีกสิ่งหนึ่ง: **Product tag** ซึ่งเป็น [device tag](/th/developer/api-reference/tags/) ที่เก็บ ID ของผลิตภัณฑ์หลักปัจจุบัน ตั้งชื่อฟิลด์เมื่อคุณกำหนดค่ากลยุทธ์ใน [บล็อก Products](/th/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products) (ตัวอย่างเช่น `PW_LastViewedProductID`) จากนั้นอัปเดตแท็กนั้นในแต่ละอุปกรณ์อยู่เสมอ ตัวอย่างเช่น [ตั้งค่า](/th/developer/api-reference/tags/) เป็น ID ของผลิตภัณฑ์ทุกครั้งที่ผู้ซื้อดูผลิตภัณฑ์ หากไม่มีการตั้งค่าแท็กบนผู้รับ บล็อกจะกลับไปใช้แคตตาล็อกปกติสำหรับพวกเขา

<Aside type="caution" title="กฎการตั้งชื่อแท็ก">
ชื่อแท็กยอมรับเฉพาะตัวอักษร, ตัวเลข, ขีดล่าง, และช่องว่างเท่านั้น เนื่องจากต้องสามารถอ้างอิงได้ใน Liquid ดู [Bought together ต้องการ Product tag](/th/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products)
</Aside>

## ยืนยันว่า event ของคุณมาถึงแล้ว

ก่อนที่คุณจะเพิ่มบล็อก ให้ตรวจสอบว่า Pushwoosh ได้รับ event ข้างต้นจริงๆ: ไปที่ **Audience → Events** เปิด event ที่คุณส่ง (`PW_OrderCreated` หรือ custom event ที่มี ID ผลิตภัณฑ์) และยืนยันว่ามีการเข้าชมล่าสุดปรากฏขึ้น ดู [สถิติ Event](/th/product/audience-data-and-segmentation/events/)

<Aside type="note">
บล็อก Products ที่ว่างเปล่าอาจหมายถึง "event ไม่เคยมาถึง" หรือ "ยังไม่มีประวัติสะสมเพียงพอ" (ดูหมายเหตุด้านบน) สถิติ Event จะช่วยตัดสาเหตุแรกออกไปก่อนที่คุณจะไปหาสาเหตุที่สอง
</Aside>

## เพิ่มบล็อกในอีเมลของคุณ

เพิ่มบล็อก [Products](/th/product/content/email-content/drag-and-drop-email-editor/blocks/#products) ใน [เนื้อหาอีเมล](/th/product/content/email-content/drag-and-drop-email-editor/create-email-content-with-drag-and-drop-editor/) ของคุณ ตั้งค่า **Source** เป็น **Recommendations** และเลือก **Strategy** ดู [รับผลิตภัณฑ์ที่แนะนำ](/th/product/content/email-content/drag-and-drop-email-editor/blocks/#get-recommended-products) สำหรับทุกฟิลด์ในแผงการตั้งค่า คลิก **Refresh preview** เพื่อตรวจสอบว่า canvas เติมเต็มด้วยผลิตภัณฑ์จริงก่อนที่คุณจะส่ง