# การใช้ข้อมูลการตอบกลับของ webhook ใน journey ของคุณ

## ภาพรวม

เมื่อคุณ [แมปค่าจากการตอบกลับของ webhook](/th/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables) Pushwoosh จะจัดเก็บค่าเหล่านั้นเป็นตัวแปรที่คุณสามารถใช้ในภายหลังใน journey ได้ทุกที่ที่คุณจะใช้ [Event attribute](/th/product/audience-data-and-segmentation/events/#2-set-attributes) ปกติ

<Aside type="note">
หากต้องการเพิ่มองค์ประกอบ **Webhook** และกำหนดค่า **Response mapping** โปรดดูที่ [Webhook](/th/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables)
</Aside>

## บันทึกค่า webhook เป็น Tag ด้วย Update user profile

[**Webhook**](/th/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables) สามารถส่งคืนข้อมูลจากระบบภายนอก เช่น CRM user ID หรือสถานะการสมัครสมาชิก ซึ่ง Pushwoosh ยังไม่ได้จัดเก็บไว้ในโปรไฟล์ผู้ใช้ [**Update user profile**](/th/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response) จะบันทึกค่าที่แมปไว้เป็น [Tags](/th/product/audience-data-and-segmentation/user-data-tags/tags/) เพื่อให้คุณสามารถใช้ใน [segments](/th/product/audience-data-and-segmentation/segmentation/), [dynamic content](/th/product/personalization/dynamic-content/) และขั้นตอน journey ในภายหลังได้

### ตัวอย่าง: บันทึก CRM user ID เป็น Tag

ผู้ใช้ใหม่ลงทะเบียนในแอปของคุณ และ journey จะสร้างระเบียนที่ตรงกันใน CRM ของคุณ การบันทึก CRM user ID ที่ส่งคืนมาเป็น Tag จะช่วยให้คุณสามารถอ้างอิงหรืออัปเดตระเบียน CRM เดียวกันได้ในภายหลัง เช่น จาก journey อื่นหรือการเรียก Webhook ติดตามผล แทนที่จะสร้างระเบียนซ้ำซ้อนทุกครั้งที่ผู้ใช้เข้าสู่ journey อีกครั้ง

**โฟลว์ของ Journey:** Trigger-based Entry → Webhook → Update user profile → Exit

1. สร้าง journey ด้วย **Trigger-based Entry** บน `SignUp` event
2. เพิ่มองค์ประกอบ **Webhook** หลังจากขั้นตอนการเข้า ตั้งชื่อ (เช่น `Create user in CRM`) และตั้งค่า URL คำขอไปยัง endpoint สร้างผู้ใช้ของ CRM ของคุณ
3. ใน **Response mapping** ตั้งค่า **Path** ไปยังฟิลด์ ID ในการตอบกลับ (เช่น `data.user.id`) และ **Attribute** เป็น `crm_user_id`

<img src="/journey-elements-webhook-response-data-1.webp" alt="การแมปการตอบกลับของ Webhook ด้วย Path data.user.id และ Attribute crm_user_id" />

4. เพิ่มองค์ประกอบ **Update user profile** หลังจากขั้นตอน **Webhook**

5. ใน **Dynamic Tag Value** คลิก **+ Dynamic Value** ใน **Tag** เลือก Tag ที่จัดเก็บ CRM ID (สร้างไว้ล่วงหน้าหากจำเป็น) ใน **Event** เลือกขั้นตอน webhook ตามชื่อที่คุณตั้งไว้ (`Create user in CRM`) ใน **Dynamic Value** เลือก `crm_user_id`
<img src="/journey-elements-webhook-response-data-2.webp" alt="Dynamic Tag Value ที่มี Tag สำหรับ CRM ID, ขั้นตอน Event Webhook และ Dynamic Value crm_user_id" />
6. เพิ่ม **Exit** ที่ส่วนท้ายของสาขา
<img src="/journey-elements-webhook-response-data-3.webp" alt="สาขาของ Journey ที่สิ้นสุดด้วย Exit หลังจากขั้นตอน Update user profile" />

<Aside type="caution">
หากค่า webhook หายไปสำหรับผู้ใช้ (การตอบกลับไม่ใช่ JSON, **Path** ไม่สามารถแก้ไขได้ หรือการเรียกไม่สำเร็จ) Pushwoosh จะข้ามการอัปเดต Tag นั้น Tag จะยังคงค่าเดิมหรือไม่ได้ตั้งค่า และ journey จะดำเนินต่อไปโดยไม่มีข้อผิดพลาดในขั้นตอนนี้ เรียกใช้ [**Test webhook**](/th/product/customer-journey/journey-elements/channels/webhook/#test-the-webhook) ก่อนเปิดใช้งานเพื่อยืนยันการแมปของคุณ [เรียนรู้เพิ่มเติม](/th/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response)
</Aside> 

## กำหนดเวลาหน่วงจากค่า webhook ด้วย Time Delay

วันที่เข้าชม กำหนดเวลาต่ออายุ และช่วงเวลาการจัดส่งมักจะอยู่ในระบบการจองหรือการเรียกเก็บเงินภายนอก หลังจากที่ [**Webhook**](/th/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables) แมปวันที่จากการตอบกลับของ API แล้ว [**Time Delay**](/th/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response) สามารถหยุด journey ชั่วคราวจนถึงช่วงเวลานั้นได้ เช่น 2 วันก่อนการนัดหมาย เพื่อให้ข้อความถัดไปถูกส่งออกไปตรงเวลา

### ตัวอย่าง: กำหนดเวลาการแจ้งเตือนจากวันที่ในการตอบกลับ

ผู้ใช้จองนัดหมายในแอปของคุณ journey จะดึงข้อมูลวันที่เข้าชมจากระบบการจองของคุณและส่งการแจ้งเตือนแบบ push 2 วันก่อนการเข้าชม


1. สร้าง journey ด้วย **Trigger-based Entry** บน `AppointmentBooked` event
2. เพิ่มองค์ประกอบ **Webhook** หลังจากขั้นตอนการเข้า ตั้งชื่อ (เช่น `Get appointment details`) และตั้งค่า URL คำขอไปยัง API ระบบการจองของคุณ
3. ใน **Response mapping** ตั้งค่า **Path** ไปยังฟิลด์วันที่ในการตอบกลับ (เช่น `appointment.date`) และ **Attribute** เป็น `visit_date`
<img src="/journey-elements-webhook-response-data-4.webp" alt="ขั้นตอน Webhook พร้อมการแมปการตอบกลับสำหรับ appointment.date ไปยัง visit_date" />
4. เพิ่มองค์ประกอบ **Time Delay** หลังจากขั้นตอน **Webhook** เลือก **Based on user/event data** ตั้งค่า **Get date from** เป็น **Event** ตั้งค่า **Event** เป็นขั้นตอน webhook ตามชื่อที่คุณตั้งไว้ (`Get appointment details`) ตั้งค่า **Event value** เป็น `visit_date` และตั้งค่าการหน่วงเวลาเป็น **Before** `2` **Days**
<img src="/journey-elements-webhook-response-data-5.webp" alt="Time Delay ที่กำหนดค่าจาก webhook visit_date พร้อมออฟเซ็ต Before 2 Days" />
5. หากผู้ใช้สามารถจองน้อยกว่า 2 วันก่อนการเข้าชม ให้เปิดใช้งาน **Split to branches if the date's in the past or date is empty** บนองค์ประกอบ **Time Delay** ซึ่งจะสร้างสองสาขาคือ **In the past** และ **In the future** ดูที่ [Split branches when the date is in the past or empty](/th/product/customer-journey/journey-elements/flow-controls/time-delay/#split-branches-when-the-date-is-in-the-past-or-empty)
6. เพิ่มขั้นตอน **Push** พร้อมข้อความแจ้งเตือนของคุณ หากเปิดใช้งานการแยกสาขา ให้เพิ่ม **Push** นี้ในทั้งสองสาขา: **In the past** (ส่งทันที) และ **In the future** (หลังจาก **Time Delay**)
7. เพิ่ม **Exit** ที่ส่วนท้ายของแต่ละสาขา
<img src="/journey-elements-webhook-response-data-6.webp" alt="Time Delay ที่แบ่งออกเป็นสาขา In the past และ In the future โดยแต่ละสาขามีขั้นตอน Push และ Exit" />

<Aside type="caution">
หากค่าที่แมปหายไปหรือไม่ใช่วันที่ที่ถูกต้อง ผู้ใช้จะออกจาก journey พร้อมข้อผิดพลาดในขั้นตอนนี้

หากการเข้าชมเร็วกว่า 2 วัน เป้าหมาย **Before** `2` **Days** จะอยู่ในอดีตแล้วเมื่อผู้ใช้ไปถึง **Time Delay** และผู้ใช้จะออกจาก journey โดยไม่มีข้อผิดพลาดและไม่มีการแจ้งเตือน เว้นแต่คุณจะเปิดใช้งาน **Split to branches if the date's in the past or date is empty**

ซึ่งแตกต่างจาก [**Update user profile**](/th/product/customer-journey/journey-elements/flow-controls/update-user-profile/#use-a-value-from-a-webhook-response) ซึ่งจะปล่อยให้ Tag ไม่เปลี่ยนแปลงและดำเนินการต่อ **Time Delay** จะหยุดผู้ใช้เมื่อวันที่หายไป ไม่ถูกต้อง หรืออยู่ในอดีต (โดยไม่มีการแยกสาขา)
ตรวจสอบให้แน่ใจว่า webhook ของคุณส่งคืนวันที่ใน [รูปแบบที่รองรับ](/th/product/customer-journey/journey-elements/flow-controls/time-delay/#delay-based-on-user-or-event-data) อย่างน่าเชื่อถือ เรียกใช้ [**Test webhook**](/th/product/customer-journey/journey-elements/channels/webhook/#test-the-webhook) ก่อนเปิดใช้งาน [เรียนรู้เพิ่มเติม](/th/product/customer-journey/journey-elements/flow-controls/time-delay/#use-a-date-from-a-webhook-response)
</Aside>

## ข้อควรจำ

* **Path syntax:** ใช้เส้นทางที่คั่นด้วยจุด (เช่น `data.user.id`) ไม่รองรับ Wildcards และ filters ดูรายละเอียดที่ [Webhook response mapping](/th/product/customer-journey/journey-elements/channels/webhook/#map-webhook-response-data-to-variables)
* **Response size:** การตอบกลับที่ใหญ่กว่า 64 KB จะไม่ถูกประมวลผลสำหรับการแมป
* **Testing:** เรียกใช้ [**Test webhook**](/th/product/customer-journey/journey-elements/channels/webhook/#test-the-webhook) ในองค์ประกอบ **Webhook** ก่อนที่คุณจะใช้ค่าที่แมปใน journey ที่ใช้งานจริง