# เทมเพลต Liquid

<YouTube id="A7l1_gK5yOA" playlabel="วิดีโอ Youtube: เรียนรู้วิธีใช้เทมเพลตเนื้อหาใน Customer journeys"/>

เทมเพลต Liquid ขยายขีดความสามารถในการปรับแต่งของ Pushwoosh อย่างมีนัยสำคัญโดยการใช้ตรรกะที่ซับซ้อนนอกเหนือจากการใช้งาน[ Dynamic Content](/th/product/personalization/dynamic-content/) ทั่วไป

การปรับแต่งข้อความใน Pushwoosh ขึ้นอยู่กับ [Tags (ข้อมูลผู้ใช้)](/th/product/audience-data-and-segmentation/user-data-tags/tags) Pushwoosh มี [default Tags](/th/product/audience-data-and-segmentation/user-data-tags/tags#default-tags) และ [custom Tags](/th/product/audience-data-and-segmentation/user-data-tags/tags#custom-tags) ที่หลากหลาย ด้วยการใช้สิ่งเหล่านี้ คุณสามารถระบุชื่อ, เมือง, ประวัติการซื้อของผู้ใช้ ฯลฯ เพื่อส่งข้อความที่เป็นส่วนตัวมากขึ้น ตัวอย่างเช่น: `Hi {{First_name}}, thanks for ordering {{item}}`

เทมเพลต Liquid เพิ่มตรรกะให้กับเนื้อหาแบบไดนามิกมากขึ้น ตัวอย่างเช่น หากแท็กการสมัครสมาชิกของผู้ใช้มีคำว่า "free" คุณสามารถส่งข้อความให้พวกเขาว่า "รับส่วนลด 10% ของคุณ"

การปรับเปลี่ยนเนื้อหาข้อความตาม ID, พฤติกรรม และความชอบของผู้ใช้เป็นวิธีที่มีประสิทธิภาพที่สุดในการเพิ่มความเกี่ยวข้องและได้รับผลลัพธ์ที่น่าประทับใจยิ่งขึ้นจากแคมเปญการตลาดของคุณ

## ไวยากรณ์

เทมเพลตเนื้อหาที่ใช้ [Liquid by Shopify](https://shopify.github.io/liquid/) ใช้การผสมผสานระหว่าง [**tags**](#tags), [**objects**](#objects), และ [**filters**](#undefined) เพื่อโหลดเนื้อหาแบบไดนามิก เทมเพลตเนื้อหาช่วยให้คุณสามารถเข้าถึงตัวแปรบางอย่างจากภายในเทมเพลตและแสดงผลข้อมูลของตัวแปรเหล่านั้นได้โดยไม่ต้องรู้อะไรเกี่ยวกับข้อมูลนั้นเลย

<Aside type="note">
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับไวยากรณ์ โปรดดูที่ [เอกสาร Liquid](https://shopify.github.io/liquid/basics/introduction/)
</Aside>

### Objects

`objects` กำหนดเนื้อหาที่จะแสดงให้ผู้ใช้เห็น `objects` ควรอยู่ในวงเล็บปีกกาคู่: `{{ }}`

ตัวอย่างเช่น เมื่อปรับแต่งข้อความ ให้ส่ง `{{Name}}` ในเนื้อหาเพื่อเพิ่มชื่อผู้ใช้ลงในเนื้อหาของข้อความ ชื่อของผู้ใช้ (ค่าแท็ก Name) จะแทนที่อ็อบเจกต์ Liquid ในข้อความที่ผู้ใช้จะเห็น

<Tabs>
<TabItem label="อินพุต">
```
Hi {{Name}}! We're glad you're back!
```
</TabItem>

<TabItem label="เอาต์พุต">
Hi Anna! We're glad you're back!
</TabItem>
</Tabs>

### Tags

`tags` สร้างตรรกะและควบคุมการไหลของเทมเพลต ตัวคั่นวงเล็บปีกกาเปอร์เซ็นต์ `{%` และ `%}` และข้อความที่อยู่รอบๆ จะไม่สร้างผลลัพธ์ที่มองเห็นได้เมื่อเทมเพลตถูกแสดงผล ซึ่งช่วยให้คุณสามารถกำหนดตัวแปรและสร้างเงื่อนไขหรือลูปได้โดยไม่ต้องแสดงตรรกะ Liquid ใดๆ ให้ผู้ใช้เห็น

ตัวอย่างเช่น การใช้แท็ก `if` คุณสามารถเปลี่ยนภาษาของข้อความตามภาษาที่ตั้งค่าไว้ในอุปกรณ์ของผู้ใช้ได้:

<Tabs>
  <TabItem label="อินพุต">

```liquid
{% if Language == 'fr' %}
Salut!
{% else %}
Hello!
{% endif %}
````

  </TabItem>

  <TabItem label="เอาต์พุต (fr)">
    Salut!
  </TabItem>

  <TabItem label="เอาต์พุต (es)">
    Hello!
  </TabItem>
</Tabs>


### ตัวดำเนินการ Tags

<table data-header-hidden><thead><tr><th width="189.5" align="center">ตัวดำเนินการ</th><th>คำอธิบาย</th></tr></thead><tbody><tr><td align="center"><code>==</code></td><td>เท่ากับ</td></tr><tr><td align="center"><code>!=</code></td><td>ไม่เท่ากับ</td></tr><tr><td align="center"><code>></code></td><td>มากกว่า</td></tr><tr><td align="center"><code>&#x3C;</code></td><td>น้อยกว่า</td></tr><tr><td align="center"><code>>=</code></td><td>มากกว่าหรือเท่ากับ</td></tr><tr><td align="center"><code>&#x3C;=</code></td><td>น้อยกว่าหรือเท่ากับ</td></tr><tr><td align="center"><code>or</code></td><td>ตรรกะ or</td></tr><tr><td align="center"><code>and</code></td><td>ตรรกะ and</td></tr><tr><td align="center"><code>contains</code></td><td>ตรวจสอบการมีอยู่ของสตริงย่อยภายในสตริงหรืออาร์เรย์ของสตริง</td></tr></tbody></table>

<Aside type="note">
ในแท็กที่มีตัวดำเนินการ `and` หรือ `or` มากกว่าหนึ่งตัว ตัวดำเนินการจะถูกตรวจสอบตามลำดับ _จากขวาไปซ้าย_ คุณไม่สามารถเปลี่ยนลำดับการดำเนินการโดยใช้วงเล็บได้ — วงเล็บเป็นอักขระที่ไม่ถูกต้องใน Liquid และจะทำให้แท็กของคุณไม่ทำงาน
</Aside>

### Filters

`filters` แก้ไขผลลัพธ์ของอ็อบเจกต์หรือตัวแปร Liquid โดยจะใช้ภายในวงเล็บปีกกาคู่ `{{ }}` และการกำหนดค่าตัวแปร และคั่นด้วยอักขระไปป์ `|` สามารถใช้ฟิลเตอร์หลายตัวกับผลลัพธ์เดียวได้ และจะถูกนำไปใช้จากซ้ายไปขวา


<Tabs>
<TabItem label="อินพุต">

```

{{ Name | capitalize | prepend:"Hello " }}

```

</TabItem>

<TabItem label="เอาต์พุต">

Hello Anna

</TabItem>
</Tabs>



## การใช้งานเทมเพลต Liquid

เทมเพลต Liquid สามารถใช้ได้ทั้งกับข้อความที่ส่งจาก Control Panel และ [API requests](/th/developer/guides/personalization/liquid-templates#using-liquid-templates-in-messages-sent-via-api)

ใน Pushwoosh เทมเพลต Liquid สามารถใช้ได้กับทุกฟิลด์เนื้อหาของข้อความในทุกช่องทาง:

* Push notifications
* Emails

หากต้องการเพิ่มเทมเพลต Liquid ลงในข้อความของคุณ ให้แทรกลงในเนื้อหาของข้อความ คุณสามารถทำได้เมื่อทำงานกับองค์ประกอบ [push](/th/product/customer-journey/journey-elements/#push) หรือ [email](/th/product/customer-journey/journey-elements/#email) โดยตรงจากอินเทอร์เฟซ Customer Journey Builder


ไปที่ **Customer Journey Builder** > **Create Campaign** > ลากและวางองค์ประกอบต่อไปนี้ลงบน canvas ของคุณ: **Audience-based Entry**, **Push** (หรือ **Email**) และ **Exit** เชื่อมต่อองค์ประกอบต่างๆ จากนั้นคลิกไอคอน **Push** เลือก **Custom content** และแทรกข้อความของคุณ


หากต้องการเพิ่มตรรกะ Liquid ให้ใช้ค่าแท็กด้วยไวยากรณ์ต่อไปนี้:

```liquid  
{% if TagName == 'value' %}  
  Content to send in this scenario  
{% else %}  
  Content to send otherwise  
{% endif %}
```
จากนั้นคลิก **Apply**

<video src="/personalization-liquid-templates-1.webm" title="อินเทอร์เฟซ Customer Journey Builder แสดงวิธีเพิ่มตรรกะเทมเพลต Liquid พร้อมเงื่อนไข if-else ในเนื้อหาการแจ้งเตือนแบบพุช" autoplay loop muted playsinline />

ตัวแปรเทมเพลต (Pushwoosh Tags) ไม่ควรมีช่องว่างและควรมีเฉพาะค่าที่เป็นตัวอักษรและตัวเลขและขีดล่างเท่านั้น เช่น `my_tag` หรือ `myTag` แทนที่จะเป็น `My Tag`

[เรียนรู้เพิ่มเติมเกี่ยวกับเทมเพลต Liquid ใน journeys](/th/product/customer-journey/journey-elements/dynamic-content-and-liquid-templates-in-journeys)

<Aside type="tip">
คุณยังสามารถใช้ไวยากรณ์ Liquid ในคำขอ `/createMessage` เพื่อใช้เทมเพลต Liquid ได้ สำหรับสิ่งนี้ คุณจะต้องได้รับความช่วยเหลือจากทีมพัฒนาของคุณ แบ่งปัน [คู่มือเทมเพลต Liquid](/th/developer/guides/personalization/liquid-templates) กับพวกเขาเพื่อดูคำแนะนำโดยละเอียด
</Aside>

## Connected content

Connected content เป็นคุณสมบัติในเทมเพลต Liquid ที่ช่วยให้คุณสามารถดึงและใช้ข้อมูลจากแหล่งข้อมูลภายนอก เช่น บริการเว็บ ได้โดยตรงภายในข้อความอีเมลหรือการแจ้งเตือนแบบพุชของคุณ คุณสมบัตินี้ช่วยให้สามารถปรับแต่งแบบเรียลไทม์โดยการดึงข้อมูล JSON จาก URL ที่ระบุและบันทึกลงในตัวแปรที่สามารถนำไปใช้ในเนื้อหาของคุณได้

#### กรณีการใช้งานหลัก

- **คำแนะนำผลิตภัณฑ์**: แสดงรายการผลิตภัณฑ์ที่ปรับให้เหมาะกับผู้ใช้แต่ละคน

- **รหัสโปรโมชั่น**: แทรกโค้ดโปรโมชั่นที่ไม่ซ้ำกันซึ่งสร้างโดยบริการแบ็กเอนด์

#### ข้อกำหนดเบื้องต้น

* หากต้องการใช้ Connected Content คุณต้องมีบริการแบ็กเอนด์ของคุณเองที่สร้างและให้ข้อมูลที่จำเป็น (เช่น รหัสโปรโมชั่น, คำแนะนำผลิตภัณฑ์) โดยอิงจาก **User ID, HWID หรือ custom tags** จากนั้น Pushwoosh จะดึงข้อมูลนี้ก่อนที่จะส่งข้อความ

### คู่มือการใช้งานทีละขั้นตอน

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

#### ขั้นตอนที่ 1. ตั้งค่าบริการแบ็กเอนด์

บริการแบ็กเอนด์ควร:

* ยอมรับคำขอที่มีพารามิเตอร์เฉพาะผู้ใช้ (เช่น `userId`) Connected Content รองรับ `UserID`, `HWID` หรือ custom tags ใดๆ ที่คุณตั้งค่าไว้ในโปรเจกต์ของคุณ
* ส่งคืนการตอบสนอง JSON พร้อมข้อมูลที่จำเป็น จากนั้นเนื้อหานี้สามารถแทรกแบบไดนามิกในข้อความได้

<Aside type="note" title="วิธีการทำงาน">

บริการแบ็กเอนด์ทำหน้าที่เป็นผู้ให้บริการข้อมูล โดยตอบสนองต่อคำขอ HTTP พร้อมข้อมูลเฉพาะผู้ใช้

1. Pushwoosh ส่งคำขอไปยังแบ็กเอนด์ของคุณ โดยส่งตัวระบุเฉพาะผู้ใช้เป็นพารามิเตอร์เคียวรี
2. แบ็กเอนด์ของคุณประมวลผลคำขอและดึงข้อมูลที่ร้องขอ
3. แบ็กเอนด์ของคุณส่งคืนการตอบสนอง JSON
4. ก่อนที่จะส่งข้อความ Pushwoosh จะดึงการตอบสนอง JSON จากบริการแบ็กเอนด์และใช้ค่าที่ส่งคืน (เช่น `code`) ในเนื้อหาข้อความแบบไดนามิก

**ตัวอย่างการตอบสนอง**

```
{ "code": "SPECIALOFFERFORUSER12345" }
```
</Aside>



#### ขั้นตอนที่ 2. สร้างพรีเซ็ตด้วย Сonnected content ใน Pushwoosh

1. ใน [Push](/th/product/content/push-presets/) หรือ [Email content editor](/th/product/content/email-content/drag-and-drop-email-editor/) ให้แทรกไวยากรณ์ Connected Content ลงในฟิลด์ข้อความ

**ตัวอย่าง**

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :save result %}  
```
**การแบ่งไวยากรณ์**
|  |  |
| ----- | ----- |
| `connected_content` | ดึงข้อมูล JSON จาก URL แบ็กเอนด์ที่ระบุ |
|    `http://your-backend-url.com` | ปลายทางของแบ็กเอนด์ที่ส่งคืนข้อมูลที่ต้องการในรูปแบบ JSON |
| `userId={{ ${userid} }}` | พารามิเตอร์เคียวรีแบบไดนามิกที่ส่ง User ID ไปยังแบ็กเอนด์ |
| `:save result` | จัดเก็บการตอบสนอง JSON ที่ดึงมาในตัวแปร result เพื่อใช้ในเทมเพลต Liquid |

![แทรกไวยากรณ์ Connected Content](/connectedcontent.webp)

**การรับรองความถูกต้อง (ไม่บังคับ)**

หากบริการแบ็กเอนด์ของคุณต้องการการรับรองความถูกต้อง คุณสามารถรวม API key หรือ token ไว้ในคำขอ Connected Content เพื่อให้แน่ใจว่าการเข้าถึงมีความปลอดภัย

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}&auth=YOUR_API_KEY :save result %}  
```

คุณยังสามารถส่งข้อมูลการรับรองความถูกต้อง (หรือข้อมูลอื่นๆ) เป็นส่วนหัว HTTP โดยใช้พารามิเตอร์ `:headers` ที่เป็นทางเลือก ซึ่งเป็นอ็อบเจกต์ JSON ของชื่อและค่าส่วนหัว

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :headers {"Authorization": "Bearer YOUR_TOKEN", "X-Api-Key": "YOUR_API_KEY"} :save result %}  
```
|  |  |
| ----- | ----- |
| `:headers {...}` | อ็อบเจกต์ JSON ของส่วนหัว HTTP ที่ส่งไปพร้อมกับคำขอ เช่น `Authorization: Bearer <token>` |

<Aside type="caution" title="ค่าคงที่เท่านั้น">
ตัวแปรการปรับแต่ง `${}` ทำงานได้เฉพาะภายใน URL เท่านั้น ค่าภายใน `:headers` เป็นค่าคงที่และไม่มีการประมาณค่า
</Aside>

**การใช้แท็กใน Connected content**

หากต้องการรวม custom tags ให้แทรกเป็นพารามิเตอร์เคียวรีในคำขอ **Connected Content** (`{{ tag_name }}`)

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}{{ Language }} :save result %} 
```

2. จากนั้น เพิ่มข้อความโดยรวม **ข้อมูลที่ดึงมา** ดังนี้:

```

Hey, {{userid}}, grab your personal promo code - {{result.code}} 
```

![เพิ่มข้อความพร้อมกับ **ข้อมูลที่ดึงมา**](/connectedcontent-1.webp)

3. หลังจากสรุปเนื้อหาข้อความและกำหนดการตั้งค่าพรีเซ็ตแล้ว ให้บันทึกไว้เพื่อนำกลับมาใช้ใหม่ในแคมเปญ

<video src="/connectedcontent-2.webm" title="ส่งข้อความด้วย connected content" autoplay loop muted playsinline />

#### ขั้นตอนที่ 3. ส่งข้อความโดยใช้พรีเซ็ตที่กำหนดค่าไว้

ส่งข้อความด้วยพรีเซ็ตนี้โดยใช้ [one-time push](/th/product/messaging-channels/push-notifications/send-push-notifications/one-time-push/#how-to-send-a-push-notification-using-the-one-time-push-form) หรือ [email form](/th/product/messaging-channels/emails/sending-emails/send-one-time-emails/) หรือ [customer journey](/th/product/customer-journey/pushwoosh-journey-overview/)

<Aside type="caution" title="สำคัญ">
หากบริการส่งคืนสถานะอื่นที่ไม่ใช่ HTTP 200 OK อีเมลหรือการแจ้งเตือนแบบพุชจะไม่ถูกส่ง ซึ่งจะช่วยให้แน่ใจว่าการสื่อสารของคุณจะถูกส่งออกไปก็ต่อเมื่อดึงข้อมูลที่จำเป็นได้สำเร็จเท่านั้น
</Aside>